Wired Chip - Expression 2
Aus GMod Wiki (DE)
| Zur・k |
|
Inhalt |
Kurze Beschreibung
Warum sollte ich Expression 2 benutzen?
- Rechenoperationen werden schneller und lagfreier erledigt, da alles in einem Chip ist.
- Kann Daten seriell via Wirelink übertragen (bsp.: Monitore, andere E2) und Props sowie Ragdolls manipulieren.
- Kann Daten wie Zahlen, Vektoren, Winkel und Strings schnell und einfach verarbeiten.
- Fehler können, im vergleich zu einzelne Chips, schnell und einfach behoben werden.
Der Editor
Tasten Beschreibung Strg-Leertaste Code Validieren (Überprüfen) Strg-S Speichern Strg-Z Rückgängig Strg-Y Rückgängig stornieren Strg-X Ausschneiden Strg-C Kopieren Strg-V Einfügen Strg-A Alles auswählen Strg-I/Tab Tabsprung Strg-O/Shift-Tab Tabsprung retour Strg-F Suche Strg-Q Editor schliessen Strg-Pfeiltaste auf Nach oben scrollen Strg-Pfeiltaste ab Nach unten scrollen Strg-Pfeiltaste links Ein Wort nach links springen Strg-Pfeiltaste rechts Ein Wort nach rechts springen Strg-Pos1 Zum Anfang der Zeile gehen Strg-Ende Zum Ende der Zeile gehen
Syntax
Initialisierung
Bevor das Expression 2 Gate den eingegebenen Code verarbeiten kann, so muss erst einmal festgelegt werden, welche Ein-/Ausgänge dem E2 zur Verfügung stehen soll oder was es sonst noch beachten muss.
@name Name der Expression @inputs Variabeln, die als Eingänge für Daten benutzt werden @outputs Variabeln, die als Ausgänge für Daten benutzt werden @persists Variabeln, die nicht als Ein- oder Ausgang, sondern als "Zwischenspeicher" benutzt werden @trigger - @model Pfad zu einem Modell (.mdl), welches das E2 annehmen soll
Weicht der Datentyp in den Inputs und Outputs von den "normalen" Zahlen ab, so muss der Typ nach der Variabeln definiert werden.
:vector In/Output ist ein Vektor :angle In/Output ist ein Winkel :string In/Output ist ein String :entity In/Output ist ein Entity :wirelink Input wird als wirelink verwendet
Durch einer weiteren Zeile Code kann man noch entscheiden, wie oft die E2 sich aktualisieren soll.
runOnTick(A) Führt den Code jede Frame (pro Sekunde) aus. A bestimmt ob der Code ausgeführt werden soll (1) oder nicht (0) interval(A) Führt den Code alle A Millisekunden aus.
Bedingungen
Bedingungen führen ihren Code aus, wenn eine fest definierte Bedingung erfüllt wurde.
Syntax Beispiel Beschreibung # #Kommentar Alles was hinter dem # steht gilt als ein Kommentar und wird von der E2 ignoriert if () {} if (A) { B = C } Wenn der Wert in der Bedingung () WAHR ist wird alles in der geschweiften Klammer ausgeführt else {} else {A = B} Muss hinter if () {} oder elseif () {} stehen. Wenn die vorgehende Bedingung FALSCH ist, so wird alles in den geschweiften Klammer ausgeführt. elseif () {} elseif (A) {B = C} Muss hinter if () {} oder elseif () {} stehen. Wenn die vorhergehende Bedingung FALSCH UND die Bedingung in den Klammer WAHR ist, so wird alles in den geschweiften Klammern ausgeführt. ( ? : ) D = (A ? B : C) Wenn A WAHR ist, dann ist D=B, ansonsten D=C. Hinweis: [A ?: B] = [A ? A : B]
Logische Verknüpfungen
Das logische Verhältniss einer oder mehreren Variablen zueinander, welches als Ergebniss ein Wahr (1) oder Falsch (0) liefert.
Syntax Beispiel Beschreibung & if (A & B) {C = 1} UND-Verknüpfung. Ist WAHR, wenn A UND B Wahr sind. | if (A | B) {C = 1} ODER-Verknüpfung. Ist WAHR, wenn A ODER B ODER beide Wahr sind. == if (A == B) {C = 1} Gleich-Verknüpfung. Ist WAHR, wenn A und B identisch sind. != if (A != B) {C = 1} Ungleich-Verknüpfung. Ist WAHR, wenn A und B NICHT identisch sind. < if (A < B) {C = 1} Kleiner-als-Verknüpfung. Ist WAHR, wenn A kleiner als B ist. <= if (A <= B) {C = 1} Kleiner-gleich-Verknüpfung. Ist WAHR, wenn A kleiner oder gleich B ist. > if (A > B) {C = 1} Größer-als-Verknüpfung. Ist WAHR, wenn A größer als B ist. >= if (A >= B) {C = 1} Größer-gleich-Verknüpfung. Ist WAHR, wenn A größer oder gleich B ist. ! if (!A) {B = 1} Muss mit einer Variablen stehen. NICHT-Verknüpfung. "Dreht" das logische Ergebniss einer Variablen um. ~ if (~Button & Button) {Etwas Ausführen} Muss mit einer Variablen stehen. Ergibt 1, wenn eine Variable sich ändert.
Schleifen
Schleifen führen einen Code wiederholt solange aus, solange eine Bedingung oder Abbruchbedingung stimmt.
Syntax Beispiel Beschreibung while () {} while (A) {B++} Alles was zwischen den geschweiften Klammer steht wird ausgeführt, solange die Bedingung in den runden Klammern stimmt. Die Bedingung wird immer wieder am Anfang der Schleife überprüft. for () {} for (I = A, B[, C]) {} Addiert solange einen Wert C zu A, bis A gleich B ist. Wenn C nicht angegeben wurde, dann wird mit 1 addiert. A kann als Laufindex innerhalb der Schleife verwendet werden. foreach () {} foreach(K,V:type=Table) {} Speziell für Tabellen. K entspricht einem Index, die jedem Eintrag in der Tabelle den Wert und Typ V zuweist. continue if (A) {continue} Benötigt eine while/for/foreach-Schleife. Dieser Befeht überspringt alle weiteren Anweisungen und beginnt wieder am Schleifenanfang. break if (A) {break} Benötigt eine while/for/foreach-Schleife. Dieser Befehl beendet die Schleife sofort. Alle weiteren Anweisungen werden übersprungen.
Weitere Operatoren
Syntax Beispiel Beschreibung $ delta_Wert = $Wert Zeigt die Wertänderung pro Zeiteinheit im Chip an. -> ->Input bzw. ->Output An einem Eingang gibt diese Operation eine 1 aus, wenn dieser Verkabelt wurde. An einem Ausgang wird die Anzahl der Verkabelten Ausgänge ausgegeben. #ifdef #ifdef entity:setAlpha(number) Überprüft ob die Funktion setAlpha() auf dem Server verfügbar ist. #else #else Benötigt #ifdef. Wenn die vorhergehende Bedingung falsch ist werden die Zeilen hiernach ausgeführt #endif #endif Benötigt #ifdef. Schließt die #ifdef-Bedingung
Rechenoperationen
Die E2 kann nicht nur Logische sondern natürlich auch arithmetische Operationen durchführen. Dabei können verschiedene Datentypen, wie Zahlen, Vektoren oder Winkel verarbeitet werden.
Arithmetik
Syntax Beschreibung A + B Addition A - B Subtraktion A * B Multiplikation A / B Division A ^ B Potenz A % B bzw. mod(A,B) Modulo rechnung A ++ A um 1 erhöhen A -- A um 1 erniedrigen A += B A um B erhöhen. Dasselbe wie A = A + B. A -= B A um B erniedrigen A *= B A um B multiplizieren A /= B A um B dividieren A ^= B A um B potenzieren A %= B A um B modulieren. sqrt(A) Wurzel cbrt(A) Kubikwurzel abs(A) Betrag von A ceil(A,B) Aufrunden, mit B Nachkommastellen. (B kann weggelassen werden) floor(A,B) Abrunden mit B Nachkommastellen. (B kann weggelassen werden) round (A) Standart Runden zur nächsten, ganzzahligen Zahl. frac(A) Gibt die Nachkommastellen von A aus. clamp(A,B,C) Gibt A aus, ansonsten B als Minimum und C als Maximum von A. inrange(A,B,C) Gibt 1 aus, wenn A sich zwischen B und C befindet. sign(A) Gibt das Vorzeichen von A aus (-1, 0, 1). min(A,B) Gibt den kleineren Wert von beiden aus. Geht auch mit mehreren Parameter. max(A,B) Gibt den größeren Wert von beiden aus. Geht auch mit mehreren Parameter. random(A,B) Gibt eine zufällige Zahl zwischen A und B aus.
Geometrie
Syntax Beschreibung pi() Gibt Pi aus (3,14159...) sin(A) Gibt den Sinus von A Grad aus. cos(A) Gibt den Cosinus von A Grad aus. tan(A) Gibt den Tangens von A Grad aus. asin(A) Gibt den Arcussinus von A aus. acos(A) Gibt den Arcuscosinus von A aus. atan(A) Gibt den Arcustangens von A aus.
