Ab der Version 0.910 unterstützt XScript die Verwendung von Units mit dem uses-Befehl.
Ein unit-Script ist deutlich einfacher aufgebaut als ein program-Script. Prinzipiell reichen folgende Code-Zeilen:
unit Name;
// irgendwelcher Code, beliebige Variablen oder Befehle in üblicher Syntax
end.
Das Unit-Skript muss dann vom Typ "manuell" sein und ganz normal mit dem entsprechenden Namen in der Skriptliste des Spielsatzes stehen.
Sobald dies geschehen ist, kann man in beliebigen Programscripten (und auch verschachtelt in anderen Units) den Befehl
uses Name;
einfügen. Will man mehrere units einfügen, dann müssen diese durch Kommas getrennt genannt werden:
uses Name1, Name2, Name3;
Was ist jetzt der Sinn dieses Befehls?
Erst einmal ist der Uses-Befehl so etwas wie ein Platzhalter für den gesamten Programmtext der jeweiligen Unit. Das Programm läuft also genauso, alsob man an Stelle des uses-Befehls eine Kopie des Inhaltes der jeweiligen Unit platziert.
Der Zweck ist eine vereinfachte Organisation der Programme und Skripte. Verschiedene Anwendungsbeispiele dazu stehen in der Demo des galaktischen Krieges von der 0.910:
UKI_BAgeo ist eine unit mit verschiedenen Befehlen zur Positionsermittlung auf dem Geoscape. Diese Befehle werden für die UFO-Steuerungen immer wieder benötigt, aber ich hatte keine Lust sie immer wieder zu kopieren - also kamen sie in eine unit, die in jedem Skript eingebunden wurde das diese Befehle braucht.
UKI_AAinit ist eine unit, die Befehle zur Datenübergabe und Initialisierung der UKI-Skripte enthält. Dadurch das ich diese Befehle in eine einzelne Unit ausgelagert habe, kann ich alle Änderungen an der Schnittstelle zentral an einem Punkt vornehmen - selbst wenn ich die gesamte Programmstruktur umstelle, muss ich an keinem anderen UKI-Script etwas ändern solange ich die Funktionsaufrufe unverändert lasse.
Dasselbe Prinzip ist auch der Grund für UKI_ABall - Wenn irgendjemand die Reaktionen der verschiedensten UFOs zählen und als Auslöser für anderes benutzen will, dann muss er nur den entsprechenden Code in UKI_ABall ergänzen. Selbst wenn er Monate später ein ganz neues Verhaltensskript für UFOs aus dem UKI-Skriptsatz in seinen Spielsatz aufnimmt, weiß er das dieses neue UFO automatisch in seiner Verhaltenszählung integriert ist.
Einen dritten Einsatz sieht man in der Unit DEF_0constants (und in den MSG-Units der noch nicht veröffentlichten zweiten DEMO):
Es gibt verschiedene Werte, die man immer wieder in den Skripten benötigt - z.B. die Anzahl der Rassen, die im galaktischen Krieg definiert sind.
Alle diese Werte werden als Konstanten in den Scripten verwendet, aber diese Konstanten sind in einer getrennten Unit definiert. Wenn ich jetzt eine neue Rasse dem Spielsatz hinzufüge, muss ich nach Eingabe aller Einheiten im Editor nur noch in der Konstantenunit die entsprechende Konstante erhöhen und alle Skripte funktionieren automatisch auch mit der neuen Rasse.
Ich hoffe das diese Beispiele genug über die verschiedenen Verwendungsmöglichkeiten der Units erläutern.