Alle Türen öffnen uns schließen läuft quasi genaus so wie alle Lichter an- und ausschalten. Dieses Tutorial dient zur Wiederholung und Festigung des Schleifenprinzips, da dieses sehr häufig zur Anwendung kommt.

1.
Erstellen wir zuerst wieder eine leere Liste für die alle Türen. Das geht mit dem Typ List. Du musst zudem den Typ der Elemente angeben wie hier IMyDoor.

List<IMyDoor> tueren = new List<IMyDoor>();

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

String aktion = "Open_Off";

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

GridTerminalSystem.GetBlocksOfType<IMyDoor>(tueren);

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 == "open")
 {
 aktion = "Open_On";
 }
 else if (argument == "close")
 {
 aktion = "Open_Off";
 }

5.
Nun durchlaufen wir mit derfor-Schleife die Liste aller Türen. Dabei holen wir uns bei jedem Durchlauf das aktuelle Element aus der Liste und führen die vorher festgelegte Aktion darauf durch:

// Durchlaufe die Liste aller Türen
 for (int i = 0; i < tueren.Count; i++)
 {
 // Hole Element i aus der Liste
 IMyDoor tuer = tueren[i] as IMyDoor;

 // Wende Action auf die Tür an
 tuer.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 Tueren anlegen
List<IMyDoor> tueren = new List<IMyDoor>();

// Variable für die Aktion die auf das Licht angewendet werden soll
String aktion = "Open_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<IMyDoor>(tueren);

 // Wenn dem Programmierbaren Block "open" als argument übergeben wird
 if (argument == "open")
 {
 aktion = "Open_On";
 }
 else if (argument == "close")
 {
 aktion = "Open_Off";
 }
 
 // Durchlaufe die Liste aller Türen
 for (int i = 0; i < tueren.Count; i++)
 {
 // Hole Element i aus der Liste
 IMyDoor tuer = tueren[i] as IMyDoor;
 
 // Wende Action Schließen/Öffnen auf das die Tür an
 tuer.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 open beziehungsweise close ausführen

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