void CreateCustomTerminalControls() { if (_terminalControlsInit) { return; } _terminalControlsInit = true; IMyTerminalControlOnOffSwitch rechargeControl = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlOnOffSwitch, IMyLargeGatlingTurret>("RechargeRailgun"); rechargeControl.Title = MyStringId.GetOrCompute("Recharge Railgun"); rechargeControl.Enabled = x => x.BlockDefinition.SubtypeId.Equals("LargeRailgunTurretLZM"); rechargeControl.Visible = x => x.BlockDefinition.SubtypeId.Equals("LargeRailgunTurretLZM"); rechargeControl.SupportsMultipleBlocks = true; rechargeControl.OnText = MyStringId.GetOrCompute("On"); rechargeControl.OffText = MyStringId.GetOrCompute("Off"); rechargeControl.Setter = (x, v) => SetRecharging(x, v); rechargeControl.Getter = x => GetRecharging(x); MyAPIGateway.TerminalControls.AddControl <IMyLargeGatlingTurret>(rechargeControl); //Recharge toggle action IMyTerminalAction rechargeOnOff = MyAPIGateway.TerminalControls.CreateAction <IMyLargeGatlingTurret>("Recharge_OnOff"); rechargeOnOff.Action = (x) => { var recharge = GetRecharging(x); SetRecharging(x, !recharge); }; rechargeOnOff.ValidForGroups = true; rechargeOnOff.Writer = (x, s) => GetWriter(x, s); rechargeOnOff.Icon = @"Textures\GUI\Icons\Actions\Toggle.dds"; rechargeOnOff.Enabled = x => x.BlockDefinition.SubtypeId.Equals("LargeRailgunTurretLZM"); rechargeOnOff.Name = new StringBuilder("Recharge On/Off"); MyAPIGateway.TerminalControls.AddAction <IMyLargeGatlingTurret>(rechargeOnOff); //Recharge on action IMyTerminalAction rechargeOn = MyAPIGateway.TerminalControls.CreateAction <IMyLargeGatlingTurret>("Recharge_On"); rechargeOn.Action = (x) => SetRecharging(x, true); rechargeOn.ValidForGroups = true; rechargeOn.Writer = (x, s) => GetWriter(x, s); rechargeOn.Icon = @"Textures\GUI\Icons\Actions\SwitchOn.dds"; rechargeOn.Enabled = x => x.BlockDefinition.SubtypeId.Equals("LargeRailgunTurretLZM"); rechargeOn.Name = new StringBuilder("Recharge On"); MyAPIGateway.TerminalControls.AddAction <IMyLargeGatlingTurret>(rechargeOn); //Recharge off action IMyTerminalAction rechargeOff = MyAPIGateway.TerminalControls.CreateAction <IMyLargeGatlingTurret>("Recharge_Off"); rechargeOff.Action = (x) => SetRecharging(x, false); rechargeOff.ValidForGroups = true; rechargeOff.Writer = (x, s) => GetWriter(x, s); rechargeOff.Icon = @"Textures\GUI\Icons\Actions\SwitchOff.dds"; rechargeOff.Enabled = x => x.BlockDefinition.SubtypeId.Equals("LargeRailgunTurretLZM"); rechargeOff.Name = new StringBuilder("Recharge Off"); MyAPIGateway.TerminalControls.AddAction <IMyLargeGatlingTurret>(rechargeOff); }
public IMyTerminalAction DetonateAction() { IMyTerminalAction button = MyAPIGateway.TerminalControls.CreateAction <IMyConveyorSorter>("Detonate"); button.Enabled = HasBlockLogic; button.ValidForGroups = true; button.Action = block => BlockAction(block, kernel => kernel.PyroboltModule.TryDetonate()); button.Name = new System.Text.StringBuilder("Detonate"); return(button); }
private static IMyTerminalAction ActionIdExists(string id) { List <IMyTerminalAction> actions = new List <IMyTerminalAction>(); MyAPIGateway.TerminalControls.GetActions <IMyUpgradeModule>(out actions); IMyTerminalAction action = actions.Find(x => x.Id == id); return(action); }
private static void AddAction <T>(IMyTerminalControlButton btn, string icon, Func <IMyTerminalBlock, bool> enabled) where T : IMyTerminalBlock { IMyTerminalAction a = MyAPIGateway.TerminalControls.CreateAction <T>(btn.Id); a.Action = btn.Action; a.Enabled = enabled; a.ValidForGroups = btn.SupportsMultipleBlocks; a.Name = new StringBuilder(btn.Title.String); a.Icon = icon; MyAPIGateway.TerminalControls.AddAction <T>(a); }
public void register() { button = MyAPIGateway.TerminalControls.CreateControl <B, T>(id); hotbar = MyAPIGateway.TerminalControls.CreateAction <T>(id); hotbar.Name = new StringBuilder().Append(displayName); populate(); MyAPIGateway.TerminalControls.AddAction <T>(hotbar); MyAPIGateway.TerminalControls.AddControl <T>(button); }
private IMyTerminalAction CreativeChargeAction() { IMyTerminalAction action = MyAPIGateway.TerminalControls.CreateAction <IMyJumpDrive>("LaserJumpRechargeAction"); action.Enabled = Block => HasBlockLogic(Block) && OwnerHasCreativeRights(Block); action.Name = new System.Text.StringBuilder("Creative Recharge"); action.Icon = EemRdx.Helpers.ActionIcons.SwitchOn; action.Action = Block => { IMyJumpDrive jumpDrive = Block as IMyJumpDrive; jumpDrive.CurrentStoredPower = jumpDrive.MaxStoredPower; }; return(action); }
private void RemoveVanillaSpawnAction(IMyTerminalBlock block, List <IMyTerminalAction> actions) { if (block is IMyProjector && block.GameLogic.GetAs <InstantProjector>() != null) { for (int i = actions.Count - 1; i >= 0; i--) { IMyTerminalAction a = actions[i]; if (a.Id == "SpawnProjection") { actions.RemoveAt(i); return; } } } }
private void RemoveVanillaSpawnAction(IMyTerminalBlock block, List <IMyTerminalAction> actions) { if (block is IMyProjector && InstantProjector.IsValid(block)) { for (int i = actions.Count - 1; i >= 0; i--) { IMyTerminalAction a = actions[i]; if (a.Id == "SpawnProjection") { actions.RemoveAt(i); return; } } } }
private void create_slider_action <_block_>(string id, string title, Action <IMyTerminalBlock> action, Action <IMyTerminalBlock, StringBuilder> status, string icon) where _block_ : IMyTerminalBlock { IMyTerminalAction toggle_action = MyAPIGateway.TerminalControls.CreateAction <_block_>(id); toggle_action.Action = action; if (icon != null && icon != "") { toggle_action.Icon = @"Textures\GUI\Icons\Actions\" + icon + ".dds"; } toggle_action.Name = new StringBuilder(title); toggle_action.ValidForGroups = true; toggle_action.Writer = status; MyAPIGateway.TerminalControls.AddAction <_block_>(toggle_action); }
public static void CreateActionButton(string id, string name, Func <IMyTerminalBlock, bool> enabled, Action <IMyTerminalBlock, StringBuilder> writer, Action <IMyTerminalBlock> action) { if (ActionIdExists(id) != null) { return; } IMyTerminalAction button = MyAPIGateway.TerminalControls.CreateAction <IMyUpgradeModule>(id); button.Enabled = enabled; button.Name = new StringBuilder(name); button.Writer = writer; button.Action = action; MyAPIGateway.TerminalControls.AddAction <IMyUpgradeModule>(button); }
public void RemoveAction <TBlock>(IMyTerminalAction action) { if (!IsTypeValid <TBlock>()) { return; } Type producedType = GetProducedType <TBlock>(); if (producedType == null) { return; } var blockList = MyTerminalControlFactory.GetList(producedType).Actions; blockList.Remove((ITerminalAction)action); }
private void create_toggle <_block_>(string id, string title, string enabled_text, string disabled_text, Action <IMyTerminalBlock> action, Func <IMyTerminalBlock, bool> getter, Func <IMyTerminalBlock, bool> state, string icon) where _block_ : IMyTerminalBlock { IMyTerminalAction toggle_action = MyAPIGateway.TerminalControls.CreateAction <_block_>(id); toggle_action.Action = action; if (state != null) { toggle_action.Enabled = state; } if (icon != null && icon != "") { toggle_action.Icon = @"Textures\GUI\Icons\Actions\" + icon + ".dds"; } toggle_action.Name = new StringBuilder(title); toggle_action.ValidForGroups = true; toggle_action.Writer = delegate(IMyTerminalBlock block, StringBuilder output) { output.Clear(); output.Append(getter(block) ? enabled_text : disabled_text); }; MyAPIGateway.TerminalControls.AddAction <_block_>(toggle_action); }
private void create_button <_block_>(string id, string title, string tooltip, string action_prefix, Action <IMyTerminalBlock> button_function, Func <IMyTerminalBlock, bool> state, Action <IMyTerminalBlock, StringBuilder> status) where _block_ : IMyTerminalBlock { IMyTerminalControlButton new_button = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, _block_>(id); IMyTerminalAction button_action = MyAPIGateway.TerminalControls.CreateAction <_block_>(id + "Activate"); new_button.Title = MyStringId.GetOrCompute(title); button_action.Name = new StringBuilder(action_prefix + " " + title); if (tooltip != null) { new_button.Tooltip = MyStringId.GetOrCompute(tooltip); } new_button.Action = button_action.Action = button_function; if (state != null) { new_button.Enabled = state; } new_button.SupportsMultipleBlocks = button_action.ValidForGroups = false; button_action.Icon = @"Textures\GUI\Icons\Actions\MissileToggle.dds"; button_action.Writer = status; MyAPIGateway.TerminalControls.AddControl <_block_>(new_button); MyAPIGateway.TerminalControls.AddAction <_block_>(button_action); }
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); }
protected override void CreateTerminalControls <T>() { if (m_ControlsInited.Contains(typeof(T))) { return; // This must be first! } base.CreateTerminalControls <T>(); // This must be second! // Do rest of init // Create controls first, so they can be referenced below var distance = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, T>("JumpDistance"); // Use for compatibility with stock drive var selectedTarget = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlListbox, T>("Phoenix.FTL.SelectedTarget"); var remButton = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, T>("Phoenix.FTL.RemoveBtn"); var addButton = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, T>("Phoenix.FTL.SelectBtn"); var gpsList = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlListbox, T>("Phoenix.FTL.GpsList"); var jumpButton = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, T>("Phoenix.FTL.Jump"); IMyTerminalAction jumpAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("Jump"); // Use for compatibility with stock drive jumpButton.Title = MyStringId.GetOrCompute("BlockActionTitle_Jump"); jumpButton.Visible = (b) => b.IsFTL(); jumpButton.Enabled = (b) => b.IsWorking; jumpButton.Action = (b) => b.GameLogic.GetAs <FTLBase>().RequestJump(); MyAPIGateway.TerminalControls.AddControl <T>(jumpButton); Action updateDelegate = () => { distance.UpdateVisual(); addButton.UpdateVisual(); remButton.UpdateVisual(); selectedTarget.UpdateVisual(); }; StringBuilder actionname = new StringBuilder(); actionname.Append("Jump"); jumpAction.Name = actionname; jumpAction.Icon = @"Textures\GUI\Icons\Actions\Toggle.dds"; jumpAction.ValidForGroups = false; jumpAction.Enabled = (b) => b.IsWorking; jumpAction.Action = (b) => jumpButton.Action(b); MyAPIGateway.TerminalControls.AddAction <T>(jumpAction); distance.Title = MyStringId.GetOrCompute("BlockPropertyTitle_JumpDistance"); distance.SetLimits(0f, 100f); distance.Getter = (b) => (b.GameLogic.GetAs <FTLBase>().Data.jumpDistance / b.GameLogic.GetAs <FTLGyro>().ComputeMaxDistance()) * 100f; distance.Setter = (b, v) => b.GameLogic.GetAs <FTLGyro>().SendDistanceChange((v / 100f) * b.GameLogic.GetAs <FTLGyro>().ComputeMaxDistance()); distance.Writer = (b, v) => { v.AppendFormat("{0:P0} (", distance.Getter(b) / 100f); MyValueFormatter.AppendDistanceInBestUnit(b.GameLogic.GetAs <FTLBase>().Data.jumpDistance, v); v.Append(")"); }; distance.Visible = (b) => b.IsFTL(); distance.Enabled = (b) => b.GameLogic.GetAs <FTLBase>().Data.jumpTargetGPS == null; MyAPIGateway.TerminalControls.AddControl <IMyGyro>(distance); selectedTarget.Title = MyStringId.GetOrCompute("BlockPropertyTitle_DestinationGPS"); selectedTarget.ListContent = (b, list1, list2) => b.GameLogic.GetAs <FTLGyro>().FillSelectedTarget(b, list1, list2); selectedTarget.Visible = (b) => b.IsFTL(); selectedTarget.VisibleRowsCount = 1; MyAPIGateway.TerminalControls.AddControl <IMyGyro>(selectedTarget); remButton.Title = MyStringId.GetOrCompute("RemoveProjectionButton"); remButton.Visible = (b) => b.IsFTL(); remButton.Enabled = (b) => b.GameLogic.GetAs <FTLGyro>().CanRemove(); remButton.Action = (b) => { b.GameLogic.GetAs <FTLGyro>().RemoveSelected(); updateDelegate(); }; MyAPIGateway.TerminalControls.AddControl <IMyGyro>(remButton); addButton.Title = MyStringId.GetOrCompute("SelectBlueprint"); addButton.Visible = (b) => b.IsFTL(); addButton.Enabled = (b) => b.GameLogic.GetAs <FTLGyro>().CanSelect(); addButton.Action = (b) => { b.GameLogic.GetAs <FTLGyro>().SelectTarget(); updateDelegate(); }; MyAPIGateway.TerminalControls.AddControl <IMyGyro>(addButton); gpsList.Title = MyStringId.GetOrCompute("BlockPropertyTitle_GpsLocations"); gpsList.ListContent = (b, list1, list2) => b.GameLogic.GetAs <FTLGyro>().FillGpsList(b, list1, list2); gpsList.ItemSelected = (b, v) => { b.GameLogic.GetAs <FTLGyro>().SelectGps(v); updateDelegate(); }; gpsList.Visible = (b) => b.IsFTL(); gpsList.VisibleRowsCount = 8; MyAPIGateway.TerminalControls.AddControl <IMyGyro>(gpsList); }
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>(); }
// Context: All public override void UpdateOnceBeforeFrame() { if (me.CubeGrid?.Physics == null) { return; } _state = new SyncableProjectorState(me, State.Idle, 0); if (Constants.IsServer) { LoadStorage(); _settings.OnValueReceived += SaveStorage; BuildState = State.Idle; me.IsWorkingChanged += Me_IsWorkingChanged; } else { _settings = new SyncableProjectorSettings(me, 0, true); _state.RequestFromServer(); _settings.RequestFromServer(); _state.OnValueReceived += ReceivedNewState; } MyProjectorDefinition def = (MyProjectorDefinition)MyDefinitionManager.Static.GetCubeBlockDefinition(me.BlockDefinition); minPower = def.RequiredPowerInput; sink = me.Components.Get <MyResourceSinkComponent>(); MyDefinitionId powerDef = MyResourceDistributorComponent.ElectricityId; sink.SetRequiredInputFuncByType(powerDef, GetCurrentPower); sink.Update(); _settings.OnValueReceived += RefreshUI; me.AppendingCustomInfo += CustomInfo; me.RefreshCustomInfo(); Settings.MapSettings config = IPSession.Instance.MapSettings; config.OnSubgridsChanged += ClearCachedComps; config.OnComponentCostModifierChanged += ClearCachedComps; config.OnExtraComponentChanged += ClearCachedComps; config.OnExtraCompCostChanged += ClearCachedComps; if (!controls) { // Terminal controls IMyTerminalControlSeparator sep = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, IMyProjector>("BuildGridSep"); sep.Enabled = IsValid; sep.Visible = IsValid; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(sep); IMyTerminalControlButton btnBuild = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyProjector>("BuildGrid"); btnBuild.Enabled = IsWorking; btnBuild.Visible = IsValid; btnBuild.SupportsMultipleBlocks = true; btnBuild.Title = MyStringId.GetOrCompute("Build Grid"); btnBuild.Action = BuildClient; btnBuild.Tooltip = MyStringId.GetOrCompute("Builds the projection instantly.\nThere will be a cooldown after building."); MyAPIGateway.TerminalControls.AddControl <IMyProjector>(btnBuild); IMyTerminalControlButton btnCancel = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyProjector>("CancelBuildGrid"); btnCancel.Enabled = IsWorking; btnCancel.Visible = IsValid; btnCancel.SupportsMultipleBlocks = true; btnCancel.Title = MyStringId.GetOrCompute("Cancel"); btnCancel.Action = CancelClient; btnCancel.Tooltip = MyStringId.GetOrCompute("Cancels the build process."); MyAPIGateway.TerminalControls.AddControl <IMyProjector>(btnCancel); IMyTerminalControlCheckbox chkShift = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlCheckbox, IMyProjector>("MoveProjectionArea"); chkShift.Enabled = IsWorking; chkShift.Visible = IsValid; chkShift.SupportsMultipleBlocks = true; chkShift.Title = MyStringId.GetOrCompute("Loose Projection Area"); chkShift.OnText = MyStringId.GetOrCompute("On"); chkShift.OffText = MyStringId.GetOrCompute("Off"); chkShift.Tooltip = MyStringId.GetOrCompute("Allow the projection to spawn in a different area if the original area is occupied."); chkShift.Setter = SetLooseArea; chkShift.Getter = GetLooseArea; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(chkShift); IMyTerminalControlSlider sliderSpeed = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyProjector>("BuildSpeed"); sliderSpeed.Enabled = IsWorking; sliderSpeed.Visible = IsValid; sliderSpeed.SupportsMultipleBlocks = true; sliderSpeed.Title = MyStringId.GetOrCompute("Speed"); sliderSpeed.Tooltip = MyStringId.GetOrCompute("Increasing the speed will use more energy."); sliderSpeed.SetLogLimits(Constants.minSpeed, Constants.maxSpeed); sliderSpeed.Writer = GetSpeedText; sliderSpeed.Getter = GetSpeed; sliderSpeed.Setter = SetSpeed; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(sliderSpeed); IMyTerminalControlTextbox txtTimeout = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlTextbox, IMyProjector>("GridTimer"); txtTimeout.Enabled = (b) => false; txtTimeout.Visible = IsValid; txtTimeout.Getter = GetTimer; txtTimeout.Setter = (b, s) => { }; txtTimeout.SupportsMultipleBlocks = false; txtTimeout.Title = MyStringId.GetOrCompute("Build Timer"); txtTimeout.Tooltip = MyStringId.GetOrCompute("The amount of time you must wait after building a grid to be able to build another."); MyAPIGateway.TerminalControls.AddControl <IMyProjector>(txtTimeout); // Terminal actions // Button panels are special and trigger on the server instead of the client, making everything more complicated. IMyTerminalAction aCancel = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("CancelBuildAction"); aCancel.Enabled = IsValid; aCancel.Action = CancelClient; // For all except button panels aCancel.ValidForGroups = true; aCancel.Name = new StringBuilder("Cancel Spawn Grid"); aCancel.Writer = (b, s) => s.Append("Cancel"); aCancel.InvalidToolbarTypes = new[] { MyToolbarType.ButtonPanel }.ToList(); MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aCancel); IMyTerminalAction aCancel2 = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("CancelBuildGrid"); aCancel2.Enabled = IsValid; aCancel2.Action = CancelClientUnsafe; // For only button panels aCancel2.ValidForGroups = true; aCancel2.Name = new StringBuilder("Cancel Spawn Grid"); aCancel2.Writer = (b, s) => s.Append("Cancel"); aCancel2.InvalidToolbarTypes = new List <MyToolbarType> { MyToolbarType.BuildCockpit, MyToolbarType.Character, MyToolbarType.LargeCockpit, MyToolbarType.None, MyToolbarType.Seat, MyToolbarType.Ship, MyToolbarType.SmallCockpit, MyToolbarType.Spectator }; MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aCancel2); IMyTerminalAction aBuild = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("BuildGridAction"); aBuild.Enabled = IsValid; aBuild.Action = BuildClient; // For all except button panels aBuild.ValidForGroups = true; aBuild.Name = new StringBuilder("Spawn Grid"); aBuild.Writer = (b, s) => s.Append("Spawn"); aBuild.InvalidToolbarTypes = new [] { MyToolbarType.ButtonPanel }.ToList(); MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aBuild); IMyTerminalAction aBuild2 = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("BuildGrid"); aBuild2.Enabled = IsValid; aBuild2.Action = BuildClientUnsafe; // For only button panels aBuild2.ValidForGroups = true; aBuild2.Name = new StringBuilder("Spawn Grid"); aBuild2.Writer = (b, s) => s.Append("Spawn"); aBuild2.InvalidToolbarTypes = new List <MyToolbarType> { MyToolbarType.BuildCockpit, MyToolbarType.Character, MyToolbarType.LargeCockpit, MyToolbarType.None, MyToolbarType.Seat, MyToolbarType.Ship, MyToolbarType.SmallCockpit, MyToolbarType.Spectator }; MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aBuild2); IMyTerminalControlListbox itemList = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlListbox, IMyProjector>("ComponentList"); itemList.Enabled = IsWorking; itemList.Visible = IsValid; itemList.ListContent = GetItemList; itemList.Multiselect = false; itemList.SupportsMultipleBlocks = false; itemList.Title = MyStringId.GetOrCompute("Components"); itemList.VisibleRowsCount = 10; itemList.ItemSelected = (b, l) => { }; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(itemList); // Programmable Block stuff IMyTerminalControlProperty <Dictionary <MyItemType, int> > itemListProp = MyAPIGateway.TerminalControls.CreateProperty <Dictionary <MyItemType, int>, IMyProjector>("RequiredComponents"); itemListProp.Enabled = IsWorking; itemListProp.Visible = IsValid; itemListProp.SupportsMultipleBlocks = false; itemListProp.Setter = (b, l) => { }; itemListProp.Getter = GetItemListPB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(itemListProp); IMyTerminalControlProperty <int> gridTimeoutProp = MyAPIGateway.TerminalControls.CreateProperty <int, IMyProjector>("GridTimerProjection"); gridTimeoutProp.Enabled = IsWorking; gridTimeoutProp.Visible = IsValid; gridTimeoutProp.SupportsMultipleBlocks = false; gridTimeoutProp.Setter = (b, l) => { }; gridTimeoutProp.Getter = GetMaxTimerPB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(gridTimeoutProp); IMyTerminalControlProperty <int> gridTimeoutActive = MyAPIGateway.TerminalControls.CreateProperty <int, IMyProjector>("GridTimerCurrent"); gridTimeoutActive.Enabled = IsWorking; gridTimeoutActive.Visible = IsValid; gridTimeoutActive.SupportsMultipleBlocks = false; gridTimeoutActive.Setter = (b, l) => { }; gridTimeoutActive.Getter = GetCurrentTimerPB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(gridTimeoutActive); IMyTerminalControlProperty <int> buildState = MyAPIGateway.TerminalControls.CreateProperty <int, IMyProjector>("BuildState"); buildState.Enabled = IsWorking; buildState.Visible = IsValid; buildState.SupportsMultipleBlocks = false; buildState.Setter = (b, l) => { }; buildState.Getter = GetStatePB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(gridTimeoutActive); MyLog.Default.WriteLineAndConsole("Initialized Instant Projector."); controls = true; } }
private void CreateControls() { // Actions IMyTerminalAction toggleWarp = MyAPIGateway.TerminalControls.CreateAction <IMyUpgradeModule>("ToggleWarp"); toggleWarp.Enabled = IsWarpDrive; toggleWarp.Name = new StringBuilder("Toggle Warp"); toggleWarp.Action = ToggleWarp; toggleWarp.Icon = "Textures\\GUI\\Icons\\Actions\\Toggle.dds"; toggleWarp.Writer = GetWarpStatusText; MyAPIGateway.TerminalControls.AddAction <IMyUpgradeModule>(toggleWarp); IMyTerminalAction toggleSafety = MyAPIGateway.TerminalControls.CreateAction <IMyUpgradeModule>("ToggleSafety"); toggleSafety.Enabled = IsWarpDrive; toggleSafety.Name = new StringBuilder("Toggle Safety"); toggleSafety.Action = ToggleSafety; toggleSafety.Icon = "Textures\\GUI\\Icons\\Actions\\Toggle.dds"; toggleSafety.Writer = GetSafetyText; MyAPIGateway.TerminalControls.AddAction <IMyUpgradeModule>(toggleSafety); // Controls IMyTerminalControlButton startWarpBtn = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyUpgradeModule>("StartWarpBtn"); startWarpBtn.Tooltip = MyStringId.GetOrCompute("Toggles the status of the warp drives on the ship"); startWarpBtn.Title = MyStringId.GetOrCompute("Toggle Warp"); startWarpBtn.Enabled = IsWarpDrive; startWarpBtn.Visible = IsWarpDrive; startWarpBtn.SupportsMultipleBlocks = false; startWarpBtn.Action = ToggleWarp; MyAPIGateway.TerminalControls.AddControl <IMyUpgradeModule>(startWarpBtn); IMyTerminalControlCheckbox safetyCheckbox = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlCheckbox, IMyUpgradeModule>("Safety"); safetyCheckbox.Tooltip = MyStringId.GetOrCompute("When checked, the warp drive will not function without a player on the ship."); safetyCheckbox.Title = MyStringId.GetOrCompute("Safety"); safetyCheckbox.OffText = MyStringId.GetOrCompute("Off"); safetyCheckbox.OnText = MyStringId.GetOrCompute("On"); safetyCheckbox.Enabled = IsWarpDrive; safetyCheckbox.Visible = IsWarpDrive; safetyCheckbox.SupportsMultipleBlocks = false; safetyCheckbox.Setter = SetWarpSafety; safetyCheckbox.Getter = GetWarpSafety; MyAPIGateway.TerminalControls.AddControl <IMyUpgradeModule>(safetyCheckbox); // Pb Properties IMyTerminalControlProperty <bool> inWarp = MyAPIGateway.TerminalControls.CreateProperty <bool, IMyUpgradeModule>("WarpStatus"); inWarp.Enabled = IsWarpDrive; inWarp.Visible = IsWarpDrive; inWarp.SupportsMultipleBlocks = false; inWarp.Setter = SetWarpStatus; inWarp.Getter = GetWarpStatus; MyAPIGateway.TerminalControls.AddControl <IMyUpgradeModule>(inWarp); IMyTerminalControlProperty <bool> warpSafetyProp = MyAPIGateway.TerminalControls.CreateProperty <bool, IMyUpgradeModule>("WarpSafety"); warpSafetyProp.Enabled = IsWarpDrive; warpSafetyProp.Visible = IsWarpDrive; warpSafetyProp.SupportsMultipleBlocks = false; warpSafetyProp.Setter = SetWarpSafety; warpSafetyProp.Getter = GetWarpSafety; MyAPIGateway.TerminalControls.AddControl <IMyUpgradeModule>(warpSafetyProp); IMyTerminalControlProperty <float> heatPercent = MyAPIGateway.TerminalControls.CreateProperty <float, IMyUpgradeModule>("WarpHeat"); heatPercent.Enabled = IsWarpDrive; heatPercent.Visible = IsWarpDrive; heatPercent.SupportsMultipleBlocks = false; heatPercent.Setter = (x, y) => { }; heatPercent.Getter = GetWarpHeat; MyAPIGateway.TerminalControls.AddControl <IMyUpgradeModule>(heatPercent); }
public static void InitLate() { initialized = true; nextFrameAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_NextFrame"); nextFrameAction.Name = new StringBuilder("Next Frame"); nextFrameAction.Action = ActionNextFrame; nextFrameAction.Writer = FrameNumWriterGen("+1"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(nextFrameAction); prevFrameAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_PrevFrame"); prevFrameAction.Name = new StringBuilder("Prev Frame"); prevFrameAction.Action = ActionPrevFrame; prevFrameAction.Writer = FrameNumWriterGen("-1"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(prevFrameAction); nextFrame10Action = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_NextFrame10"); nextFrame10Action.Name = new StringBuilder("Next Frame +10"); nextFrame10Action.Action = ActionNextFrame10; nextFrame10Action.Writer = FrameNumWriterGen("+10"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(nextFrame10Action); prevFrame10Action = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_PrevFrame10"); prevFrame10Action.Name = new StringBuilder("Prev Frame -10"); prevFrame10Action.Action = ActionPrevFrame10; prevFrame10Action.Writer = FrameNumWriterGen("-10"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(prevFrame10Action); nextKeyFrameAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_NextKeyFrame"); nextKeyFrameAction.Name = new StringBuilder("Next Keyframe"); nextKeyFrameAction.Action = ActionNextKeyFrame; nextKeyFrameAction.Writer = FrameNumWriterGen("+K"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(nextKeyFrameAction); prevKeyFrameAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_PrevKeyFrame"); prevKeyFrameAction.Name = new StringBuilder("Prev Keyframe"); prevKeyFrameAction.Action = ActionPrevKeyFrame; prevKeyFrameAction.Writer = FrameNumWriterGen("-K"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(prevKeyFrameAction); playAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_Play"); playAction.Name = new StringBuilder("Play"); playAction.Action = ActionPlay; playAction.Writer = ConditionToggleWriterGen((cam) => cam.PlaybackState == PlaybackMode.Playing, "Play"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(playAction); pauseAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_Pause"); pauseAction.Name = new StringBuilder("Pause"); pauseAction.Action = ActionPause; pauseAction.Writer = ConditionToggleWriterGen((cam) => cam.PlaybackState == PlaybackMode.Paused, "Paus"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(pauseAction); playPauseAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_PlayPause"); playPauseAction.Name = new StringBuilder("Play/Pause"); playPauseAction.Action = ActionPlayPause; playPauseAction.Writer = ConditionToggleWriterGen((cam) => cam.PlaybackState == PlaybackMode.Playing, "Play"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(playPauseAction); stopAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_Stop"); stopAction.Name = new StringBuilder("Stop"); stopAction.Action = ActionStop; stopAction.Writer = ConditionToggleWriterGen((cam) => cam.PlaybackState == PlaybackMode.Stopped, "Stop"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(stopAction); setFrameAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_SetKey"); setFrameAction.Name = new StringBuilder("Set Frame"); setFrameAction.Action = ActionSetFrame; setFrameAction.Writer = (b, sb) => { sb.Clear(); sb.Append("^Frm"); }; MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(setFrameAction); setPosFrameAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_SetPosKey"); setPosFrameAction.Name = new StringBuilder("Set Pos"); setPosFrameAction.Action = ActionSetPosFrame; setPosFrameAction.Writer = (b, sb) => { sb.Clear(); sb.Append("^Pos"); }; MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(setPosFrameAction); setViewFrameAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_SetViewKey"); setViewFrameAction.Name = new StringBuilder("Set View"); setViewFrameAction.Action = ActionSetViewFrame; setViewFrameAction.Writer = (b, sb) => { sb.Clear(); sb.Append("^View"); }; MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(setViewFrameAction); delKeyframeAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_DelKeyframe"); delKeyframeAction.Name = new StringBuilder("Remove Keyframe"); delKeyframeAction.Action = ActionDelKeyframe; delKeyframeAction.Writer = (b, sb) => { sb.Clear(); sb.Append("RmFrm"); }; MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(delKeyframeAction); toggleKeyframeModeAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_ToggleTransitionMode"); toggleKeyframeModeAction.Name = new StringBuilder("Change Transition"); toggleKeyframeModeAction.Action = ActionToggleKeyframeMode; toggleKeyframeModeAction.Writer = KeyframeModeWriter; MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(toggleKeyframeModeAction); lockViewAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_LockViewToTarget"); lockViewAction.Name = new StringBuilder("Lock View to Target"); lockViewAction.Action = ActionLockViewToTarget; lockViewAction.Writer = ConditionToggleWriterGen((cam) => cam.view_locked_to != null, "VTgt"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(lockViewAction); lockPosAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_LockPosToTarget"); lockPosAction.Name = new StringBuilder("Lock Pos to Target"); lockPosAction.Action = ActionLockPosToTarget; lockPosAction.Writer = ConditionToggleWriterGen((cam) => cam.pos_locked_to != null, "PTgt"); MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(lockPosAction); setFocusAction = MyAPIGateway.TerminalControls.CreateAction <IMyCameraBlock>("Camera_SetFocusToViewLock"); setFocusAction.Name = new StringBuilder("Set Focus to View Lock"); setFocusAction.Action = ActionSetFocusToViewLock; setFocusAction.Writer = (b, sb) => { sb.Clear(); sb.Append("Focus"); }; MyAPIGateway.TerminalControls.AddAction <IMyCameraBlock>(setFocusAction); rangeSlider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyCameraBlock>("Camera_FocusDistance"); rangeSlider.Title = MyStringId.GetOrCompute("Focus Distance"); rangeSlider.Tooltip = MyStringId.GetOrCompute("Focus distance. Important when camera is locked to a distant object."); rangeSlider.SetLogLimits(1.0f, 100000.0f); rangeSlider.SupportsMultipleBlocks = true; rangeSlider.Getter = b => (float)SettingsStore.Get(b, "focus_distance", 1.0f); rangeSlider.Setter = (b, v) => SettingsStore.Set(b, "focus_distance", (float)LogRound(v)); rangeSlider.Writer = (b, result) => result.Append(SettingsStore.Get(b, "focus_distance", 1.0f)); rangeSlider.Visible = BlockIsMyCamera; MyAPIGateway.TerminalControls.AddControl <IMyCameraBlock>(rangeSlider); MyAPIGateway.TerminalControls.CustomActionGetter += GetCameraActions; }
public static void InitLate() { initialized = true; powerSwitch = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlOnOffSwitch, IMyTerminalBlock>("HoverRail_OnOff"); powerSwitch.Title = MyStringId.GetOrCompute("Maglev Engine"); powerSwitch.Tooltip = MyStringId.GetOrCompute("Enable to apply force to stick to the track."); powerSwitch.Getter = b => (bool)SettingsStore.Get(b, "power_on", true); powerSwitch.Setter = (b, v) => SettingsStore.Set(b, "power_on", v); powerSwitch.SupportsMultipleBlocks = true; powerSwitch.OnText = MyStringId.GetOrCompute("On"); powerSwitch.OffText = MyStringId.GetOrCompute("Off"); powerSwitch.Visible = BlockIsEngine; MyAPIGateway.TerminalControls.AddControl <IMyTerminalBlock>(powerSwitch); forceSlider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyTerminalBlock>("HoverRail_ForceLimit"); forceSlider.Title = MyStringId.GetOrCompute("Force Limit"); forceSlider.Tooltip = MyStringId.GetOrCompute("The amount of force applied to align this motor with the track."); forceSlider.SetLogLimits(10000.0f, 50000000.0f); forceSlider.SupportsMultipleBlocks = true; forceSlider.Getter = b => (float)SettingsStore.Get(b, "force_slider", 100000.0f); forceSlider.Setter = (b, v) => SettingsStore.Set(b, "force_slider", (float)LogRound(v)); forceSlider.Writer = (b, result) => result.Append(String.Format("{0}N", SIFormat((float)SettingsStore.Get(b, "force_slider", 100000.0f)))); forceSlider.Visible = BlockIsEngine; MyAPIGateway.TerminalControls.AddControl <IMyTerminalBlock>(forceSlider); heightSlider = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyTerminalBlock>("HoverRail_HeightOffset"); heightSlider.Title = MyStringId.GetOrCompute("Height Offset"); heightSlider.Tooltip = MyStringId.GetOrCompute("The height we float above the track."); heightSlider.SetLimits(0.1f, 2.5f); heightSlider.SupportsMultipleBlocks = true; heightSlider.Getter = b => (float)SettingsStore.Get(b, "height_offset", 1.25f); heightSlider.Setter = (b, v) => SettingsStore.Set(b, "height_offset", (float)Math.Round(v, 1)); heightSlider.Writer = (b, result) => result.Append(String.Format("{0}m", (float)SettingsStore.Get(b, "height_offset", 1.25f))); heightSlider.Visible = BlockIsEngine; MyAPIGateway.TerminalControls.AddControl <IMyTerminalBlock>(heightSlider); lowerHeightAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailEngine_LowerHeight0.1"); lowerHeightAction.Name = new StringBuilder("Lower Height"); lowerHeightAction.Action = LowerHeightAction; lowerHeightAction.Writer = (block, builder) => { builder.Clear(); builder.Append(String.Format("{0} -", (float)SettingsStore.Get(block, "height_offset", 1.25f))); }; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(lowerHeightAction); raiseHeightAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailEngine_RaiseHeight0.1"); raiseHeightAction.Name = new StringBuilder("Raise Height"); raiseHeightAction.Action = RaiseHeightAction; raiseHeightAction.Writer = (block, builder) => { builder.Clear(); builder.Append(String.Format("{0} +", (float)SettingsStore.Get(block, "height_offset", 1.25f))); }; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(raiseHeightAction); turnOnAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailEngine_On"); turnOnAction.Name = new StringBuilder("Power On"); turnOnAction.Action = TurnOnAction; turnOnAction.Writer = OnOffWriter; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(turnOnAction); turnOffAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailEngine_Off"); turnOffAction.Name = new StringBuilder("Power Off"); turnOffAction.Action = TurnOffAction; turnOffAction.Writer = OnOffWriter; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(turnOffAction); turnOnOffAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailEngine_OnOff"); turnOnOffAction.Name = new StringBuilder("Power On/Off"); turnOnOffAction.Action = TurnOnOffAction; turnOnOffAction.Writer = OnOffWriter; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(turnOnOffAction); MyAPIGateway.TerminalControls.CustomActionGetter += GetEngineActions; }
public static void Create() { if (controls) { return; } IMyTerminalControlSeparator sep = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, IMyProjector>("BuildGridSep"); sep.Enabled = IsValid; sep.Visible = IsValid; sep.SupportsMultipleBlocks = true; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(sep); IMyTerminalControlLabel lbl = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlLabel, IMyProjector>("BuildGridLabel"); lbl.Enabled = IsValid; lbl.Visible = IsValid; lbl.SupportsMultipleBlocks = true; lbl.Label = MyStringId.GetOrCompute("Instant Projector Controls"); MyAPIGateway.TerminalControls.AddControl <IMyProjector>(lbl); IMyTerminalControlButton btnBuild = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyProjector>("BuildGrid"); btnBuild.Enabled = IsWorking; btnBuild.Visible = IsValid; btnBuild.SupportsMultipleBlocks = true; btnBuild.Title = MyStringId.GetOrCompute("Build Grid"); btnBuild.Action = BuildClient; btnBuild.Tooltip = MyStringId.GetOrCompute("Builds the projection instantly.\nThere will be a cooldown after building."); MyAPIGateway.TerminalControls.AddControl <IMyProjector>(btnBuild); IMyTerminalControlButton btnCancel = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyProjector>("CancelBuildGrid"); btnCancel.Enabled = IsWorking; btnCancel.Visible = IsValid; btnCancel.SupportsMultipleBlocks = true; btnCancel.Title = MyStringId.GetOrCompute("Cancel"); btnCancel.Action = CancelClient; btnCancel.Tooltip = MyStringId.GetOrCompute("Cancels the build process."); MyAPIGateway.TerminalControls.AddControl <IMyProjector>(btnCancel); IMyTerminalControlCheckbox chkShift = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlCheckbox, IMyProjector>("MoveProjectionArea"); chkShift.Enabled = IsWorking; chkShift.Visible = IsValid; chkShift.SupportsMultipleBlocks = true; chkShift.Title = MyStringId.GetOrCompute("Loose Projection Area"); chkShift.OnText = MyStringId.GetOrCompute("On"); chkShift.OffText = MyStringId.GetOrCompute("Off"); chkShift.Tooltip = MyStringId.GetOrCompute("Allow the projection to spawn in a different area if the original area is occupied."); chkShift.Setter = SetLooseArea; chkShift.Getter = GetLooseArea; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(chkShift); IMyTerminalControlSlider sliderSpeed = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSlider, IMyProjector>("BuildSpeed"); sliderSpeed.Enabled = IsWorking; sliderSpeed.Visible = IsValid; sliderSpeed.SupportsMultipleBlocks = true; sliderSpeed.Title = MyStringId.GetOrCompute("Speed"); sliderSpeed.Tooltip = MyStringId.GetOrCompute("Increasing the speed will use more energy."); sliderSpeed.SetLogLimits(Constants.minSpeed, Constants.maxSpeed); sliderSpeed.Writer = GetSpeedText; sliderSpeed.Getter = GetSpeed; sliderSpeed.Setter = SetSpeed; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(sliderSpeed); IMyTerminalControlTextbox txtTimeout = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlTextbox, IMyProjector>("GridTimer"); txtTimeout.Enabled = (b) => false; txtTimeout.Visible = IsValid; txtTimeout.Getter = GetTimer; txtTimeout.Setter = (b, s) => { }; txtTimeout.SupportsMultipleBlocks = false; txtTimeout.Title = MyStringId.GetOrCompute("Build Timer"); txtTimeout.Tooltip = MyStringId.GetOrCompute("The amount of time you must wait after building a grid to be able to build another."); MyAPIGateway.TerminalControls.AddControl <IMyProjector>(txtTimeout); // Terminal actions // Button panels are special and trigger on the server instead of the client, making everything more complicated. IMyTerminalAction aCancel = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("CancelBuildAction"); aCancel.Enabled = IsValid; aCancel.Action = CancelClient; // For all except button panels aCancel.ValidForGroups = true; aCancel.Name = new StringBuilder("Cancel Spawn Grid"); aCancel.Writer = (b, s) => s.Append("Cancel"); aCancel.InvalidToolbarTypes = new[] { MyToolbarType.ButtonPanel }.ToList(); MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aCancel); IMyTerminalAction aCancel2 = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("CancelBuildGrid"); aCancel2.Enabled = IsValid; aCancel2.Action = CancelClientUnsafe; // For only button panels aCancel2.ValidForGroups = true; aCancel2.Name = new StringBuilder("Cancel Spawn Grid"); aCancel2.Writer = (b, s) => s.Append("Cancel"); aCancel2.InvalidToolbarTypes = new List <MyToolbarType> { MyToolbarType.BuildCockpit, MyToolbarType.Character, MyToolbarType.LargeCockpit, MyToolbarType.None, MyToolbarType.Seat, MyToolbarType.Ship, MyToolbarType.SmallCockpit, MyToolbarType.Spectator }; MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aCancel2); IMyTerminalAction aBuild = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("BuildGridAction"); aBuild.Enabled = IsValid; aBuild.Action = BuildClient; // For all except button panels aBuild.ValidForGroups = true; aBuild.Name = new StringBuilder("Spawn Grid"); aBuild.Writer = (b, s) => s.Append("Spawn"); aBuild.InvalidToolbarTypes = new[] { MyToolbarType.ButtonPanel }.ToList(); MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aBuild); IMyTerminalAction aBuild2 = MyAPIGateway.TerminalControls.CreateAction <IMyProjector>("BuildGrid"); aBuild2.Enabled = IsValid; aBuild2.Action = BuildClientUnsafe; // For only button panels aBuild2.ValidForGroups = true; aBuild2.Name = new StringBuilder("Spawn Grid"); aBuild2.Writer = (b, s) => s.Append("Spawn"); aBuild2.InvalidToolbarTypes = new List <MyToolbarType> { MyToolbarType.BuildCockpit, MyToolbarType.Character, MyToolbarType.LargeCockpit, MyToolbarType.None, MyToolbarType.Seat, MyToolbarType.Ship, MyToolbarType.SmallCockpit, MyToolbarType.Spectator }; MyAPIGateway.TerminalControls.AddAction <IMyProjector>(aBuild2); IMyTerminalControlListbox itemList = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlListbox, IMyProjector>("ComponentList"); itemList.Enabled = IsWorking; itemList.Visible = IsValid; itemList.ListContent = GetItemList; itemList.Multiselect = false; itemList.SupportsMultipleBlocks = false; itemList.Title = MyStringId.GetOrCompute("Components"); itemList.VisibleRowsCount = 10; itemList.ItemSelected = (b, l) => { }; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(itemList); IMyTerminalControlButton itemListInfo = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlButton, IMyProjector>("ComponentListInfo"); itemListInfo.Enabled = IsWorking; itemListInfo.Visible = IsValid; itemListInfo.SupportsMultipleBlocks = false; itemListInfo.Title = MyStringId.GetOrCompute("Check Inventory"); itemListInfo.Action = OpenItemList; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(itemListInfo); // Programmable Block stuff IMyTerminalControlProperty <Dictionary <MyItemType, int> > itemListProp = MyAPIGateway.TerminalControls.CreateProperty <Dictionary <MyItemType, int>, IMyProjector>("RequiredComponents"); itemListProp.Enabled = IsWorking; itemListProp.Visible = IsValid; itemListProp.SupportsMultipleBlocks = false; itemListProp.Setter = (b, l) => { }; itemListProp.Getter = GetItemListPB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(itemListProp); IMyTerminalControlProperty <int> gridTimeoutProp = MyAPIGateway.TerminalControls.CreateProperty <int, IMyProjector>("GridTimerProjection"); gridTimeoutProp.Enabled = IsWorking; gridTimeoutProp.Visible = IsValid; gridTimeoutProp.SupportsMultipleBlocks = false; gridTimeoutProp.Setter = (b, l) => { }; gridTimeoutProp.Getter = GetMaxTimerPB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(gridTimeoutProp); IMyTerminalControlProperty <int> gridTimeoutActive = MyAPIGateway.TerminalControls.CreateProperty <int, IMyProjector>("GridTimerCurrent"); gridTimeoutActive.Enabled = IsWorking; gridTimeoutActive.Visible = IsValid; gridTimeoutActive.SupportsMultipleBlocks = false; gridTimeoutActive.Setter = (b, l) => { }; gridTimeoutActive.Getter = GetCurrentTimerPB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(gridTimeoutActive); IMyTerminalControlProperty <int> buildState = MyAPIGateway.TerminalControls.CreateProperty <int, IMyProjector>("BuildState"); buildState.Enabled = IsWorking; buildState.Visible = IsValid; buildState.SupportsMultipleBlocks = false; buildState.Setter = (b, l) => { }; buildState.Getter = GetStatePB; MyAPIGateway.TerminalControls.AddControl <IMyProjector>(gridTimeoutActive); MyLog.Default.WriteLineAndConsole("Initialized Instant Projector."); controls = true; }
public static void InitLate() { initialized = true; turnLeftSwitch = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlOnOffSwitch, IMyTerminalBlock>("LeftJunction_TurnOnOff"); turnLeftSwitch.Title = MyStringId.GetOrCompute("Junction Direction"); turnLeftSwitch.Tooltip = MyStringId.GetOrCompute("Which way should a train go?"); turnLeftSwitch.Getter = b => (bool)SettingsStore.Get(b, "junction_turn", false); turnLeftSwitch.Setter = (b, v) => SettingsStore.Set(b, "junction_turn", v); turnLeftSwitch.OnText = MyStringId.GetOrCompute("Left"); turnLeftSwitch.OffText = MyStringId.GetOrCompute("Fwd"); turnLeftSwitch.Visible = BlockIsLeftJunction; MyAPIGateway.TerminalControls.AddControl <IMyTerminalBlock>(turnLeftSwitch); turnRightSwitch = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlOnOffSwitch, IMyTerminalBlock>("RightJunction_TurnOnOff"); turnRightSwitch.Title = MyStringId.GetOrCompute("Junction Direction"); turnRightSwitch.Tooltip = MyStringId.GetOrCompute("Which way should a train go?"); // meaning flipped relative to switch, so that we can // swap the labels and have [Fwd] [Right], which is more pleasing turnRightSwitch.Getter = b => !(bool)SettingsStore.Get(b, "junction_turn", false); turnRightSwitch.Setter = (b, v) => SettingsStore.Set(b, "junction_turn", !v); turnRightSwitch.OnText = MyStringId.GetOrCompute("Fwd"); turnRightSwitch.OffText = MyStringId.GetOrCompute("Right"); turnRightSwitch.Visible = BlockIsRightJunction; MyAPIGateway.TerminalControls.AddControl <IMyTerminalBlock>(turnRightSwitch); leftSwitchAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailLeftJunction_Switch"); leftSwitchAction.Name = new StringBuilder("Switch Direction"); leftSwitchAction.Writer = LeftJunctionText; leftSwitchAction.Action = JunctionSwitchAction; // TODO figure out why doesn't work leftSwitchAction.Icon = @"Textures\Icons\HoverRail\HoverRail_Junction_Left_10x-12x_OnOff.dds"; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(leftSwitchAction); leftSwitchLeftAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailLeftJunction_Left"); leftSwitchLeftAction.Name = new StringBuilder("Go Left"); leftSwitchLeftAction.Writer = LeftJunctionText; leftSwitchLeftAction.Action = JunctionSwitchSideAction; leftSwitchLeftAction.Icon = @"Textures\Icons\HoverRail\HoverRail_Junction_Left_10x-12x_On.dds"; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(leftSwitchLeftAction); leftSwitchStraightAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailLeftJunction_Straight"); leftSwitchStraightAction.Name = new StringBuilder("Go Fwd"); leftSwitchStraightAction.Writer = LeftJunctionText; leftSwitchStraightAction.Action = JunctionSwitchStraightAction; leftSwitchStraightAction.Icon = @"Textures\Icons\HoverRail\HoverRail_Junction_Left_10x-12x_Off.dds"; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(leftSwitchStraightAction); rightSwitchAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailRightJunction_Switch"); rightSwitchAction.Name = new StringBuilder("Switch Direction"); rightSwitchAction.Writer = RightJunctionText; rightSwitchAction.Action = JunctionSwitchAction; // rightSwitchAction.Icon = @"Textures\Icons\HoverRail\HoverRail_Junction_Right_10x-12x_OnOff.dds"; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(rightSwitchAction); rightSwitchStraightAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailRightJunction_Straight"); rightSwitchStraightAction.Name = new StringBuilder("Go Fwd"); rightSwitchStraightAction.Writer = RightJunctionText; rightSwitchStraightAction.Action = JunctionSwitchStraightAction; // rightSwitchStraightAction.Icon = @"Textures\Icons\HoverRail\HoverRail_Junction_Right_10x-12x_Off.dds"; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(rightSwitchStraightAction); rightSwitchRightAction = MyAPIGateway.TerminalControls.CreateAction <IMyTerminalBlock>("HoverRailRightJunction_Right"); rightSwitchRightAction.Name = new StringBuilder("Go Right"); rightSwitchRightAction.Writer = RightJunctionText; rightSwitchRightAction.Action = JunctionSwitchSideAction; // rightSwitchRightAction.Icon = @"Textures\Icons\HoverRail\HoverRail_Junction_Right_10x-12x_On.dds"; MyAPIGateway.TerminalControls.AddAction <IMyTerminalBlock>(rightSwitchRightAction); MyAPIGateway.TerminalControls.CustomActionGetter += GetSwitchActions; }