Wired Chip - Expression 2

Aus GMod Wiki (DE)

Wechseln zu: Navigation, Suche
Image:Wire_Icon.png
Zur・k
Funktion:Programmierbares Wire-Gate
Primäfeuer:Spawnt/Updatet ein E2 Gate
Sekundäfeuer:Öffnet den Editor mit dem Code in der E2
Nachladen:Keine Aktion
Notizen:Dies ist nur eine kleine Auswahl, was mit dem E2 möglich ist. Mehr Informationen finden sich in der englischen Wiki.

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
##KommentarAlles 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.

Powered by gmod.de