Wenn Du mehrere Blöcke bedienen willst, wie beispielsweise alle Lichter, kannst Du das über Listen und Schleifen tun. Das folgende Besipiel zeigt dir Schritt für Schritt wie Du das bewerkstelligen kannst. Dabei werden alle Lichter je nach Eingabe an- oder ausgeschaltet.

1.
Erstellen wir zuerst eine leere Liste für die Innenbleuchtung. Das geht mit dem Typ List. Du musst zudem den Typ der Elemente angeben wie hier IMyInteriorLight.
Allgemein würde aber auch IMyTerminalBLock gehen, da das die Elternklasse aller Blockarten ist.

List<IMyInteriorLight> lichter = new List<IMyInteriorLight>();

2.
Nun benötigen wir noch eine String-Variable für die auszuführende Aktionn Text, welche später auf die Lichter angewendet werden soll:

String aktion = "OnOff_Off";

3.
Nun füllen wir die leere Liste lichter mit alle Blöcken des Typs IMyInteriorLight aus dem aktuellen Grid:

GridTerminalSystem.GetBlocksOfType<IMyInteriorLight>(lichter);

4.
Jetzt unterscheiden wir, ob das Argument das an den Programmierbaren Block übergeben wurde on oder off ist. Je nach dem soll später eine andere Aktion ausgeführt werden:

if (argument == "on")
 {
 aktion = "OnOff_On";
 }
 else if (argument == "off")
 {
 aktion = "OnOff_Off";
 }

5.
Nun durchlaufen wir mit einer for-Schleife die Liste aller Lichter. Dabei holen wir uns bei jdem Durchlauf das aktuelle Element aus der Liste und führen die vorher festgelegte Aktion darauf durch:

// Durchlaufe die Liste aller Lichter
 for (int i = 0; i < lichter.Count; i++)
 {
 // Hole Element i aus der Liste
 IMyInteriorLight licht = lichter[i] as IMyInteriorLight;

 // Wende Action Ausschalten auf das Licht an
 licht.ApplyAction(aktion);
 }
}

Der vollständige Code sieht dann folgendermaßen aus und kann so in den Editor deines Programmierbaren Block kopiert werden:


// Leere Liste für alle Innenbeleuchtungen anlegen
List<IMyInteriorLight> lichter = new List<IMyInteriorLight>();

// Variable für die Aktion die auf das Licht angewendet werden soll
String aktion = "OnOff_Off"; 

// Die Hauptfunktion, diese wird vom Programmierbaren Block ausgeführt
public void Main(string argument)
{
 // Weist der Liste lichter alle Blöcke des Typs I
 GridTerminalSystem.GetBlocksOfType<IMyInteriorLight>(lichter);

 // Wenn dem Programmierbaren Block "on" als argument übergeben wird
 if (argument == "on")
 {
 aktion = "OnOff_On";
 }
 // Wenn dem Programmierbaren Block "off" als argument übergeben wird
 else if (argument == "off")
 {
 aktion = "OnOff_Off";
 }
 
 // Durchlaufe die Liste aller Lichter
 for (int i = 0; i < lichter.Count; i++)
 {
 // Hole Element i aus der Liste
 IMyInteriorLight licht = lichter[i] as IMyInteriorLight;

 // Wende Action Ausschalten auf das Licht an
 licht.ApplyAction(aktion);
 }
}

Die Ausführung des Skriptes kann man zum Beispiel auf zwei Knöpfe einer Schaltkonsole legen. Dafür muss man über das Terminal die gewünschten Knöpfe so konfigurieren, das sie den Programmierbaren Block mit den Argumenten on beziehungsweise off ausführen

© 2019 SpaceEngineering.de
Dies ist keine offizielle Seite von Keen Software House oder Steam