Exemplo n.º 1
0
        public static IMyTerminalControlSlider CreateControlSilder(string id, string title, string tooltip, float min, float max, Func <IMyTerminalBlock, bool> visible, Func <IMyTerminalBlock, bool> enabled, Func <IMyTerminalBlock, float> getter, Action <IMyTerminalBlock, float> setter, Action <IMyTerminalBlock, StringBuilder> writer)
        {
            IMyTerminalControlSlider slider = ControlIdExists(id) as IMyTerminalControlSlider;

            if (slider != null)
            {
                return(slider);
            }

            slider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyUpgradeModule>(id);

            slider.Enabled = enabled;
            slider.Visible = visible;
            slider.SupportsMultipleBlocks = false;

            if (title != null)
            {
                slider.Title = MyStringId.GetOrCompute(title);
            }
            if (tooltip != null)
            {
                slider.Tooltip = MyStringId.GetOrCompute(tooltip);
            }

            slider.SetLimits(min, max);

            slider.Writer = writer;
            slider.Getter = getter;
            slider.Setter = setter;

            MyAPIGateway.TerminalControls.AddControl <IMyUpgradeModule>(slider);

            return(slider);
        }
        // This code will run on all clients and the server, so we need to isolate it to the server only.
        public override void Init(MyObjectBuilder_EntityBase objectBuilder)
        {
            _objectBuilder    = objectBuilder;
            this.NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME;

            if (!_staticIsInitialized)
            {
                _staticIsInitialized          = true;
                _initialRemoteControlMaxSpeed = (float)ConfigurableSpeedComponentLogic.Instance.EnvironmentComponent.RemoteControlMaxSpeed;
            }

            if (!_isInitilized)
            {
                // Use this space to initialize and hook up events. NOT TO PROCESS ANYTHING.
                _isInitilized = true;

                if (_initialRemoteControlMaxSpeed > 0)
                {
                    _remoteControlEntity = (IMyRemoteControl)Entity;

                    List <IMyTerminalControl> controls;
                    MyAPIGateway.TerminalControls.GetControls <IMyRemoteControl>(out controls);

                    //VRage.Utils.MyLog.Default.WriteLine($"#### SpeedLimit {_remoteControlEntity.SpeedLimit} {_initialRemoteControlMaxSpeed}");

                    IMyTerminalControl       control       = controls.FirstOrDefault(c => c.Id == "SpeedLimit");
                    IMyTerminalControlSlider sliderControl = control as IMyTerminalControlSlider;
                    // control limits are set universally and cannot be applied individually.
                    sliderControl?.SetLimits(0, _initialRemoteControlMaxSpeed);
                }
            }
        }
Exemplo n.º 3
0
        private void create_slider <_block_>(string id, string title, Func <IMyTerminalBlock, float> getter, Action <IMyTerminalBlock, float> setter,
                                             Action <IMyTerminalBlock, StringBuilder> status, float minimum, float maximum, float change_amount,
                                             string increase_action_name, string decrease_action_name, string increase_text, string decrease_text) where _block_ : IMyTerminalBlock
        {
            IMyTerminalControlSlider slider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, _block_>(id);

            slider.Getter = getter;
            slider.Setter = setter;
            slider.Title  = MyStringId.GetOrCompute(title);
            slider.Writer = status;
            slider.SupportsMultipleBlocks = true;
            slider.SetLimits(minimum, maximum);
            MyAPIGateway.TerminalControls.AddControl <_block_>(slider);
            create_slider_action <_block_>(increase_action_name, increase_text,
                                           delegate(IMyTerminalBlock block)
            {
                setter(block, getter(block) + change_amount);
            },
                                           status, "Increase");
            create_slider_action <_block_>(decrease_action_name, decrease_text,
                                           delegate(IMyTerminalBlock block)
            {
                setter(block, getter(block) - change_amount);
            },
                                           status, "Decrease");
        }
Exemplo n.º 4
0
 private void OnSettingsChanged(Settings s)
 {
     if (SliderControl != null && s != null)
     {
         ((IMyRemoteControl)Entity).SpeedLimit = s.RemoteControlSpeedLimit;
         SliderControl?.SetLimits(0, s.RemoteControlSpeedLimit);
     }
 }
Exemplo n.º 5
0
        //protected static IMyTerminalControlButton SaveButton;
        protected void CreateTerminalControls <T>()
        {
            if (m_ControlsInited.Contains(typeof(T)))
            {
                return;
            }
            m_ControlsInited.Add(typeof(T));
            if (Seperator == null)
            {
                Seperator         = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, T>(string.Empty);
                Seperator.Visible = (b) => b.IsRadar();
            }
            MyAPIGateway.TerminalControls.AddControl <T>(Seperator);
            if (RangeControl == null)
            {
                RangeControl         = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, T>("Draygo.Radar.Range");
                RangeControl.Visible = (b) => b.IsRadar();                // b.IsRadar();
                RangeControl.Enabled = (b) => b.IsRadar();
                RangeControl.Getter  = (b) => b.GameLogic.GetAs <Radar>().Range;
                RangeControl.Writer  = (b, v) => v.AppendFormat("{0:N1} {1}", b.GameLogic.GetAs <Radar>().Range, MyStringId.GetOrCompute("km"));
                RangeControl.Setter  = (b, v) => b.GameLogic.GetAs <Radar>().Range = v;
                RangeControl.Title   = MyStringId.GetOrCompute("Range");
                RangeControl.Tooltip = MyStringId.GetOrCompute("Range in KM");
                RangeControl.SupportsMultipleBlocks = true;
                RangeControl.SetLimits(0.001f, 50.0f);
            }
            MyAPIGateway.TerminalControls.AddControl <T>(RangeControl);
            if (Seperator2 == null)
            {
                Seperator2         = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, T>(string.Empty);
                Seperator2.Visible = (b) => b.IsRadar();
            }
            MyAPIGateway.TerminalControls.AddControl <T>(Seperator2);
            //MyAPIGateway.TerminalControls.AddControl<T>(RangeControl);
            //if (PitchCheck == null)
            //{
            //	PitchCheck = MyAPIGateway.TerminalControls.CreateControl<IMyTerminalControlCheckbox, IMyTerminalBlock>("Draygo.ControlSurface.Pitch");
            //	PitchCheck.Visible = (b) => b.IsControlSurface();
            //	PitchCheck.Enabled = (b) => b.IsControlSurface() && b.IsWorking;
            //	PitchCheck.Getter = (b) => b.GameLogic.GetAs<Holo>().Control.EnablePitch;
            //	PitchCheck.Setter = (b, v) => b.GameLogic.GetAs<Holo>().Control.EnablePitch = v;
            //	PitchCheck.Title = MyStringId.GetOrCompute("Pitch");
            //	PitchCheck.Tooltip = MyStringId.GetOrCompute("Enable Pitch Control");
            //	PitchCheck.SupportsMultipleBlocks = true;
            //}
            //MyAPIGateway.TerminalControls.AddControl<T>(PitchCheck);
            var RangeProperty = MyAPIGateway.TerminalControls.CreateProperty <float, T>("Radar.Range");

            if (RangeProperty != null)
            {
                RangeProperty.Enabled = (b) => b.IsRadar();
                RangeProperty.Getter  = (b) => b.GameLogic.GetAs <Radar>().Range;
                RangeProperty.Setter  = (b, v) => b.GameLogic.GetAs <Radar>().Range = v;
                MyAPIGateway.TerminalControls.AddControl <T>(RangeProperty);
            }
        }
Exemplo n.º 6
0
 private void SetRadarSliderLimits(int type)
 {
     _radarRangeSlider.SetLimits(
         Constants.radarMinimumRanges[type],
         Constants.radarMaximumRanges[type]
         );
     _radarFreqSlider.SetLimits(
         Constants.radarMinimumFreqs[type],
         Constants.radarMaximumFreqs[type]
         );
 }
Exemplo n.º 7
0
        public override void UpdateOnceBeforeFrame()
        {
            beacon = Entity as IMyBeacon;

            List <IMyTerminalControl> antennactrls = new List <IMyTerminalControl>();

            MyAPIGateway.TerminalControls.GetControls <IMyBeacon>(out antennactrls);

            IMyTerminalControlSlider RadiusSlider = antennactrls.Find(x => x.Id == "Radius") as IMyTerminalControlSlider;

            float maxVal = beacon.ParseMaxRange();

            RadiusSlider.SetLimits(0, Extensions.ParseMaxRange(beacon));
        }
Exemplo n.º 8
0
        public static IMyTerminalControlSlider LaserBeam <T>() where T : IMyTerminalBlock
        {
            IMyTerminalControlSlider LaserBeam = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, T>("BeamLength");

            LaserBeam.Title   = MyStringId.GetOrCompute("Beam Length");
            LaserBeam.Tooltip = MyStringId.GetOrCompute("Sets the laser beam's length.");
            LaserBeam.SupportsMultipleBlocks = true;
            LaserBeam.Enabled = HasBlockLogic;
            LaserBeam.Visible = HasBlockLogic;
            LaserBeam.SetLimits(Block => BlockReturn(Block, x => x.MinBeamLengthBlocks), Block => BlockReturn(Block, x => x.MaxBeamLengthBlocks));
            LaserBeam.Getter = (Block) => BlockReturn(Block, x => x.BeamLength);
            LaserBeam.Setter = (Block, NewLength) => BlockAction(Block, x => x.BeamLength = (int)NewLength);
            LaserBeam.Writer = (Block, Info) => Info.Append($"{BlockReturn(Block, x => x.BeamLength)} blocks");
            return(LaserBeam);
        }
Exemplo n.º 9
0
        public static IMyTerminalControlSlider HarvestEfficiency()
        {
            IMyTerminalControlSlider HarvestEfficiency = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyShipDrill>("HarvestEfficiency");

            HarvestEfficiency.Title   = MyStringId.GetOrCompute("Harvest Efficiency");
            HarvestEfficiency.Tooltip = MyStringId.GetOrCompute("Allows to increase drill's yield at the cost of power usage.");
            HarvestEfficiency.SupportsMultipleBlocks = true;
            HarvestEfficiency.Enabled = HasDrillLogic;
            HarvestEfficiency.Visible = HasDrillLogic;
            HarvestEfficiency.SetLimits(1, 2);
            HarvestEfficiency.Getter = (Block) => DrillReturn(Block, x => x.HarvestEfficiency);
            HarvestEfficiency.Setter = (Block, NewEfficiency) => DrillAction(Block, x => x.HarvestEfficiency = NewEfficiency);
            HarvestEfficiency.Writer = (Block, Info) => Info.Append($"x{Math.Round(DrillReturn(Block, x => x.HarvestEfficiency), 2)}");
            return(HarvestEfficiency);
        }
Exemplo n.º 10
0
        public static IMyTerminalControlSlider SpeedMultiplier <T>() where T : IMyTerminalBlock
        {
            IMyTerminalControlSlider SpeedMultiplier = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, T>("SpeedMultiplier");

            SpeedMultiplier.Title   = MyStringId.GetOrCompute("Speed Multiplier");
            SpeedMultiplier.Tooltip = MyStringId.GetOrCompute("Allows to increase tool's speed at the cost of power usage.\nThis is more efficient than piling on multiple tools.");
            SpeedMultiplier.SupportsMultipleBlocks = true;
            SpeedMultiplier.Enabled = HasBlockLogic;
            SpeedMultiplier.Visible = HasBlockLogic;
            SpeedMultiplier.SetLimits(1, 4);
            SpeedMultiplier.Getter = (Block) => BlockReturn(Block, x => x.SpeedMultiplier);
            SpeedMultiplier.Setter = (Block, NewSpeed) => BlockAction(Block, x => x.SpeedMultiplier = (int)NewSpeed);
            SpeedMultiplier.Writer = (Block, Info) => Info.Append($"x{BlockReturn(Block, x => x.SpeedMultiplier)}");
            return(SpeedMultiplier);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Creates all of the custom controls for the blocks
        /// </summary>
        private void MakeControls()
        {
            IMyTerminalControlSeparator sep1
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, IMyUpgradeModule>("Sep1");

            _radarControls.Add(sep1);

            IMyTerminalControlSlider rangeSlider
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyUpgradeModule>("RangeSlider");

            rangeSlider.Title   = MyStringId.GetOrCompute("Range");
            rangeSlider.Tooltip = MyStringId.GetOrCompute("Maximum range of this radar system");
            rangeSlider.SetLimits(100, 15000);
            rangeSlider.Getter = (block) => {
                RadarController controller = block.GameLogic.GetAs <RadarController>();
                return(controller.GetRange());
            };
            rangeSlider.Setter = (block, value) => {
                RadarController controller = block.GameLogic.GetAs <RadarController>();
                controller.SetRange((int)value);
                SendRadarSettings(new BlockAddress(block.CubeGrid.EntityId, block.EntityId));
            };
            rangeSlider.Writer = (block, str) => {
                RadarController controller = block.GameLogic.GetAs <RadarController>();
                str.Append(controller.GetRange() + "m");
            };
            _radarRangeSlider = rangeSlider;
            _radarControls.Add(rangeSlider);

            IMyTerminalControlSlider freqSlider
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyUpgradeModule>("FreqSlider");

            freqSlider.Title   = MyStringId.GetOrCompute("Frequency");
            freqSlider.Tooltip = MyStringId.GetOrCompute("Operating frequency of this system");
            freqSlider.SetLimits(8.0f, 12.0f);
            freqSlider.Getter = (block) => {
                RadarController controller = block.GameLogic.GetAs <RadarController>();
                return(controller.GetFreq());
            };
            freqSlider.Setter = (block, value) => {
                RadarController controller = block.GameLogic.GetAs <RadarController>();
                controller.SetFreq(value);
                SendRadarSettings(new BlockAddress(block.CubeGrid.EntityId, block.EntityId));
            };
            freqSlider.Writer = (block, str) => {
                RadarController controller = block.GameLogic.GetAs <RadarController>();
                str.Append(controller.GetFreq() + "GHz");
            };
            _radarFreqSlider = freqSlider;
            _radarControls.Add(freqSlider);

            IMyTerminalControlSeparator sep2
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, IMyUpgradeModule>("Sep2");

            _radarControls.Add(sep2);

            IMyTerminalControlListbox unassignedList
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlListbox, IMyUpgradeModule>("UnassignedList");

            unassignedList.Title = MyStringId.GetOrCompute("Available");
            //unassignedList.Tooltip = MyStringId.GetOrCompute("Radar blocks which are able to be assigned to this system.");
            unassignedList.Multiselect      = true;
            unassignedList.VisibleRowsCount = 6;
            unassignedList.ListContent      = (block, items, selected) => {
                RadarController controller
                    = block.GameLogic.GetAs <RadarController>();
                List <RadarController.Radar> available
                    = controller.GetAvailableRadars();

                foreach (RadarController.Radar r in available)
                {
                    MyTerminalControlListBoxItem item
                        = new MyTerminalControlListBoxItem(
                              MyStringId.GetOrCompute(r.block.FatBlock.DisplayNameText),
                              MyStringId.GetOrCompute(r.type.ToString()),
                              r
                              );
                    items.Add(item);
                }
            };
            unassignedList.ItemSelected = (block, items) => {
                _selectedUnassigned.Clear();

                foreach (MyTerminalControlListBoxItem item in items)
                {
                    _selectedUnassigned.Add(item.UserData as RadarController.Radar);
                }
            };
            _radarControls.Add(unassignedList);

            IMyTerminalControlButton addButton
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyUpgradeModule>("AddButton");

            addButton.Title   = MyStringId.GetOrCompute("Assign");
            addButton.Tooltip = MyStringId.GetOrCompute("Assign the selected radar to this system.");
            _radarControls.Add(addButton);

            IMyTerminalControlListbox assignedList
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlListbox, IMyUpgradeModule>("AssignedList");

            assignedList.Title            = MyStringId.GetOrCompute("Assigned");
            assignedList.Tooltip          = MyStringId.GetOrCompute("Radar blocks which are currently assigned to this system.");
            assignedList.Multiselect      = true;
            assignedList.VisibleRowsCount = 6;
            assignedList.ListContent      = (block, items, selected) => {
                RadarController controller
                    = block.GameLogic.GetAs <RadarController>();
                List <RadarController.Radar> assigned
                    = controller.GetAssignedRadars();

                foreach (RadarController.Radar r in assigned)
                {
                    MyTerminalControlListBoxItem item
                        = new MyTerminalControlListBoxItem(
                              MyStringId.GetOrCompute(r.block.FatBlock.DisplayNameText),
                              MyStringId.GetOrCompute(r.type.ToString()),
                              r
                              );
                    items.Add(item);
                }
            };
            assignedList.ItemSelected = (block, items) => {
                _selectedAssigned.Clear();

                foreach (MyTerminalControlListBoxItem item in items)
                {
                    _selectedAssigned.Add(item.UserData as RadarController.Radar);
                }
            };
            _radarControls.Add(assignedList);

            // Add button action must be after assigned list because it
            // needs the pointer
            addButton.Action = (block) => {
                RadarController controller
                    = block.GameLogic.GetAs <RadarController>();

                foreach (RadarController.Radar radar in _selectedUnassigned)
                {
                    controller.AssignRadar(radar);
                }

                unassignedList.UpdateVisual();
                assignedList.UpdateVisual();

                SetRadarSliderLimits((int)controller.GetRadarType());
                rangeSlider.UpdateVisual();
                freqSlider.UpdateVisual();
            };

            IMyTerminalControlButton removeButton
                = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyUpgradeModule>("AddButton");

            removeButton.Title   = MyStringId.GetOrCompute("Remove");
            removeButton.Tooltip = MyStringId.GetOrCompute("Remove the selected radars from the system.");
            removeButton.Action  = (block) => {
                RadarController controller
                    = block.GameLogic.GetAs <RadarController>();

                foreach (RadarController.Radar radar in _selectedAssigned)
                {
                    controller.UnassignedRadar(radar);
                }

                unassignedList.UpdateVisual();
                assignedList.UpdateVisual();

                SetRadarSliderLimits((int)controller.GetRadarType());
                rangeSlider.UpdateVisual();
                freqSlider.UpdateVisual();
            };
            _radarControls.Add(removeButton);
        }
        private void CreateTerminalControls()
        {
            // Just to make sure we're not subscribing twice without using locks

            MyAPIGateway.TerminalControls.CustomControlGetter -= CustomControlGetter;
            MyAPIGateway.TerminalControls.CustomControlGetter += CustomControlGetter;

            IMyTerminalControlCheckbox checkbox = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlCheckbox, IMyThrust>("LockFlameColors");

            checkbox.Title  = MyStringId.GetOrCompute("Lock Flame Colors");
            checkbox.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(false);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                return(logic != null ? logic.m_flameColorsLocked : false);
            };

            checkbox.Setter = (block, value) =>
            {
                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    logic.m_flameColorsLocked = value;

                    logic.UpdateFlames();
                    logic.UpdateCustomData();
                }
            };

            checkbox.SupportsMultipleBlocks = true;

            m_customControls.Add(checkbox);

            // FlameIdleColor

            IMyTerminalControlColor color = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlColor, IMyThrust>("FlameIdleColor");

            color.Title = MyStringId.GetOrCompute("Idle");

            color.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return((Vector4)Color.Black);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? logic.m_flameIdleColor : (Vector4)Color.Black);
            };

            color.Setter = (block, value) =>
            {
                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    Vector3 v = value.ToVector3();
                    logic.m_flameIdleColor = new Vector4(v.X, v.Y, v.Z, logic.m_flameIdleColor.W);

                    if (logic.m_renderMode == RenderMode.Linked)
                    {
                        logic.m_flameFullColor = logic.m_flameIdleColor;
                    }

                    foreach (var control in m_customControls)
                    {
                        if (control.Id == "FlameFullColor")
                        {
                            control.UpdateVisual();
                        }
                    }

                    logic.UpdateFlames();
                    logic.UpdateCustomData();
                }
            };
            m_customControls.Add(color);

            IMyTerminalControlSlider alpha = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyThrust>("FlameIdleColorAlpha");

            alpha.Title = MyStringId.GetOrCompute("Alpha");
            alpha.SetLimits(0f, 1f);
            alpha.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(1f);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? logic.m_flameIdleColor.W : 1f);
            };
            alpha.Setter = (block, value) =>
            {
                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    logic.m_flameIdleColor.W = value;

                    if (logic.m_renderMode == RenderMode.Linked)
                    {
                        logic.m_flameFullColor.W = logic.m_flameIdleColor.W;
                    }

                    foreach (var control in m_customControls)
                    {
                        if (control.Id == "FlameFullColorAlpha" || control.Id == "FlameFullColor" || control.Id == "FlameIdleColor")
                        {
                            control.UpdateVisual();
                        }
                    }

                    logic.UpdateFlames();
                    logic.UpdateCustomData();
                }
            };
            m_customControls.Add(alpha);

            var propertyIC = MyAPIGateway.TerminalControls.CreateProperty <Color, IMyThrust>("FlameIdleColorOverride");

            propertyIC.SupportsMultipleBlocks = false;
            propertyIC.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(Vector4.Zero);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? (Color)logic.FlameIdleColor : Color.Transparent);
            };

            propertyIC.Setter = (block, value) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return;
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    logic.m_flameIdleColor = value.ToVector4();
                    // logic.m_flameIdleColor.W = 0.75f;

                    if (logic.m_renderMode == RenderMode.Linked)
                    {
                        logic.FlameFullColor = logic.FlameIdleColor;
                    }
                }
            };

            MyAPIGateway.TerminalControls.AddControl <IMyThrust>(propertyIC);

            // FlameFullColor

            color = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlColor, IMyThrust>("FlameFullColor");

            color.Title   = MyStringId.GetOrCompute("Full");
            color.Enabled = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(false);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? (logic.m_renderMode != RenderMode.Linked) : false);
            };

            color.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return((Vector4)Color.Black);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? logic.m_flameFullColor : (Vector4)Color.Black);
            };

            color.Setter = (block, value) =>
            {
                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    Vector3 v = value.ToVector3();
                    logic.m_flameFullColor = new Vector4(v.X, v.Y, v.Z, logic.m_flameFullColor.W);

                    logic.UpdateFlames();
                    logic.UpdateCustomData();
                }
            };
            m_customControls.Add(color);

            alpha       = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyThrust>("FlameFullColorAlpha");
            alpha.Title = MyStringId.GetOrCompute("Alpha");
            alpha.SetLimits(0f, 1f);
            alpha.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(1f);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? logic.m_flameFullColor.W : 1f);
            };
            alpha.Setter = (block, value) =>
            {
                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    logic.m_flameFullColor.W = value;

                    if (logic.m_renderMode == RenderMode.Linked)
                    {
                        logic.m_flameIdleColor.W = logic.m_flameFullColor.W;
                    }

                    foreach (var control in m_customControls)
                    {
                        if (control.Id == "FlameIdleColorAlpha" || control.Id == "FlameFullColor" || control.Id == "FlameIdleColor")
                        {
                            control.UpdateVisual();
                        }
                    }

                    logic.UpdateFlames();
                    logic.UpdateCustomData();
                }
            };
            m_customControls.Add(alpha);

            var propertyFC = MyAPIGateway.TerminalControls.CreateProperty <Color, IMyThrust>("FlameFullColorOverride");

            propertyFC.SupportsMultipleBlocks = false;
            propertyFC.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(Vector4.Zero);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? (Color)logic.FlameFullColor : Color.Transparent);
            };

            propertyFC.Setter = (block, value) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return;
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null && logic.m_renderMode != RenderMode.Linked)
                {
                    logic.m_flameFullColor = value.ToVector4();
                }
            };

            MyAPIGateway.TerminalControls.AddControl <IMyThrust>(propertyFC);

            IMyTerminalControlSlider renderMode = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyThrust>("FlameRenderMode");

            renderMode.Title = MyStringId.GetOrCompute("Flame Render Mode");
            renderMode.SetLimits(0, 2);
            renderMode.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return((int)m_renderMode);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                return(logic != null ? (int)logic.m_renderMode : 0);
            };

            renderMode.Setter = (block, value) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return;
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    logic.m_renderMode = (RenderMode)value;

                    if (logic.m_renderMode == RenderMode.Linked)
                    {
                        logic.m_flameFullColor = logic.m_flameIdleColor;
                    }

                    logic.UpdateFlames();
                    logic.UpdateCustomData();

                    foreach (var control in m_customControls)
                    {
                        if (control.Id == "FlameFullColor")
                        {
                            control.UpdateVisual();
                        }
                    }
                }
            };

            renderMode.Writer = (block, sb) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return;
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    sb.Append(logic.m_renderMode.ToString());
                }
            };

            renderMode.SupportsMultipleBlocks = true;

            m_customControls.Add(renderMode);

            var hideFlamesCheckbox = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlCheckbox, IMyThrust>("HideThrustFlames");

            hideFlamesCheckbox.Title  = MyStringId.GetOrCompute("Hide Thrust Flames");
            hideFlamesCheckbox.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(false);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                return(logic != null ? logic.m_hideFlames : false);
            };

            hideFlamesCheckbox.Setter = (block, value) =>
            {
                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    logic.m_hideFlames = value;

                    logic.UpdateFlames();
                    logic.UpdateCustomData();
                }
            };

            hideFlamesCheckbox.SupportsMultipleBlocks = true;

            m_customControls.Add(hideFlamesCheckbox);

            var propertyHF = MyAPIGateway.TerminalControls.CreateProperty <bool, IMyThrust>("HideThrustFlames");

            propertyHF.SupportsMultipleBlocks = false;
            propertyHF.Getter = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return(false);
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();
                return(logic != null ? logic.HideThrustFlames : false);
            };

            propertyHF.Setter = (block, value) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return;
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    logic.HideThrustFlames = value;
                }
            };

            MyAPIGateway.TerminalControls.AddControl <IMyThrust>(propertyHF);

            var resetButton = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyThrust>("ResetDefaultColors");

            resetButton.Title = MyStringId.GetOrCompute("Reset Default Colors");

            resetButton.Action = (block) =>
            {
                if (block == null || block.GameLogic == null)
                {
                    return;
                }

                var logic = block.GameLogic.GetAs <RecolorableThrustFlameLogic>();

                if (logic != null)
                {
                    var blockDefinition = block.SlimBlock.BlockDefinition as MyThrustDefinition;

                    logic.m_flameIdleColor = blockDefinition.FlameIdleColor;
                    logic.m_flameFullColor = blockDefinition.FlameFullColor;

                    if (logic.m_flameFullColor != logic.m_flameIdleColor)
                    {
                        logic.m_renderMode = RenderMode.Blended;
                    }

                    foreach (var control in m_customControls)
                    {
                        control.UpdateVisual();
                    }

                    logic.UpdateFlames();
                    logic.UpdateCustomData();
                }
            };

            resetButton.SupportsMultipleBlocks = true;

            m_customControls.Add(resetButton);
        }
Exemplo n.º 13
0
        private void InitControls()
        {
            ThrusterOverclock         = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyThrust>("Overclock");
            ThrusterOverclock.Title   = MyStringId.GetOrCompute("Overclock");
            ThrusterOverclock.Tooltip = MyStringId.GetOrCompute("Multiplies thruster power at the cost of heat and degradation.");
            ThrusterOverclock.SetLimits(1, maxThrusterOverclock);
            ThrusterOverclock.SupportsMultipleBlocks = true;
            ThrusterOverclock.Getter = (x) =>
            {
                if (x == null || x.GameLogic == null)
                {
                    return(1f);
                }

                var logic = x.GameLogic.GetAs <ThrustOverride>();

                return(logic != null ? logic.Overclock : 1f);
            };

            ThrusterOverclock.Setter = (x, y) =>
            {
                var logic = x.GameLogic.GetAs <ThrustOverride>();

                if (logic != null)
                {
                    logic.Overclock = y;

                    if (Sync.IsClient)
                    {
                        var message = new MessageThrusterVariables();
                        message.EntityId         = logic.Entity.EntityId;
                        message.UpdateCustomData = true;
                        message.Overclock        = logic.Overclock;
                        message.SafetySwitch     = logic.SafetySwitch;
                        Messaging.SendMessageToServer(message);
                    }
                }
            };

            ThrusterOverclock.Writer = (x, y) =>
            {
                if (x == null || x.GameLogic == null)
                {
                    return;
                }

                var logic = x.GameLogic.GetAs <ThrustOverride>();

                if (logic != null)
                {
                    y.Append(logic.Overclock.ToString() + "x");
                }
            };

            SafetySwitch         = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlOnOffSwitch, IMyThrust>("SafetySwitch");
            SafetySwitch.Title   = MyStringId.GetOrCompute("Safety Switch");
            SafetySwitch.Tooltip = MyStringId.GetOrCompute("When enabled, reduces thrust when necessary to prevent damage from excessive heat.\nTurning this off can allow steady thrust over longer periods of time,\nwhich can be useful in emergencies.");
            SafetySwitch.OnText  = MyStringId.GetOrCompute("On");
            SafetySwitch.OffText = MyStringId.GetOrCompute("Off");
            SafetySwitch.SupportsMultipleBlocks = true;

            SafetySwitch.Getter = x =>
            {
                if (x == null || x.GameLogic == null)
                {
                    return(true);
                }

                var logic = x.GameLogic.GetAs <ThrustOverride>();

                return(logic != null ? logic.SafetySwitch : true);
            };

            SafetySwitch.Setter = (x, y) =>
            {
                Debug.Write("Attempting to set safety switch", 1);
                if (x == null || x.GameLogic == null)
                {
                    return;
                }

                var logic = x.GameLogic.GetAs <ThrustOverride>();

                logic.SafetySwitch = y;

                if (Sync.IsClient)
                {
                    Debug.Write("Set safety switch on client", 1);
                }

                if (Sync.IsServer)
                {
                    Debug.Write("Set safety switch on server", 1);
                }

                if (Sync.IsClient)
                {
                    var message = new MessageThrusterVariables();
                    message.UpdateCustomData = true;
                    message.EntityId         = logic.Entity.EntityId;
                    message.Overclock        = logic.Overclock;
                    message.SafetySwitch     = logic.SafetySwitch;
                    Messaging.SendMessageToServer(message);
                }
            };

            safetySwitchAction         = MyAPIGateway.TerminalControls.CreateAction <IMyThrust>("SafetySwitchAction");
            safetySwitchAction.Enabled = (x) => true;
            safetySwitchAction.Name    = new StringBuilder(string.Format("Safety Toggle On/Off"));
            safetySwitchAction.Icon    = @"Textures\GUI\Icons\Actions\Toggle.dds";
            safetySwitchAction.Action  = (x) =>
            {
                if (x == null || SafetySwitch == null)
                {
                    return;
                }

                SafetySwitch.Setter(x, !SafetySwitch.Getter(x));
            };
            safetySwitchAction.ValidForGroups = true;
            safetySwitchAction.Writer         = (x, y) =>
            {
                if (x == null || SafetySwitch == null)
                {
                    return;
                }

                y.Append(SafetySwitch.Getter(x) ? "On" : "Off");
            };
            safetySwitchAction.InvalidToolbarTypes = new List <MyToolbarType>();

            overclockActionIncrease                = MyAPIGateway.TerminalControls.CreateAction <IMyThrust>("OverclockActionIncrease");
            overclockActionIncrease.Enabled        = (x) => true;
            overclockActionIncrease.Name           = new StringBuilder(string.Format("Increase Overclock"));
            overclockActionIncrease.Icon           = @"Textures\GUI\Icons\Actions\Increase.dds";
            overclockActionIncrease.ValidForGroups = true;
            overclockActionIncrease.Action         = (x) =>
            {
                if (x == null || ThrusterOverclock == null)
                {
                    return;
                }

                ThrusterOverclock.Setter(x, Math.Min(ThrusterOverclock.Getter(x) + 1f, maxThrusterOverclock));
            };
            overclockActionIncrease.Writer = (x, y) =>
            {
                if (x == null || ThrusterOverclock == null)
                {
                    return;
                }
                y.Append(ThrusterOverclock.Getter(x).ToString() + "x");
            };
            overclockActionIncrease.InvalidToolbarTypes = new List <MyToolbarType>();

            overclockActionDecrease                = MyAPIGateway.TerminalControls.CreateAction <IMyThrust>("OverclockActionDecrease");
            overclockActionDecrease.Enabled        = (x) => true;
            overclockActionDecrease.Name           = new StringBuilder(string.Format("Decrease Overclock"));
            overclockActionDecrease.Icon           = @"Textures\GUI\Icons\Actions\Decrease.dds";
            overclockActionDecrease.ValidForGroups = true;
            overclockActionDecrease.Action         = (x) =>
            {
                if (x == null || ThrusterOverclock == null)
                {
                    return;
                }

                ThrusterOverclock.Setter(x, Math.Max(ThrusterOverclock.Getter(x) - 1f, 1f));
            };
            overclockActionDecrease.Writer = (x, y) =>
            {
                if (x == null || ThrusterOverclock == null)
                {
                    return;
                }
                y.Append(ThrusterOverclock.Getter(x).ToString() + "x");
            };
            overclockActionDecrease.InvalidToolbarTypes = new List <MyToolbarType>();
        }
Exemplo n.º 14
0
        public override void UpdateOnceBeforeFrame()
        {
            if (_init)
            {
                return;
            }

            _init  = true;
            _block = Entity as IMyCollector;

            if (_block == null)
            {
                return;
            }

            //create terminal controls
            IMyTerminalControlSeparator sep = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, IMyCollector>(string.Empty);

            sep.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(sep);

            IMyTerminalControlOnOffSwitch guideSwitch = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlOnOffSwitch, IMyCollector>("Shipyard_GuideSwitch");

            guideSwitch.Title   = MyStringId.GetOrCompute("Guide Boxes");
            guideSwitch.Tooltip = MyStringId.GetOrCompute("Toggles the guide boxes drawn around grids in the shipyard.");
            guideSwitch.OnText  = MyStringId.GetOrCompute("On");
            guideSwitch.OffText = MyStringId.GetOrCompute("Off");
            guideSwitch.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            guideSwitch.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner") && GetYard(b) != null;
            guideSwitch.SupportsMultipleBlocks = true;
            guideSwitch.Getter = GetGuideEnabled;
            guideSwitch.Setter = SetGuideEnabled;
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(guideSwitch);
            Controls.Add(guideSwitch);

            var lockSwitch = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlOnOffSwitch, IMyCollector>("Shipyard_LockSwitch");

            lockSwitch.Title   = MyStringId.GetOrCompute("Advanced Locking");
            lockSwitch.Tooltip = MyStringId.GetOrCompute("Toggles locking grids in the shipyard when grinding or welding while moving.");
            lockSwitch.OnText  = MyStringId.GetOrCompute("On");
            lockSwitch.OffText = MyStringId.GetOrCompute("Off");
            lockSwitch.Visible = b => b.BlockDefinition.SubtypeId.Equals("ShipyardCorner_Small");
            lockSwitch.Enabled = b => b.BlockDefinition.SubtypeId.Equals("ShipyardCorner_Small") && GetYard(b) != null;
            lockSwitch.SupportsMultipleBlocks = true;
            lockSwitch.Getter = GetLockEnabled;
            lockSwitch.Setter = SetLockEnabled;
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(lockSwitch);
            Controls.Add(lockSwitch);

            IMyTerminalControlButton grindButton = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyCollector>("Shipyard_GrindButton");
            IMyTerminalControlButton weldButton  = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyCollector>("Shipyard_WeldButton");
            IMyTerminalControlButton stopButton  = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyCollector>("Shipyard_StopButton");

            grindButton.Title   = MyStringId.GetOrCompute("Grind");
            grindButton.Tooltip = MyStringId.GetOrCompute("Begins grinding ships in the yard.");
            grindButton.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner") && GetYard(b)?.YardType == ShipyardType.Disabled;
            grindButton.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            grindButton.SupportsMultipleBlocks = true;
            grindButton.Action = b => Communication.SendYardCommand(b.CubeGrid.EntityId, ShipyardType.Grind);
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(grindButton);
            Controls.Add(grindButton);

            weldButton.Title   = MyStringId.GetOrCompute("Weld");
            weldButton.Tooltip = MyStringId.GetOrCompute("Begins welding ships in the yard.");
            weldButton.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner") && GetYard(b)?.YardType == ShipyardType.Disabled;
            weldButton.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            weldButton.SupportsMultipleBlocks = true;
            weldButton.Action = b => Communication.SendYardCommand(b.CubeGrid.EntityId, ShipyardType.Weld);
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(weldButton);
            Controls.Add(weldButton);

            stopButton.Title   = MyStringId.GetOrCompute("Stop");
            stopButton.Tooltip = MyStringId.GetOrCompute("Stops the shipyard.");
            stopButton.Enabled = b =>
            {
                if (!b.BlockDefinition.SubtypeId.Contains("ShipyardCorner"))
                {
                    return(false);
                }

                ShipyardItem yard = GetYard(b);

                return(yard?.YardType == ShipyardType.Weld || yard?.YardType == ShipyardType.Grind);
            };
            stopButton.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            stopButton.SupportsMultipleBlocks = true;
            stopButton.Action = b => Communication.SendYardCommand(b.CubeGrid.EntityId, ShipyardType.Disabled);
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(stopButton);
            Controls.Add(stopButton);

            IMyTerminalControlCombobox buildPattern = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlCombobox, IMyCollector>("Shipyard_BuildPattern");

            buildPattern.Title           = MyStringId.GetOrCompute("Build Pattern");
            buildPattern.Tooltip         = MyStringId.GetOrCompute("Pattern used to build projections.");
            buildPattern.ComboBoxContent = FillPatternCombo;
            buildPattern.Visible         = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            buildPattern.Enabled         = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner") && GetYard(b)?.YardType == ShipyardType.Disabled;
            buildPattern.Getter          = GetBuildPattern;
            buildPattern.Setter          = SetBuildPattern;
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(buildPattern);
            Controls.Add(buildPattern);

            IMyTerminalControlSlider beamCountSlider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyCollector>("Shipyard_BeamCount");

            beamCountSlider.Title = MyStringId.GetOrCompute("Beam Count");

            beamCountSlider.Tooltip = MyStringId.GetOrCompute("Number of beams this shipyard can use per corner.");
            beamCountSlider.SetLimits(1, 3);
            beamCountSlider.Writer  = (b, result) => result.Append(GetBeamCount(b));
            beamCountSlider.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            beamCountSlider.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner") && GetYard(b) != null;
            beamCountSlider.Getter  = b => GetBeamCount(b);
            beamCountSlider.Setter  = (b, v) =>
            {
                SetBeamCount(b, (int)Math.Round(v, 0, MidpointRounding.ToEven));
                beamCountSlider.UpdateVisual();
            };
            beamCountSlider.SupportsMultipleBlocks = true;
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(beamCountSlider);
            Controls.Add(beamCountSlider);

            IMyTerminalControlSlider grindSpeedSlider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyCollector>("Shipyard_GrindSpeed");

            grindSpeedSlider.Title = MyStringId.GetOrCompute("Grind Speed");

            grindSpeedSlider.Tooltip = MyStringId.GetOrCompute("How fast this shipyard grinds grids.");
            grindSpeedSlider.SetLimits(0.01f, 2);
            grindSpeedSlider.Writer  = (b, result) => result.Append(GetGrindSpeed(b));
            grindSpeedSlider.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            grindSpeedSlider.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner") && GetYard(b) != null;
            grindSpeedSlider.Getter  = GetGrindSpeed;
            grindSpeedSlider.Setter  = (b, v) =>
            {
                SetGrindSpeed(b, (float)Math.Round(v, 2, MidpointRounding.ToEven));
                grindSpeedSlider.UpdateVisual();
            };
            grindSpeedSlider.SupportsMultipleBlocks = true;
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(grindSpeedSlider);
            Controls.Add(grindSpeedSlider);

            IMyTerminalControlSlider weldSpeedSlider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyCollector>("Shipyard_WeldSpeed");

            weldSpeedSlider.Title = MyStringId.GetOrCompute("Weld Speed");

            weldSpeedSlider.Tooltip = MyStringId.GetOrCompute("How fast this shipyard welds grids.");
            weldSpeedSlider.SetLimits(0.01f, 2);
            weldSpeedSlider.Writer  = (b, result) => result.Append(GetWeldSpeed(b));
            weldSpeedSlider.Visible = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            weldSpeedSlider.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner") && GetYard(b) != null;
            weldSpeedSlider.Getter  = GetWeldSpeed;
            weldSpeedSlider.Setter  = (b, v) =>
            {
                SetWeldSpeed(b, (float)Math.Round(v, 2, MidpointRounding.ToEven));
                weldSpeedSlider.UpdateVisual();
            };
            weldSpeedSlider.SupportsMultipleBlocks = true;
            MyAPIGateway.TerminalControls.AddControl <IMyCollector>(weldSpeedSlider);
            Controls.Add(weldSpeedSlider);

            IMyTerminalAction grindAction = MyAPIGateway.TerminalControls.CreateAction <IMyCollector>("Shipyard_GrindAction");

            grindAction.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            grindAction.Name    = new StringBuilder("Grind");
            grindAction.Icon    = @"Textures\GUI\Icons\Actions\Start.dds";
            grindAction.Action  = b => Communication.SendYardCommand(b.CubeGrid.EntityId, ShipyardType.Grind);
            MyAPIGateway.TerminalControls.AddAction <IMyCollector>(grindAction);

            IMyTerminalAction weldAction = MyAPIGateway.TerminalControls.CreateAction <IMyCollector>("Shipyard_WeldAction");

            weldAction.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            weldAction.Name    = new StringBuilder("Weld");
            weldAction.Icon    = @"Textures\GUI\Icons\Actions\Start.dds";
            weldAction.Action  = b => Communication.SendYardCommand(b.CubeGrid.EntityId, ShipyardType.Weld);
            MyAPIGateway.TerminalControls.AddAction <IMyCollector>(weldAction);

            IMyTerminalAction stopAction = MyAPIGateway.TerminalControls.CreateAction <IMyCollector>("Shipyard_StopAction");

            stopAction.Enabled = b => b.BlockDefinition.SubtypeId.Contains("ShipyardCorner");
            stopAction.Name    = new StringBuilder("Stop");
            stopAction.Icon    = @"Textures\GUI\Icons\Actions\Reset.dds";
            stopAction.Action  = b => Communication.SendYardCommand(b.CubeGrid.EntityId, ShipyardType.Disabled);
            MyAPIGateway.TerminalControls.AddAction <IMyCollector>(stopAction);
        }