... oder wie erstelle ich mir eine Script-Textwüste?
Tatsächlich eine geschlagene Woche für dieses Script investiert und endlich habe ich fertig.
Solche Power-Status-Anzeige-Scripts gibt es bereits zu genüge,
mir war es aber ein Bedürfnis, mich selbst auch mal daran zu versuchen.
An einigen Stellen habe ich die nötigen Info's natürlich aus dem Netz geholt,
aber einfach nur abkupfern wollte ich auch wieder nicht.
Am Ende will ich schon kapiert haben, was so beim ausführen des Codes passiert...
Naja egal...
Durch *ähem* "organisches Wachstum" und durch Vermeidung jeglicher Vereinfachung
wie etwa die Verwendung von Unterprogrammen etc. (wozu gibts denn Copy 'n Paste ^^)
ist nun dass hier entstanden:
Alles anzeigen
Gehe davon aus, man hätte es DEFINITIV eleganter lösen können...
Tatsächlich eine geschlagene Woche für dieses Script investiert und endlich habe ich fertig.
Solche Power-Status-Anzeige-Scripts gibt es bereits zu genüge,
mir war es aber ein Bedürfnis, mich selbst auch mal daran zu versuchen.
An einigen Stellen habe ich die nötigen Info's natürlich aus dem Netz geholt,
aber einfach nur abkupfern wollte ich auch wieder nicht.
Am Ende will ich schon kapiert haben, was so beim ausführen des Codes passiert...
Naja egal...
Durch *ähem* "organisches Wachstum" und durch Vermeidung jeglicher Vereinfachung
wie etwa die Verwendung von Unterprogrammen etc. (wozu gibts denn Copy 'n Paste ^^)
ist nun dass hier entstanden:
C#-Quellcode
- void Main () // SimpleScript (Power Status Panel)
- // Space Engineers 01-126-007
- {
- var INFOPANEL = (IMyTextPanel)
- GridTerminalSystem.GetBlockWithName ("LCD Panel (Power Status)"); // Bezeichnung des LCD-Panels
- double SOLARMAX = 0; // "Max Output" und "Current Output" Variablen
- double SOLARUSE = 0;
- double BATTERYMAX = 0;
- double BATTERYUSE = 0;
- double STOREDMAX = 0; // "Max Stored" Variable
- double STOREDMIN = 0; // "Stored Power" Variable
- double REACTORMAX = 0;
- double REACTORUSE = 0;
- var SOMAX = "kW"; // Einheiten-Anzeige
- var SOUSE = "kW";
- var BAMAX = "kW";
- var BAUSE = "kW";
- var STMAX = "kWh";
- var STMIN = "kWh";
- var REMAX = "kW";
- var REUSE = "kW";
- double SOPRO = 0; // Prozentwerte
- double BAPRO = 0;
- double STPRO = 0;
- double REPRO = 0;
- var ALLSOLARPANELS = new List <IMyTerminalBlock> ();
- GridTerminalSystem.GetBlocksOfType <IMySolarPanel> (ALLSOLARPANELS);
- if (ALLSOLARPANELS.Count > 0) // überprüfe alle Solarpanels im Grid
- {
- for (int Z = 0; Z < ALLSOLARPANELS.Count; Z++)
- {
- var SOLARPANEL = (IMySolarPanel) ALLSOLARPANELS [Z];
- var POWERMAX = Convert.ToDouble // "Max Output" Info's auslesen
- (
- SOLARPANEL.DetailedInfo.Split ('\n')
- [1].Split (' ') [2]
- );
- var MAX = SOLARPANEL.DetailedInfo.Split ('\n') [1].Split (' ') [3];
- if (MAX == "W") // Addition des "Max Output"-Werts in kW
- {
- SOLARMAX += POWERMAX * 0.001;
- }
- if (MAX == "kW")
- {
- SOLARMAX += POWERMAX;
- }
- if (MAX == "MW")
- {
- SOLARMAX += POWERMAX * 1000;
- }
- if (MAX == "GW")
- {
- SOLARMAX += POWERMAX * 1000000;
- }
- var POWERUSE = Convert.ToDouble // "Current Output" Info's auslesen
- (
- SOLARPANEL.DetailedInfo.Split ('\n')
- [2].Split (' ') [2]
- );
- var USE = SOLARPANEL.DetailedInfo.Split ('\n') [2].Split (' ') [3];
- if (USE == "W") // Addition des "Current Output"-Werts in kW
- {
- SOLARUSE += POWERUSE * 0.001;
- }
- if (USE == "kW")
- {
- SOLARUSE += POWERUSE;
- }
- if (USE == "MW")
- {
- SOLARUSE += POWERUSE * 1000;
- }
- if (USE == "GW")
- {
- SOLARUSE += POWERUSE * 1000000;
- }
- }
- if (SOLARMAX != 0) // keine Division durch Null - Prozentwert ermitteln
- {
- if (SOLARMAX > SOLARUSE) // um zu vermeiden dass während des Sonnenaufgangs
- // eine grössere Prozentzahl als 100 % angezeigt wird.
- {
- SOPRO = Math.Round (SOLARUSE / SOLARMAX * 100, 2);
- }
- else // ist natürlich etwas getrickst ;-)
- {
- SOPRO = Math.Round (SOLARMAX / SOLARUSE * 100, 2);
- }
- }
- if (SOLARMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
- {
- SOLARMAX /= 0.001;
- SOMAX = "W";
- }
- if (SOLARMAX > 1000)
- {
- SOLARMAX /= 1000;
- SOMAX = "MW";
- }
- if (SOLARMAX > 1000)
- {
- SOLARMAX /= 1000;
- SOMAX = "GW";
- }
- if (SOLARUSE <= 1)
- {
- SOLARUSE /= 0.001;
- SOUSE = "W";
- }
- if (SOLARUSE > 1000)
- {
- SOLARUSE /= 1000;
- SOUSE = "MW";
- }
- if (SOLARUSE > 1000)
- {
- SOLARUSE /= 1000;
- SOUSE = "GW";
- }
- }
- var ALLBATTERIES = new List <IMyTerminalBlock> ();
- GridTerminalSystem.GetBlocksOfType <IMyBatteryBlock> (ALLBATTERIES);
- if (ALLBATTERIES.Count > 0) // überprüfe alle Batterien im Grid
- {
- for (int Z = 0; Z < ALLBATTERIES.Count; Z++)
- {
- var BATTERY = (IMyBatteryBlock) ALLBATTERIES [Z];
- var POWERMAX = Convert.ToDouble // "Max Output" Info's auslesen
- (
- BATTERY.DetailedInfo.Split ('\n')
- [1].Split (' ') [2]
- );
- var MAX = BATTERY.DetailedInfo.Split ('\n') [1].Split (' ') [3];
- if (MAX == "W") // Addition des "Max Output"-Werts in kW
- {
- BATTERYMAX += POWERMAX * 0.001;
- }
- if (MAX == "kW")
- {
- BATTERYMAX += POWERMAX;
- }
- if (MAX == "MW")
- {
- BATTERYMAX += POWERMAX * 1000;
- }
- if (MAX == "GW")
- {
- BATTERYMAX += POWERMAX * 1000000;
- }
- var POWERUSE = Convert.ToDouble // "Current Output" Info's auslesen
- (
- BATTERY.DetailedInfo.Split ('\n')
- [5].Split (' ') [2]
- );
- var USE = BATTERY.DetailedInfo.Split ('\n') [5].Split (' ') [3];
- if (USE == "W") // Addition des "Current Output"-Werts in kW
- {
- BATTERYUSE += POWERUSE * 0.001;
- }
- if (USE == "kW")
- {
- BATTERYUSE += POWERUSE;
- }
- if (USE == "MW")
- {
- BATTERYUSE += POWERUSE * 1000;
- }
- if (USE == "GW")
- {
- BATTERYUSE += POWERUSE * 1000000;
- }
- var STORAGEMAX = Convert.ToDouble // "Max Stored" Info's auslesen
- (
- BATTERY.DetailedInfo.Split ('\n')
- [3].Split (' ') [3]
- );
- var SMAX = BATTERY.DetailedInfo.Split ('\n') [3].Split (' ') [4];
- if (SMAX == "Wh") // Addition des "Max Stored"-Werts in kWh
- {
- STOREDMAX += STORAGEMAX * 0.001;
- }
- if (SMAX == "kWh")
- {
- STOREDMAX += STORAGEMAX;
- }
- if (SMAX == "MWh")
- {
- STOREDMAX += STORAGEMAX * 1000;
- }
- if (SMAX == "GWh")
- {
- STOREDMAX += STORAGEMAX * 1000000;
- }
- var STORAGEMIN = Convert.ToDouble // "Stored Power" Info's auslesen
- (
- BATTERY.DetailedInfo.Split ('\n')
- [6].Split (' ') [2]
- );
- var SMIN = BATTERY.DetailedInfo.Split ('\n') [6].Split (' ') [3];
- if (SMIN == "Wh") // Addition des "Stored Power"-Werts in kWh
- {
- STOREDMIN += STORAGEMIN * 0.001;
- }
- if (SMIN == "kWh")
- {
- STOREDMIN += STORAGEMIN;
- }
- if (SMIN == "MWh")
- {
- STOREDMIN += STORAGEMIN * 1000;
- }
- if (SMIN == "GWh")
- {
- STOREDMIN += STORAGEMIN * 1000000;
- }
- }
- if (BATTERYMAX != 0) // keine Division durch Null - Prozentwert ermitteln
- {
- BAPRO = Math.Round (BATTERYUSE / BATTERYMAX * 100, 2);
- }
- if (BATTERYMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
- {
- BATTERYMAX /= 0.001;
- BAMAX = "W";
- }
- if (BATTERYMAX > 1000)
- {
- BATTERYMAX /= 1000;
- BAMAX = "MW";
- }
- if (BATTERYMAX > 1000)
- {
- BATTERYMAX /= 1000;
- BAMAX = "GW";
- }
- if (BATTERYUSE <= 1)
- {
- BATTERYUSE /= 0.001;
- BAUSE = "W";
- }
- if (BATTERYUSE > 1000)
- {
- BATTERYUSE /= 1000;
- BAUSE = "MW";
- }
- if (BATTERYUSE > 1000)
- {
- BATTERYUSE /= 1000;
- BAUSE = "GW";
- }
- if (STOREDMAX != 0) // keine Division durch Null - Prozentwert ermitteln
- {
- STPRO = Math.Round (STOREDMIN / STOREDMAX * 100, 2);
- }
- if (STOREDMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
- {
- STOREDMAX /= 0.001;
- STMAX = "Wh";
- }
- if (STOREDMAX > 1000)
- {
- STOREDMAX /= 1000;
- STMAX = "MWh";
- }
- if (STOREDMAX > 1000)
- {
- STOREDMAX /= 1000;
- STMAX = "GWh";
- }
- if (STOREDMIN <= 1)
- {
- STOREDMIN /= 0.001;
- STMIN = "Wh";
- }
- if (STOREDMIN > 1000)
- {
- STOREDMIN /= 1000;
- STMIN = "MWh";
- }
- if (STOREDMIN > 1000)
- {
- STOREDMIN /= 1000;
- STMIN = "GWh";
- }
- }
- var ALLREACTORS = new List <IMyTerminalBlock> ();
- GridTerminalSystem.GetBlocksOfType <IMyReactor> (ALLREACTORS);
- if (ALLREACTORS.Count > 0) // überprüfe alle Reaktoren im Grid
- {
- for (int Z = 0; Z < ALLREACTORS.Count; Z++)
- {
- var REACTOR = (IMyReactor) ALLREACTORS [Z];
- var POWERMAX = Convert.ToDouble // "Max Output" Info's auslesen
- (
- REACTOR.DetailedInfo.Split ('\n')
- [1].Split (' ') [2]
- );
- var MAX = REACTOR.DetailedInfo.Split ('\n') [1].Split (' ') [3];
- if (MAX == "W") // Addition des "Max Output"-Werts in kW
- {
- REACTORMAX += POWERMAX * 0.001;
- }
- if (MAX == "kW")
- {
- REACTORMAX += POWERMAX;
- }
- if (MAX == "MW")
- {
- REACTORMAX += POWERMAX * 1000;
- }
- if (MAX == "GW")
- {
- REACTORMAX += POWERMAX * 1000000;
- }
- var POWERUSE = Convert.ToDouble // "Current Output" Info's auslesen
- (
- REACTOR.DetailedInfo.Split ('\n')
- [2].Split (' ') [2]
- );
- var USE = REACTOR.DetailedInfo.Split ('\n') [2].Split (' ') [3];
- if (USE == "W") // Addition des "Current Output"-Werts in kW
- {
- REACTORUSE += POWERUSE * 0.001;
- }
- if (USE == "kW")
- {
- REACTORUSE += POWERUSE;
- }
- if (USE == "MW")
- {
- REACTORUSE += POWERUSE * 1000;
- }
- if (USE == "GW")
- {
- REACTORUSE += POWERUSE * 1000000;
- }
- }
- if (REACTORMAX != 0) // keine Division durch Null - Prozentwert ermitteln
- {
- REPRO = Math.Round (REACTORUSE / REACTORMAX * 100, 2);
- }
- if (REACTORMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
- {
- REACTORMAX /= 0.001;
- REMAX = "W";
- }
- if (REACTORMAX > 1000)
- {
- REACTORMAX /= 1000;
- REMAX = "MW";
- }
- if (REACTORMAX > 1000)
- {
- REACTORMAX /= 1000;
- REMAX = "GW";
- }
- if (REACTORUSE <= 1)
- {
- REACTORUSE /= 0.001;
- REUSE = "W";
- }
- if (REACTORUSE > 1000)
- {
- REACTORUSE /= 1000;
- REUSE = "MW";
- }
- if (REACTORUSE > 1000)
- {
- REACTORUSE /= 1000;
- REUSE = "GW";
- }
- }
- INFOPANEL.SetValue ("FontSize", 1.4f); // ermittelte Info's auf dem LCD-Panel anzeigen
- INFOPANEL.WritePublicText
- (
- "\n" +
- " SOLAR: " + SOPRO + " %" + "\n" +
- " " + Math.Round (SOLARUSE, 1) + " " + SOUSE + " / " + Math.Round (SOLARMAX, 1) + " " + SOMAX + "\n" +
- "\n" +
- " BATTERIES: " + BAPRO + " %" + "\n" +
- " " + Math.Round (BATTERYUSE, 1) + " " + BAUSE + " / " + Math.Round (BATTERYMAX, 1) + " " + BAMAX + "\n" +
- " STORED POWER: " + STPRO + " %" + "\n" +
- " " + Math.Round (STOREDMIN, 1) + " " + STMIN + " / " + Math.Round (STOREDMAX, 1) + " " + STMAX + "\n" +
- "\n" +
- " REACTORS: " + REPRO + " %" + "\n" +
- " " + Math.Round (REACTORUSE, 1) + " " + REUSE + " / " + Math.Round (REACTORMAX, 1) + " " + REMAX
- );
- }
Gehe davon aus, man hätte es DEFINITIV eleganter lösen können...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Stephan(steff) ()