Ejemplo n.º 1
0
        void GetParts(ProxyTube tube)
        {
            Func <IMyTerminalBlock, bool> CollectPartsForTube = block => tube.CollectParts(block);

            GridTerminalSystem.GetBlocksOfType <IMyTerminalBlock>(null, CollectPartsForTube);
        }
Ejemplo n.º 2
0
        public void Main(string argument, UpdateType updateSource)
        {
            if (argument == "THRUSTERDETACH")
            {
                IMyTerminalBlock ThrusterControl = null;
                List <MyTuple <IMyThrust, int> > DetachThrusters = new List <MyTuple <IMyThrust, int> >();

                List <IMyTerminalBlock> blocks = new List <IMyTerminalBlock>();
                GridTerminalSystem.GetBlocksOfType <IMyTerminalBlock>(blocks, t => t.CubeGrid == Me.CubeGrid);

                foreach (var block in blocks)
                {
                    if (block.CustomName.Contains("[TRPT]"))
                    {
                        ThrusterControl = block;
                    }

                    IMyThrust thrust = block as IMyThrust;
                    if (thrust != null)
                    {
                        var tagindex = block.CustomName.IndexOf("[TRP");
                        if (tagindex == -1)
                        {
                            continue;
                        }

                        var indexTagEnd = block.CustomName.IndexOf(']', tagindex);
                        if (indexTagEnd == -1)
                        {
                            continue;
                        }

                        int index;
                        var numString = block.CustomName.Substring(tagindex + 4, indexTagEnd - tagindex - 4);
                        if (!int.TryParse(numString, out index))
                        {
                            continue;
                        }

                        DetachThrusters.Add(MyTuple.Create(thrust, index));
                    }
                }

                if (ThrusterControl == null)
                {
                    Error("No [TRPT] tagged block for ThrusterDetachControl");
                    return;
                }

                MyIni IniParser = new MyIni();
                IniParser.TryParse(ThrusterControl.CustomData);
                IniParser.DeleteSection("Torpedo");

                StringBuilder thrusterData = new StringBuilder();

                for (int i = 0; i < DetachThrusters.Count; ++i)
                {
                    var position = GridTerminalHelper.BlockBytePosToBase64(DetachThrusters[i].Item1, ThrusterControl);
                    thrusterData.Append(DetachThrusters[i].Item2 + "^" + position + ((i != DetachThrusters.Count - 1) ? "," : ""));
                }

                IniParser.Set("Torpedo", "ThrusterReleases", thrusterData.ToString());
                ThrusterControl.CustomData = IniParser.ToString();

                Info("Thruster Control: " + thrusterData.ToString());
                return;
            }

            BuildProxyTubes();

            foreach (var tube in ProxyTubes)
            {
                GetParts(tube);
            }

            if (argument == "LOAD")
            {
                List <IMyTerminalBlock> b = new List <IMyTerminalBlock>();
                for (int i = 0; i < ProxyTubes.Count; ++i)
                {
                    ProxyTube tube = ProxyTubes[i];
                    IMyMechanicalConnectionBlock mech = tube.Base as IMyMechanicalConnectionBlock;
                    if (mech != null)
                    {
                        GridTerminalHelper.Base64BytePosToBlockList(tube.Base.CustomData, mech.Top, ref b);
                    }
                    else
                    {
                        GridTerminalHelper.Base64BytePosToBlockList(tube.Base.CustomData, tube.Base, ref b);
                    }

                    Echo("Tube" + i + ": " + b.Count().ToString());
                }
            }
            else
            {
                StringBuilder builder = new StringBuilder(256);
                bool          aok     = true;
                for (int i = 0; i < ProxyTubes.Count; ++i)
                {
                    ProxyTube tube = ProxyTubes[i];
                    string    output;
                    if (tube.CheckTorpedo(out output))
                    {
                        tube.SaveTorpedo();
                        builder.AppendLine(i.ToString() + " [AOK] :");
                        builder.Append(output);
                    }
                    else
                    {
                        builder.AppendLine(i.ToString() + " [ERR] :");
                        builder.Append(output);
                        aok = false;
                        break;
                    }
                }
                if (aok)
                {
                    Info(builder.ToString());
                }
                else
                {
                    Error(builder.ToString());
                }
            }
            ProxyTubes.Clear();
        }