Ejemplo n.º 1
0
        void GetPartsLandpedo()
        {
            GridTerminalSystem.GetBlocksOfType <IMyTerminalBlock>(null, CollectAllPartsLandpedo);

            var sb = new StringBuilder();

            sb.AppendLine(GridTerminalHelper.BlockListBytePosToBase64(PartsOfInterest, Connector));
            sb.AppendLine(GridTerminalHelper.BlockBytePosToBase64(Projector, Connector));
            sb.AppendLine(GridTerminalHelper.BlockBytePosToBase64(Base, Connector));
            Connector.CustomData = sb.ToString();
        }
        bool SetupMerge(IMyTerminalBlock block)
        {
            if (block.CubeGrid.EntityId != Context.Reference.CubeGrid.EntityId)
            {
                return(false);
            }
            if (!(block is IMyShipMergeBlock))
            {
                return(false);
            }
            if (!block.CustomName.StartsWith("[RL]"))
            {
                return(false);
            }

            var merge = (IMyShipMergeBlock)block;

            merge.CustomData = GridTerminalHelper.BlockBytePosToBase64(Context.Reference, merge);
            return(false);
        }
Ejemplo n.º 3
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();
        }