====== Über Entity I/O togglebare Materials ====== Manchmal kann es praktisch sein, einen Button oder eine Textur auf Knopfdruck zu verändern oder bei einer bestimmten Aktion die Textur eines Brushes anzupassen. Das einfachste Beispiel ist ein Aufzug, bei dem die Stockwerk-Nummern angezeigt werden oder ein Button, der seine Textur ändert, sobald man diesen drückt. ===== Texturen erstellen ===== * Als erstes benötigen wir die einzelnen Bilder als .TGA-Dateien. Dieser werden wie imemr unter \\ ''..\Steam\SteamApps\[UserName]\sourcesdk_content\[GameName]\materialsrc'' abgespeichert, allerdings durchnummeriert: Angefangen bei *001.TGA bis zur letzten Datei. Am Beispiel eines Aufzugs mit 4 Stockwerken erhält man folgende Dateien: LiftSign001.tga LiftSign002.tga LiftSign003.tga LiftSign004.tga * Im gleichen Verzeichnis erstellt man nun eine Textdatei genannt "LiftSign.txt" mit folgendem Inhalt: "startframe" "1" "endframe" "4" * Statt nun die .TGA-Dateien auf vtex.exe zu ziehen, nehmen wir die Text-Datei. Dadurch entsteht unter \\ ''..\Steam\SteamApps\[UserName]\sourcesdk_content\[GameName]\[GameShortname]\materials'' eine .VTF-Datei, die alle 4 .TGA-Dateien enthält. * Nun müssen wir noch eine .VMT-Datei mit folgendem Inhalt definieren: "LightmappedGeneric" { "$baseTexture" "LiftSign" "$surfaceprop" "metal" "Proxies" { "ToggleTexture" { "toggleTextureVar" "$baseTexture" "toggleTextureFrameNumVar" "$frame" } } } ===== Entities in Hammer ===== Nachdem wir das Material erstellt haben, können wir es bereits im Hammer verwenden. Allerdings tut sich noch nicht allzu viel, wenn wir uns die Map anschauen. Daher müssen nun einige Entities erstellt werden. Folgendes wird benötigt: * [[source:entities:env_texturetoggle]], welches die Textur ändert * [[source:entities:func_brush]], auf dem die Textur angewendet wird. Dies kann auch ein [[source:entities:func_button]] oder etwas ähnliches sein, hauptsache es hat einen Namen. * [[source:entities:func_button]] oder ähnliches, das den Wechsel der Textur auslöst. Dies kann auch der [[source:entities:func_button]] auf dem die Textur liegt selbst sein. Um das ganze etwas einfacher zu erklären, wird hier nur ein [[source:entities:func_button]] und ein [[source:entities:env_texturetoggle]] erklärt. Alle weiteren funktionieren entsprechend genauso: * Als erstes erstellen wir das [[source:entities:env_texturetoggle]] und geben ihm den Namen "LiftSignTexToggle" (oder einen beliebigen anderen). Unter **Target Brush** geben wir den Namen des Ziel-Entities mit unserem Material ein (in diesem Fall der Button "LiftSign"). * Als nächstes erstellen wir einen [[source:entities:func_button]] mit unserer Textur und geben ihm den Namen "LiftSign" (wieder beliebig). Im [[source:entities:func_button]] stellen wir unter Outputs folgendes ein: ^ Output ^ Target Entity ^ Target Input ^ Parameter ^ Delay ^ | OnPressed | "LiftSignTexToggle" | SetTextureIndex | 2 | 0.00 | \\ Dies bedeutet: Beim drücken des Buttons wird unser [[source:entities:env_texturetoggle]] getriggert und gibt unserem Button automatisch die Textur mit dem Index "2".\\ \\ **Achtung:** Der TexturenIndex fängt bei "0" an, das heisst in diesem Beispiel wären die Indizes 0,1,2 und 3 möglich.\\ \\ Alle weiteren Texturenindizes könnten über weitere [[source:entities:func_button]]s oder z.B. durch einen [[half-life_2:entities:path_track]] bei **OnPass** getriggert werden. Lasst Euch was einfallen!