[SpaceEngineers/C#] Blocks working? | Damaged Blocks? (English)

Dieser Artikel ist auch in Deutsch verfügbar. Um ihn in Deutsch zu lesen klicke hier.


Finally, I wanted to have a look now at in-game programming in Space Engineers, not only because I’m writing C# programs since a couple of years. Until now I wrote a little kind of tutorial and published it on this blog and surprisingly I saw that my script (below) has 12 followers now, although it’s just a simple script. Apart from that I will publish all scripts on this blog here and explain them a bit. You will find a link to the Steam Workshop-Site if available below the code.

Note for English readers:
I can not promise to translate every article into English but I will try to do so. It is possible that it can take some time until I publish it in English.

Steam Workshop


First of all, I initialise the List blocks which we need to cache all our blocks within the Grid. With GridTerminalSystem we gain access to all block within that current grid.. In this case I want to get all blocks, therefore I use the type IMyTerminalBlock that is used by all blocks inside the game.

Next I use the for-loop to iterate through each block. By the way: I’m just using the for-loop because the game has some problems with foreach-loops, mostly on 64-bit systems.

Then I check with !blocks[i].IsFunctional if this block is functional. This means, in Space Engineers, that the block is below the red line. If this is the case, the block shall be visible on our HUD. I do that with blocks[i].RequestShowOnHUD(true). I can’t do it with ShowOnHUD because this is an readonly property.

 

[SpaceEngineers/C#] Blocks working? | Beschädigte Blöcke?

This article is also available in English. Click here to view it in English.


Ich wollte mich nun auch endlich mal mit der In-Game Programmierung beschäftigen, zumal ich schon seit einigen Jahren C# Programme schreibe. Mittlerweile habe ich einen ersten Teil als eine Art Tutorial veröffentlicht und durch Zufall gesehen, dass mein Skript (unten), welches ich gestern als erstes Skript veröffentlicht habe, bereits 12 Abonnenten gewonnen hat und das obwohl es nur ein simples Skript ist. Zudem veröffentliche ich alle Skripte auf meinem Blog hier, erkläre sie etwas und verlinke jeweils auf die Steam Workshop-Seite, falls vorhanden.

Steam Workshop


Zuerst initialisiere ich die Liste blocks welche man benötigt um die Blöcke die wir benötigen zwischenzuspeichern. Mit dem GridTerminalSystem erhalten wir Zugriff auf alle Blöcke des Grids. In diesem Fall möchte ich alle Blöcke erhalten, weswegen ich auch den Typ IMyTerminalBlock verwende, denn jeder Block besitzt diesen Typen.

Anschließend benutze ich die for-Schleife um durch jeden Block zu iterieren. for-Schleife übrigens nur, weil die foreach-Schleife aktuell auf einigen Systemen, gerade bei 64-bit Systemen Probleme macht.

Nun prüfe ich mit !blocks[i].IsFunctional ob dieser beschädigt und damit nicht funktionsfähig ist. Dies bedeutet in Space Engineers, dass der Block unterhalb der roten Linie ist. Falls dies der Fall ist, soll der Block auf dem HUD angezeigt werden, was ich dann mit blocks[i].RequestShowOnHUD(true) bzw false realisiere. RequestShowOnHUD() übrigens deswegen, weil ShowOnHUD eine schreibgeschützte Eigenschaft ist.

Arbeit an der Fortuna – Update 2

Auf Grund eines Fehlers in Space Engineers, musste ich einen neuen Spielstand beginnen. Das Problem bestand darin, dass die magnetischen Fahrwerke plötzlich nicht mehr hielten, die Station und/oder Schiffe ruckelten und dann Teile explodierten, abbrachen und das ohne ersichtlichen Grund. In der Zwischenzeit kamen zwei weitere Updates mit Bugfixes raus und ich habe erneut den Bau begonnen, aber diesmal einige Sicherheitsmaßnahmen getroffen, sodass diesmal nichts passieren sollte.

Zudem konnte ich so direkt beginnen den Bug auch sofort aus gepanzerten Blöcken zu bauen. Parallel dazu habe ich einige Überlegungen zu Skripten angefangen, die so die Fortuna, die übrigens nun nicht mehr DWG Fortuna sondern DWG-SGU Fortuna heißt, vollkommen lassen werden. Einige Skripte kann ich jetzt noch nicht schreiben, da der programmierbare Block nicht genug Funktionalität bietet, zumindest im Moment. Zu den Skripten zählen aber: Sicherheitsmaßnahmen zum Schutz vor Angriff sowie Eindringen, mehrere Energiesparmodi mit einem Stufenplan zur Einsparung von Energie, für den Fall, dass die Fortuna einmal nicht bemannt ist und weitere Skripte darunter auch einige für das HUD.

Inspiration der Fortuna ist auf jeden Fall die Destiny aus Stargate Universe. Auch die Ideen der Skripte sind daher. Neue Fotos gibt es im Moment noch nicht, da nicht allzu viel neues geschafft wurde. Ich musste erst einmal ein neues Schiff zum Abbau von Rohstoffen sowie zum Bau von Schiffen bauen und die Raffinerien und Assembler aufstocken, sodass Stahlplatten schneller produziert werden.

Arbeit an der DWG Fortuna

In Vorbereitung auf das Space Engineers Update, welches die programmierbaren Blöcke bringt, wollte ich eigentlich die DWG Fortuna fertigstellen. Ich begann vor kurzem erst mit dem Bau und heute, am 01.01.2015 kam bereits das Update mit dem programmierbaren Block. Ich habe einige gute Ideen für die DWG Fortuna, die im übrigen auch in meinem Buch „Der Schreiber“ wiederzufinden sein wird. Hier ein paar Bilder des ersten Fortschritts, doch es ist noch viel zu tun. Mehr möchte ich noch nicht zur DWG Fortuna verraten.