Esempio n. 1
0
            private bool TryParseSub(string text)
            {
                MonitorBlockParser  mbp = Parser;
                MonitorBlockBuilder mbb = Builder;
                IMonitorBlock       monb;

                int i = 0;

                while (i < text.Length)
                {
                    try
                    {
                        i = mbp.Parse(text, i);
                    }
                    catch (MissingCharsException ex)
                    {
                        Echo("Parse Error : Missing characters (" + String.Join <char>(",", ex.Chars) + ")");
                        return(false);
                    }
                    catch (InvalidCharsException ex)
                    {
                        Echo("Parse Error : Invalid characters (" + String.Join <char>(",", ex.Chars) + ")");
                        return(false);
                    }
                    catch (Exception ex)
                    {
                        Echo("Parse Error : Caught exception (" + ex.Message + ":" + ex.ToString() + ")");
                        return(false);
                    }

                    monb = mbb.Build(mbp);
                    //if (DEBUG)
                    //{
                    //    if (monb != null)
                    //    {
                    //        Echo("Build monitor block: {");
                    //        Echo($"  BlockName={mbp.BlockName}");
                    //        Echo($"  TargetText={mbp.TargetText}");
                    //        Echo($"  OptionsText={mbp.OptionsText}");
                    //        Echo($"  ContentsText={mbp.ContentsText}");
                    //        Echo("}");
                    //    }
                    //}

                    if (monb != null)
                    {
                        if ((monb is TextBlock) && ((monb as TextBlock).Text == ""))
                        {
                            // skip "return only text block"
                        }
                        else
                        {
                            MonitorBlocks.Add(monb);
                        }
                    }
                }

                return(true);
            }
Esempio n. 2
0
            public static void Load(StationMonitorCore sm)
            {
                MonitorBlockBuilder mbb = sm.MBBuilder;

                mbb["AirVent"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyAirVent>(parser)
                    {
                        InfoMaker = (IMyAirVent block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "Factory"
                                  } },
                                { "vent", new VentInfo(block) }
                            };
                        }
                    });
                };

                mbb["Door"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyDoor>(parser)
                    {
                        InfoMaker = (IMyDoor block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "Factory"
                                  } },
                                { "door", new DoorInfo(block) }
                            };
                        }
                    });
                };

                mbb["Connector"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyShipConnector>(parser)
                    {
                        InfoMaker = (IMyShipConnector block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "Factory"
                                  } },
                                { "connector", new ConnectorInfo(block) }
                            };
                        }
                    });
                };
            }
            protected StationMonitorCore(MyGridProgram program)
            {
                Program = program;

                MBParser  = new MonitorBlockParser(program);
                MBBuilder = new MonitorBlockBuilder(program)
                {
                    ["Test"] = (MonitorBlockParser parser) => { return(new TestBlock(Program, parser.Options, parser.ContentsText ?? "")); },
                    ["Text"] = (MonitorBlockParser parser) => { return(new TextBlock(Program, parser.Options, parser.ContentsText ?? "")); }
                };
            }
Esempio n. 4
0
            public static void Load(StationMonitorCore sm)
            {
                MonitorBlockBuilder mbb = sm.MBBuilder;

                mbb["Reactor"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyReactor>(parser)
                    {
                        InfoMaker = (IMyReactor block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "PowerGen"
                                  } },
                                { "out", new Output(block, "Output") },
                                { "eff", new Efficiency(block, "Efficiency") },
                                { "sto", new Store(block, MyItemType.MakeIngot("Uranium"), "Stored Uranium") }
                            };
                        }
                    });
                };

                mbb["SolarPanel"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMySolarPanel>(parser)
                    {
                        InfoMaker = (IMySolarPanel block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "PowerGen"
                                  } },
                                { "out", new Output(block, "Output") },
                                { "eff", new Efficiency(block, "Efficiency") }
                            };
                        }
                    });
                };

                mbb["Battery"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyBatteryBlock>(parser)
                    {
                        InfoMaker = (IMyBatteryBlock block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "PowerGen"
                                  } },
                                { "out", new Output(block, "Output") },
                                { "eff", new Efficiency(block, "Efficiency") },
                                { "in", new Input(block, "Input") },
                                { "cha", new Charge(block, "Charge") }
                            };
                        }
                    });
                };

                mbb["HydrogenEngine"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyPowerProducer>(parser)
                    {
                        SubFilter = (IMyTerminalBlock block) =>
                        {
                            if (!block.BlockDefinition.SubtypeId.Contains("HydrogenEngine"))
                            {
                                return false;
                            }
                            return true;
                        },

                        InfoMaker = (IMyPowerProducer block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "PowerGen"
                                  } },
                                { "out", new Output(block, "Output") },
                                { "eff", new Efficiency(block, "Efficiency") },
                                { "sto", new Store(block, "Stored Hydrogen") }
                            };
                        }
                    });
                };

                mbb["WindTurbine"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyPowerProducer>(parser)
                    {
                        SubFilter = (IMyTerminalBlock block) =>
                        {
                            if (!block.BlockDefinition.SubtypeId.Contains("WindTurbine"))
                            {
                                return false;
                            }
                            return true;
                        },

                        InfoMaker = (IMyPowerProducer block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "PowerGen"
                                  } },
                                { "out", new Output(block, "Output") },
                                { "eff", new Efficiency(block, "Efficiency") }
                            };
                        }
                    });
                };

                mbb["PowerProducer"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyPowerProducer>(parser)
                    {
                        InfoMaker = (IMyPowerProducer block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "PowerGen"
                                  } },
                                { "out", new Output(block, "Output") }
                            };
                        }
                    });
                };

                mbb["PowerGenerator"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyPowerProducer>(parser)
                    {
                        SubFilter = (IMyTerminalBlock block) =>
                        {
                            if (block.BlockDefinition.SubtypeId.Contains("Battery"))
                            {
                                return false;
                            }
                            return true;
                        },

                        InfoMaker = (IMyPowerProducer block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "PowerGen"
                                  } },
                                { "out", new Output(block, "Output") }
                            };
                        }
                    });
                };
            }
Esempio n. 5
0
            public static void Load(StationMonitorCore sm)
            {
                MonitorBlockBuilder mbb = sm.MBBuilder;

                mbb["Container"] = (MonitorBlockParser parser) => {
                    MonitorOption option;
                    string        targetIngot = null;
                    string        targetOre   = null;
                    string        desc        = "";
                    string        name;

                    if (parser.Options.TryGetValue("ore", out option))
                    {
                        targetOre = option.StrValue;
                        if (OreNameTable.TryGetValue(targetOre, out name))
                        {
                            desc = $"Stored {name}";
                        }
                    }

                    if (parser.Options.TryGetValue("ingot", out option))
                    {
                        targetIngot = option.StrValue;
                        if (IngotNameTable.TryGetValue(targetIngot, out name))
                        {
                            desc = $"Stored {name}";
                        }
                    }

                    return(new MonitorBlock <IMyCargoContainer>(parser)
                    {
                        InfoMaker = (IMyCargoContainer block, int index) =>
                        {
                            Store store = new Store();
                            if ((targetOre == null) && (targetIngot == null))
                            {
                                store = new Store(block, desc);
                            }
                            else if (targetOre != null)
                            {
                                store = new Store(block, MyItemType.MakeOre(targetOre), desc);
                            }
                            else if (targetIngot != null)
                            {
                                store = new Store(block, MyItemType.MakeIngot(targetIngot), desc);
                            }

                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "Container"
                                  } },
                                { "sto", store }
                            };
                        }
                    });
                };

                mbb["Inventory"] = (MonitorBlockParser parser) => {
                    MonitorOption option;
                    string        targetIngot = null;
                    string        targetOre   = null;
                    string        desc        = "";
                    string        name;

                    if (parser.Options.TryGetValue("ore", out option))
                    {
                        targetOre = option.StrValue;
                        if (OreNameTable.TryGetValue(targetOre, out name))
                        {
                            desc = $"Stored {name}";
                        }
                    }

                    if (parser.Options.TryGetValue("ingot", out option))
                    {
                        targetIngot = option.StrValue;
                        if (IngotNameTable.TryGetValue(targetIngot, out name))
                        {
                            desc = $"Stored {name}";
                        }
                    }

                    return(new MonitorBlock <IMyTerminalBlock>(parser)
                    {
                        SubFilter = (IMyTerminalBlock block) =>
                        {
                            if (block.InventoryCount == 0)
                            {
                                return false;
                            }
                            return true;
                        },

                        InfoMaker = (IMyTerminalBlock block, int index) =>
                        {
                            Store store = new Store();
                            if ((targetOre == null) && (targetIngot == null))
                            {
                                store = new Store(block, desc);
                            }
                            else if (targetOre != null)
                            {
                                store = new Store(block, MyItemType.MakeOre(targetOre), desc);
                            }
                            else if (targetIngot != null)
                            {
                                store = new Store(block, MyItemType.MakeIngot(targetIngot), desc);
                            }

                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "Container"
                                  } },
                                { "sto", store }
                            };
                        }
                    });
                };

                mbb["Refinery"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyRefinery>(parser)
                    {
                        InfoMaker = (IMyRefinery block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "Factory"
                                  } },
                                { "instore", new Store(block.InputInventory) },
                                { "outstore", new Store(block.OutputInventory) },
                                { "product", new Production(block) }
                            };
                        }
                    });
                };

                mbb["Assembler"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyAssembler>(parser)
                    {
                        InfoMaker = (IMyAssembler block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "Factory"
                                  } },
                                { "instore", new Store(block.InputInventory) },
                                { "outstore", new Store(block.OutputInventory) },
                                { "product", new Production(block) },
                                { "assemble", new Assembler(block) }
                            };
                        }
                    });
                };
            }
Esempio n. 6
0
 public Monitor(MyGridProgram program, MonitorBlockParser parser, MonitorBlockBuilder builder)
 {
     Program = program;
     Parser  = parser;
     Builder = builder;
 }
Esempio n. 7
0
            public static void Load(StationMonitorCore sm)
            {
                MonitorBlockBuilder mbb = sm.MBBuilder;

                mbb["GasGenerator"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyGasGenerator>(parser)
                    {
                        InfoMaker = (IMyGasGenerator block, int index) => {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "GasTank"
                                  } },
                                { "sto", new Store(block, MyItemType.MakeOre("Ice"), "Stored Ice") }
                            };
                        }
                    });
                };

                mbb["OxygenFarm"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyOxygenFarm>(parser)
                    {
                        InfoMaker = (IMyOxygenFarm block, int index) => {
                            var store = new Store("Oxygen Output");
                            // CubeBlocks.sbc <SubtypeId>LargeBlockOxygenFarm</SubtypeId> <MaxOutputPerSecond>0.03</MaxOutputPerSecond>
                            store.Max = 0.03f;  // unit is "L"
                            store.Current = store.Max * block.GetOutput();
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "GasTank"
                                  } },
                                { "sto", store }
                            };
                        }
                    });
                };

                mbb["OxygenTank"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyGasTank>(parser)
                    {
                        SubFilter = (IMyTerminalBlock block) => {
                            if (block.BlockDefinition.SubtypeId.Contains("Hydrogen"))
                            {
                                return false;
                            }
                            return true;
                        },

                        InfoMaker = (IMyGasTank block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "O2Tank"
                                  } },
                                { "sto", new Store(block, "Stored Oxygen") }
                            };
                        }
                    });
                };

                mbb["HydrogenTank"] = (MonitorBlockParser parser) => {
                    return(new MonitorBlock <IMyGasTank>(parser)
                    {
                        SubFilter = (IMyTerminalBlock block) =>
                        {
                            if (!block.BlockDefinition.SubtypeId.Contains("Hydrogen"))
                            {
                                return false;
                            }
                            return true;
                        },

                        InfoMaker = (IMyGasTank block, int index) =>
                        {
                            return new MonitorInfo
                            {
                                { "block", new CommonInfo(block, index)
                                  {
                                      Icon = "H2Tank"
                                  } },
                                { "sto", new Store(block, "Stored Hydrogen") }
                            };
                        }
                    });
                };
            }