static ProgrammableBlock() { MyTerminalAction<MyProgrammableBlock> programmable_sendMessage = new MyTerminalAction<MyProgrammableBlock>("SendMessage", new StringBuilder("Send Message"), "Textures\\GUI\\Icons\\Actions\\Start.dds") { ValidForGroups = false, ActionWithParameters = ProgrammableBlock_SendMessage }; MyTerminalControlFactory.AddAction(programmable_sendMessage); MyTerminalControlFactory.AddControl(new MyTerminalControlSeparator<MyProgrammableBlock>()); Static.handleDetected = new MyTerminalControlOnOffSwitch<MyProgrammableBlock>("HandleDetected", MyStringId.GetOrCompute("Handle Detected")); IMyTerminalValueControl<bool> valueControl = Static.handleDetected as IMyTerminalValueControl<bool>; valueControl.Getter = GetHandleDetectedTerminal; valueControl.Setter = SetHandleDetectedTerminal; MyTerminalControlFactory.AddControl(Static.handleDetected); Static.blockCountList = new MyTerminalControlTextbox<MyProgrammableBlock>("BlockCounts", MyStringId.GetOrCompute("Blocks to Count"), MyStringId.GetOrCompute("Comma separate list of blocks to count")); Static.blockCountList.Visible = block => ((ITerminalProperty<bool>)((IMyTerminalBlock)block).GetProperty("HandleDetected")).GetValue(block); IMyTerminalControlTextbox asInterface = Static.blockCountList as IMyTerminalControlTextbox; asInterface.Getter = GetBlockCountList; asInterface.Setter = SetBlockCountList; MyTerminalControlFactory.AddControl(Static.blockCountList); MyAPIGateway.Entities.OnCloseAll += Entities_OnCloseAll; }
public StaticVariables() { Logger.DebugLog("entered", Logger.severity.TRACE); TerminalControlHelper.EnsureTerminalControlCreated <MyProgrammableBlock>(); MyTerminalAction <MyProgrammableBlock> programmable_sendMessage = new MyTerminalAction <MyProgrammableBlock>("SendMessage", new StringBuilder("Send Message"), "Textures\\GUI\\Icons\\Actions\\Start.dds") { ValidForGroups = false, ActionWithParameters = ProgrammableBlock_SendMessage }; programmable_sendMessage.ParameterDefinitions.Add(Ingame.TerminalActionParameter.Get(string.Empty)); programmable_sendMessage.ParameterDefinitions.Add(Ingame.TerminalActionParameter.Get(string.Empty)); programmable_sendMessage.ParameterDefinitions.Add(Ingame.TerminalActionParameter.Get(string.Empty)); MyTerminalControlFactory.AddAction(programmable_sendMessage); MyTerminalControlFactory.AddControl(new MyTerminalControlSeparator <MyProgrammableBlock>()); handleDetected = new MyTerminalControlOnOffSwitch <MyProgrammableBlock>("HandleDetected", MyStringId.GetOrCompute("Handle Detected")); new ValueSync <bool, ProgrammableBlock>(handleDetected, (prog) => prog.value_handleDetectedTerminal, (prog, value) => prog.value_handleDetectedTerminal = value); MyTerminalControlFactory.AddControl(handleDetected); blockCountList = new MyTerminalControlTextbox <MyProgrammableBlock>("BlockCounts", MyStringId.GetOrCompute("Blocks to Count"), MyStringId.GetOrCompute("Comma separated list of blocks to count")); new StringBuilderSync <ProgrammableBlock>(blockCountList, (prog) => prog.value_blockCountList, (prog, value) => { prog.value_blockCountList = value; prog.m_blockCountList_btl = new BlockTypeList(prog.m_blockCountList_sb.ToString().LowerRemoveWhitespace().Split(',')); }); MyTerminalControlFactory.AddControl(blockCountList); }
static MyProgrammableBlock() { var console = new MyTerminalControlButton <MyProgrammableBlock>("Edit", MySpaceTexts.TerminalControlPanel_EditCode, MySpaceTexts.TerminalControlPanel_EditCode_Tooltip, (b) => b.SyncObject.SendOpenEditorRequest(Sync.MyId)); console.Visible = (b) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; MyTerminalControlFactory.AddControl(console); var arg = new MyTerminalControlTextbox <MyProgrammableBlock>("ConsoleCommand", MySpaceTexts.TerminalControlPanel_RunArgument, MySpaceTexts.TerminalControlPanel_RunArgument_ToolTip); arg.Visible = (e) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; arg.Getter = (e) => new StringBuilder(e.TerminalRunArgument); arg.Setter = (e, v) => e.TerminalRunArgument = v.ToString(); MyTerminalControlFactory.AddControl(arg); var terminalRun = new MyTerminalControlButton <MyProgrammableBlock>("TerminalRun", MySpaceTexts.TerminalControlPanel_RunCode, MySpaceTexts.TerminalControlPanel_RunCode_Tooltip, (b) => b.Run()); terminalRun.Visible = (b) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; terminalRun.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddControl(terminalRun); var runAction = new MyTerminalAction <MyProgrammableBlock>("Run", MyTexts.Get(MySpaceTexts.TerminalControlPanel_RunCode), OnRunApplied, null, MyTerminalActionIcons.START); runAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; runAction.DoUserParameterRequest = RequestRunArgument; runAction.ParameterDefinitions.Add(TerminalActionParameter.Get(string.Empty)); MyTerminalControlFactory.AddAction(runAction); }
static void CreateTerminalControls() { if (MyTerminalControlFactory.AreControlsCreated <MyPistonBase>()) { return; } var reverse = new MyTerminalControlButton <MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.Velocity.Value = -x.Velocity); reverse.EnableAction(MyTerminalActionIcons.REVERSE); MyTerminalControlFactory.AddControl(reverse); var extendAction = new MyTerminalAction <MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE); extendAction.Enabled = (b) => b.IsFunctional == true; MyTerminalControlFactory.AddAction(extendAction); var retractAction = new MyTerminalAction <MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE); retractAction.Enabled = (b) => b.IsFunctional == true; MyTerminalControlFactory.AddAction(retractAction); var velocity = new MyTerminalControlSlider <MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank); velocity.SetLimits((block) => - block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity); velocity.DefaultValue = -0.5f; velocity.Getter = (x) => x.Velocity; velocity.Setter = (x, v) => x.Velocity.Value = v; velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s"); velocity.EnableActionsWithReset(); MyTerminalControlFactory.AddControl(velocity); var maxDist = new MyTerminalControlSlider <MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank); maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum; maxDist.Getter = (x) => x.MaxLimit; maxDist.Setter = (x, v) => x.MaxLimit.Value = v; maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m"); maxDist.EnableActions(); MyTerminalControlFactory.AddControl(maxDist); var minDist = new MyTerminalControlSlider <MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank); minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum; minDist.Getter = (x) => x.MinLimit; minDist.Setter = (x, v) => x.MinLimit.Value = v; minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m"); minDist.EnableActions(); MyTerminalControlFactory.AddControl(minDist); var addPistonHead = new MyTerminalControlButton <MyPistonBase>("Add Piston Head", MySpaceTexts.BlockActionTitle_AddPistonHead, MySpaceTexts.BlockActionTooltip_AddPistonHead, (b) => b.RecreateTop()); addPistonHead.Enabled = (b) => (b.m_topBlock == null); addPistonHead.EnableAction(MyTerminalActionIcons.STATION_ON); MyTerminalControlFactory.AddControl(addPistonHead); }
protected override void CreateTerminalControls() { if (MyTerminalControlFactory.AreControlsCreated <MyLandingGear>()) { return; } base.CreateTerminalControls(); var stateWriter = new MyTerminalControl <MyLandingGear> .WriterDelegate((b, sb) => b.WriteLockStateValue(sb)); var lockBtn = new MyTerminalControlButton <MyLandingGear>("Lock", MySpaceTexts.BlockActionTitle_Lock, MySpaceTexts.Blank, (b) => b.RequestLandingGearLock()); lockBtn.Enabled = (b) => b.IsWorking; lockBtn.EnableAction(MyTerminalActionIcons.TOGGLE, (MyStringId?)null, stateWriter); MyTerminalControlFactory.AddControl(lockBtn); var unlockBtn = new MyTerminalControlButton <MyLandingGear>("Unlock", MySpaceTexts.BlockActionTitle_Unlock, MySpaceTexts.Blank, (b) => b.RequestLandingGearUnlock()); unlockBtn.Enabled = (b) => b.IsWorking; unlockBtn.EnableAction(MyTerminalActionIcons.TOGGLE, (MyStringId?)null, stateWriter); MyTerminalControlFactory.AddControl(unlockBtn); var title = MyTexts.Get(MySpaceTexts.BlockActionTitle_SwitchLock); MyTerminalAction <MyLandingGear> switchLockAction = new MyTerminalAction <MyLandingGear>("SwitchLock", title, MyTerminalActionIcons.TOGGLE); switchLockAction.Action = (b) => b.RequestLandingGearSwitch(); switchLockAction.Writer = stateWriter; MyTerminalControlFactory.AddAction(switchLockAction); var autoLock = new MyTerminalControlCheckbox <MyLandingGear>("Autolock", MySpaceTexts.BlockPropertyTitle_LandGearAutoLock, MySpaceTexts.Blank); autoLock.Getter = (b) => b.m_autoLock; autoLock.Setter = (b, v) => b.m_autoLock.Value = v; autoLock.EnableAction(); MyTerminalControlFactory.AddControl(autoLock); if (MyFakes.LANDING_GEAR_BREAKABLE) { var brakeForce = new MyTerminalControlSlider <MyLandingGear>("BreakForce", MySpaceTexts.BlockPropertyTitle_BreakForce, MySpaceTexts.BlockPropertyDescription_BreakForce); brakeForce.Getter = (x) => x.BreakForce; brakeForce.Setter = (x, v) => x.m_breakForceSync.Value = v; brakeForce.DefaultValue = 1; brakeForce.Writer = (x, result) => { if (x.BreakForce >= MyObjectBuilder_LandingGear.MaxSolverImpulse) { result.AppendStringBuilder(MyTexts.Get(MySpaceTexts.BlockPropertyValue_MotorAngleUnlimited)); } else { MyValueFormatter.AppendForceInBestUnit(x.BreakForce, result); } }; brakeForce.Normalizer = (b, v) => ThresholdToRatio(v); brakeForce.Denormalizer = (b, v) => RatioToThreshold(v); brakeForce.EnableActions(); MyTerminalControlFactory.AddControl(brakeForce); } }
private static void AddAction(MyTerminalAction <MyShipController> action) { action.Enabled = ShipAutopilot.IsAutopilotBlock; MyTerminalControlFactory.AddAction <MyShipController, MyCockpit>(action); if (ServerSettings.GetSetting <bool>(ServerSettings.SettingName.bUseRemoteControl)) { MyTerminalControlFactory.AddAction <MyShipController, MyRemoteControl>(action); } }
static MyPistonBase() { var reverse = new MyTerminalControlButton <MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.SyncObject.SetVelocity(-x.Velocity)); reverse.EnableAction(MyTerminalActionIcons.REVERSE); MyTerminalControlFactory.AddControl(reverse); var extendAction = new MyTerminalAction <MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE); extendAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(extendAction); var retractAction = new MyTerminalAction <MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE); retractAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(retractAction); var velocity = new MyTerminalControlSlider <MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank); velocity.SetLimits((block) => - block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity); velocity.DefaultValue = -0.5f; velocity.Getter = (x) => x.Velocity; velocity.Setter = (x, v) => x.SyncObject.SetVelocity(v); velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s"); velocity.EnableActionsWithReset(); MyTerminalControlFactory.AddControl(velocity); var maxDist = new MyTerminalControlSlider <MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank); maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum; maxDist.Getter = (x) => x.MaxLimit; maxDist.Setter = (x, v) => x.SyncObject.SetMax(v); maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m"); maxDist.EnableActions(); MyTerminalControlFactory.AddControl(maxDist); var minDist = new MyTerminalControlSlider <MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank); minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum; minDist.Getter = (x) => x.MinLimit; minDist.Setter = (x, v) => x.SyncObject.SetMin(v); minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m"); minDist.EnableActions(); MyTerminalControlFactory.AddControl(minDist); }
public static void JumpSelectAction() { MyTerminalAction <MyJumpDrive> myTerminalAction = new MyTerminalAction <MyJumpDrive>("JumpSelect", new StringBuilder("Jump Select"), MyTerminalActionIcons.STATION_ON); myTerminalAction.Action = new Action <MyJumpDrive>(ShowJumpSelector); myTerminalAction.Writer = delegate(MyJumpDrive block, StringBuilder builder) { builder.Append("Jump Select"); }; myTerminalAction.ValidForGroups = false; myTerminalAction.InvalidToolbarTypes = new List <MyToolbarType> { MyToolbarType.Character, MyToolbarType.Seat }; MyTerminalControlFactory.AddAction <MyJumpDrive>(myTerminalAction); }
protected override void CreateTerminalControls() { if (MyTerminalControlFactory.AreControlsCreated <MyProgrammableBlock>()) { return; } base.CreateTerminalControls(); var console = new MyTerminalControlButton <MyProgrammableBlock>("Edit", MySpaceTexts.TerminalControlPanel_EditCode, MySpaceTexts.TerminalControlPanel_EditCode_Tooltip, (b) => b.SendOpenEditorRequest()); console.Visible = (b) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; console.Enabled = (b) => MySession.Static.IsScripter; MyTerminalControlFactory.AddControl(console); var arg = new MyTerminalControlTextbox <MyProgrammableBlock>("ConsoleCommand", MySpaceTexts.TerminalControlPanel_RunArgument, MySpaceTexts.TerminalControlPanel_RunArgument_ToolTip); arg.Visible = (e) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; arg.Getter = (e) => new StringBuilder(e.TerminalRunArgument); arg.Setter = (e, v) => e.TerminalRunArgument = v.ToString(); MyTerminalControlFactory.AddControl(arg); var terminalRun = new MyTerminalControlButton <MyProgrammableBlock>("TerminalRun", MySpaceTexts.TerminalControlPanel_RunCode, MySpaceTexts.TerminalControlPanel_RunCode_Tooltip, (b) => b.Run()); terminalRun.Visible = (b) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; terminalRun.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddControl(terminalRun); var recompile = new MyTerminalControlButton <MyProgrammableBlock>("Recompile", MySpaceTexts.TerminalControlPanel_Recompile, MySpaceTexts.TerminalControlPanel_Recompile_Tooltip, (b) => b.Recompile()); recompile.Visible = (b) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; recompile.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddControl(recompile); var runAction = new MyTerminalAction <MyProgrammableBlock>("Run", MyTexts.Get(MySpaceTexts.TerminalControlPanel_RunCode), OnRunApplied, null, MyTerminalActionIcons.START); runAction.Enabled = (b) => b.IsFunctional == true; runAction.DoUserParameterRequest = RequestRunArgument; runAction.ParameterDefinitions.Add(TerminalActionParameter.Get(string.Empty)); MyTerminalControlFactory.AddAction(runAction); var runwithDefault = new MyTerminalAction <MyProgrammableBlock>("RunWithDefaultArgument", MyTexts.Get(MySpaceTexts.TerminalControlPanel_RunCodeDefault), OnRunDefaultApplied, MyTerminalActionIcons.START); runwithDefault.Enabled = (b) => b.IsFunctional == true; MyTerminalControlFactory.AddAction(runwithDefault); }
private static void CreateTerminal() { Logger.DebugLog("entered", Logger.severity.TRACE); TerminalControlHelper.EnsureTerminalControlCreated <MyTextPanel>(); MyTerminalAction <MyTextPanel> textPanel_displayEntities = new MyTerminalAction <MyTextPanel>("DisplayEntities", new StringBuilder("Display Entities"), "Textures\\GUI\\Icons\\Actions\\Start.dds") { ValidForGroups = false, ActionWithParameters = TextPanel_DisplayEntities }; MyTerminalControlFactory.AddAction(textPanel_displayEntities); MyTerminalControlFactory.AddControl(new MyTerminalControlSeparator <MyTextPanel>()); AddCheckbox("DisplayDetected", "Display Detected", "Write detected entities to the public text of the panel", Option.DisplayDetected); AddCheckbox("DisplayGPS", "Display GPS", "Write gps with detected entities", Option.GPS); AddCheckbox("DisplayEntityId", "Display Entity ID", "Write entity ID with detected entities", Option.EntityId); AddCheckbox("DisplayAutopilotStatus", "Display Autopilot Status", "Write the status of nearby Autopilots to the public text of the panel", Option.AutopilotStatus); }
static void CreateTerminalControls() { if (MyTerminalControlFactory.AreControlsCreated<MyPistonBase>()) return; var reverse = new MyTerminalControlButton<MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.Velocity.Value = -x.Velocity); reverse.EnableAction(MyTerminalActionIcons.REVERSE); MyTerminalControlFactory.AddControl(reverse); var extendAction = new MyTerminalAction<MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE); extendAction.Enabled = (b) => b.IsFunctional == true; MyTerminalControlFactory.AddAction(extendAction); var retractAction = new MyTerminalAction<MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE); retractAction.Enabled = (b) => b.IsFunctional == true; MyTerminalControlFactory.AddAction(retractAction); var velocity = new MyTerminalControlSlider<MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank); velocity.SetLimits((block) => -block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity); velocity.DefaultValue = -0.5f; velocity.Getter = (x) => x.Velocity; velocity.Setter = (x, v) => x.Velocity.Value = v; velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s"); velocity.EnableActionsWithReset(); MyTerminalControlFactory.AddControl(velocity); var maxDist = new MyTerminalControlSlider<MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank); maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum; maxDist.Getter = (x) => x.MaxLimit; maxDist.Setter = (x, v) => x.MaxLimit.Value = v; maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m"); maxDist.EnableActions(); MyTerminalControlFactory.AddControl(maxDist); var minDist = new MyTerminalControlSlider<MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank); minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum; minDist.Getter = (x) => x.MinLimit; minDist.Setter = (x, v) => x.MinLimit.Value = v; minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m"); minDist.EnableActions(); MyTerminalControlFactory.AddControl(minDist); var addPistonHead = new MyTerminalControlButton<MyPistonBase>("Add Piston Head", MySpaceTexts.BlockActionTitle_AddPistonHead, MySpaceTexts.BlockActionTooltip_AddPistonHead, (b) => b.RecreateTop()); addPistonHead.Enabled = (b) => (b.m_topBlock == null); addPistonHead.EnableAction(MyTerminalActionIcons.STATION_ON); MyTerminalControlFactory.AddControl(addPistonHead); }
static MyShipConnector() { var stateWriter = new MyTerminalControl<MyShipConnector>.WriterDelegate((b, sb) => b.WriteLockStateValue(sb)); var throwOut = new MyTerminalControlOnOffSwitch<MyShipConnector>("ThrowOut", MySpaceTexts.Terminal_ThrowOut); throwOut.Getter = (block) => block.ThrowOut; throwOut.Setter = (block, value) => MySyncShipConnector.SendChangePropertyMessage(value, block, MySyncShipConnector.Properties.ThrowOut); throwOut.EnableToggleAction(); MyTerminalControlFactory.AddControl(throwOut); var collectAll = new MyTerminalControlOnOffSwitch<MyShipConnector>("CollectAll", MySpaceTexts.Terminal_CollectAll); collectAll.Getter = (block) => block.CollectAll; collectAll.Setter = (block, value) => MySyncShipConnector.SendChangePropertyMessage(value, block, MySyncShipConnector.Properties.CollectAll); collectAll.EnableToggleAction(); MyTerminalControlFactory.AddControl(collectAll); var lockBtn = new MyTerminalControlButton<MyShipConnector>("Lock", MySpaceTexts.BlockActionTitle_Lock, MySpaceTexts.Blank, (b) => b.TryConnect()); lockBtn.Enabled = (b) => b.IsWorking && b.InConstraint; lockBtn.Visible = (b) => b.m_connectorMode == Mode.Connector; MyTerminalControlFactory.AddControl(lockBtn); var unlockBtn = new MyTerminalControlButton<MyShipConnector>("Unlock", MySpaceTexts.BlockActionTitle_Unlock, MySpaceTexts.Blank, (b) => b.TryDisconnect()); unlockBtn.Enabled = (b) => b.IsWorking && b.InConstraint; unlockBtn.Visible = (b) => b.m_connectorMode == Mode.Connector; MyTerminalControlFactory.AddControl(unlockBtn); var title = MyTexts.Get(MySpaceTexts.BlockActionTitle_SwitchLock); MyTerminalAction<MyShipConnector> switchLockAction = new MyTerminalAction<MyShipConnector>("SwitchLock", title, MyTerminalActionIcons.TOGGLE); switchLockAction.Action = (b) => b.TrySwitch(); switchLockAction.Writer = stateWriter; switchLockAction.Enabled = (b) => b.m_connectorMode == Mode.Connector; MyTerminalControlFactory.AddAction(switchLockAction); }
static void CreateTerminalControls() { if (MyTerminalControlFactory.AreControlsCreated<MyShipConnector>()) return; var throwOut = new MyTerminalControlOnOffSwitch<MyShipConnector>("ThrowOut", MySpaceTexts.Terminal_ThrowOut); throwOut.Getter = (block) => block.ThrowOut; throwOut.Setter = (block, value) => block.ThrowOut.Value = value; throwOut.EnableToggleAction(); MyTerminalControlFactory.AddControl(throwOut); var collectAll = new MyTerminalControlOnOffSwitch<MyShipConnector>("CollectAll", MySpaceTexts.Terminal_CollectAll); collectAll.Getter = (block) => block.CollectAll; collectAll.Setter = (block, value) => block.CollectAll.Value = value; collectAll.EnableToggleAction(); MyTerminalControlFactory.AddControl(collectAll); var lockBtn = new MyTerminalControlButton<MyShipConnector>("Lock", MySpaceTexts.BlockActionTitle_Lock, MySpaceTexts.Blank, (b) => b.TryConnect()); lockBtn.Enabled = (b) => b.IsWorking && b.InConstraint; lockBtn.Visible = (b) => b.m_connectorMode == Mode.Connector; var actionLock = lockBtn.EnableAction(); actionLock.Enabled = (b) => b.m_connectorMode == Mode.Connector; MyTerminalControlFactory.AddControl(lockBtn); var unlockBtn = new MyTerminalControlButton<MyShipConnector>("Unlock", MySpaceTexts.BlockActionTitle_Unlock, MySpaceTexts.Blank, (b) => b.TryDisconnect()); unlockBtn.Enabled = (b) => b.IsWorking && b.InConstraint; unlockBtn.Visible = (b) => b.m_connectorMode == Mode.Connector; var actionUnlock = unlockBtn.EnableAction(); actionUnlock.Enabled = (b) => b.m_connectorMode == Mode.Connector; MyTerminalControlFactory.AddControl(unlockBtn); var title = MyTexts.Get(MySpaceTexts.BlockActionTitle_SwitchLock); MyTerminalAction<MyShipConnector> switchLockAction = new MyTerminalAction<MyShipConnector>("SwitchLock", title, MyTerminalActionIcons.TOGGLE); switchLockAction.Action = (b) => b.TrySwitch(); switchLockAction.Writer = (b, sb) => b.WriteLockStateValue(sb); switchLockAction.Enabled = (b) => b.m_connectorMode == Mode.Connector; MyTerminalControlFactory.AddAction(switchLockAction); var strength = new MyTerminalControlSlider<MyShipConnector>("Strength", MySpaceTexts.BlockPropertyTitle_Connector_Strength, MySpaceTexts.BlockPropertyDescription_Connector_Strength); strength.Getter = (x) => x.Strength; strength.Setter = (x, v) => x.Strength.Value = v; strength.DefaultValue = MyObjectBuilder_ShipConnector.DefaultStrength; strength.SetLogLimits(MinStrength, 1.0f); strength.EnableActions(enabled: (b) => b.m_connectorMode == Mode.Connector); strength.Enabled = (b) => b.m_connectorMode == Mode.Connector; strength.Visible = (b) => b.m_connectorMode == Mode.Connector; strength.Writer = (x, result) => { if (x.Strength <= MinStrength) result.Append(MyTexts.Get(MyCommonTexts.Disabled)); else result.AppendFormatedDecimal("", x.Strength * 100, 4, " %"); }; MyTerminalControlFactory.AddControl(strength); }
static MyLandingGear() { var stateWriter = new MyTerminalControl<MyLandingGear>.WriterDelegate((b, sb) => b.WriteLockStateValue(sb)); var lockBtn = new MyTerminalControlButton<MyLandingGear>("Lock", MySpaceTexts.BlockActionTitle_Lock, MySpaceTexts.Blank, (b) => b.RequestLandingGearLock()); lockBtn.Enabled = (b) => b.IsWorking; lockBtn.EnableAction(MyTerminalActionIcons.TOGGLE, (MyStringId?)null, stateWriter); MyTerminalControlFactory.AddControl(lockBtn); var unlockBtn = new MyTerminalControlButton<MyLandingGear>("Unlock", MySpaceTexts.BlockActionTitle_Unlock, MySpaceTexts.Blank, (b) => b.RequestLandingGearUnlock()); unlockBtn.Enabled = (b) => b.IsWorking; unlockBtn.EnableAction(MyTerminalActionIcons.TOGGLE, (MyStringId?)null, stateWriter); MyTerminalControlFactory.AddControl(unlockBtn); var title = MyTexts.Get(MySpaceTexts.BlockActionTitle_SwitchLock); MyTerminalAction<MyLandingGear> switchLockAction = new MyTerminalAction<MyLandingGear>("SwitchLock", title, MyTerminalActionIcons.TOGGLE); switchLockAction.Action = (b) => b.RequestLandingGearSwitch(); switchLockAction.Writer = stateWriter; MyTerminalControlFactory.AddAction(switchLockAction); var autoLock = new MyTerminalControlCheckbox<MyLandingGear>("Autolock", MySpaceTexts.BlockPropertyTitle_LandGearAutoLock, MySpaceTexts.Blank); autoLock.Getter = (b) => b.m_autoLock; autoLock.Setter = (b, v) => b.SyncObject.SendAutoLockChange(v); autoLock.EnableAction(); MyTerminalControlFactory.AddControl(autoLock); if (MyFakes.LANDING_GEAR_BREAKABLE) { var brakeForce = new MyTerminalControlSlider<MyLandingGear>("BreakForce", MySpaceTexts.BlockPropertyTitle_BreakForce, MySpaceTexts.BlockPropertyDescription_BreakForce); brakeForce.Getter = (x) => x.BreakForce; brakeForce.Setter = (x, v) => x.SyncObject.SendBrakeForceChange(v); brakeForce.DefaultValue = 1; brakeForce.Writer = (x, result) => { if (x.BreakForce >= MaxSolverImpulse) result.AppendStringBuilder(MyTexts.Get(MySpaceTexts.BlockPropertyValue_MotorAngleUnlimited)); else MyValueFormatter.AppendForceInBestUnit(x.BreakForce, result); }; brakeForce.Normalizer = (b, v) => ThresholdToRatio(v); brakeForce.Denormalizer = (b, v) => RatioToThreshold(v); brakeForce.EnableActions(); MyTerminalControlFactory.AddControl(brakeForce); } }
static MyPistonBase() { var reverse = new MyTerminalControlButton<MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.SyncObject.SetVelocity(-x.Velocity)); reverse.EnableAction(MyTerminalActionIcons.REVERSE); MyTerminalControlFactory.AddControl(reverse); var extendAction = new MyTerminalAction<MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE); extendAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(extendAction); var retractAction = new MyTerminalAction<MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE); retractAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(retractAction); var velocity = new MyTerminalControlSlider<MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank); velocity.SetLimits((block) => -block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity); velocity.DefaultValue = -0.5f; velocity.Getter = (x) => x.Velocity; velocity.Setter = (x, v) => x.SyncObject.SetVelocity(v); velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s"); velocity.EnableActionsWithReset(); MyTerminalControlFactory.AddControl(velocity); var maxDist = new MyTerminalControlSlider<MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank); maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum; maxDist.Getter = (x) => x.MaxLimit; maxDist.Setter = (x, v) => x.SyncObject.SetMax(v); maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m"); maxDist.EnableActions(); MyTerminalControlFactory.AddControl(maxDist); var minDist = new MyTerminalControlSlider<MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank); minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum; minDist.Getter = (x) => x.MinLimit; minDist.Setter = (x, v) => x.SyncObject.SetMin(v); minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m"); minDist.EnableActions(); MyTerminalControlFactory.AddControl(minDist); }
static MyRemoteControl() { var controlBtn = new MyTerminalControlButton<MyRemoteControl>("Control", MySpaceTexts.ControlRemote, MySpaceTexts.Blank, (b) => b.RequestControl()); controlBtn.Enabled = r => r.CanControl(); controlBtn.SupportsMultipleBlocks = false; var action = controlBtn.EnableAction(MyTerminalActionIcons.TOGGLE); if (action != null) { action.InvalidToolbarTypes = new List<MyToolbarType> { MyToolbarType.ButtonPanel }; action.ValidForGroups = false; } MyTerminalControlFactory.AddControl(controlBtn); var autoPilotSeparator = new MyTerminalControlSeparator<MyRemoteControl>(); MyTerminalControlFactory.AddControl(autoPilotSeparator); var autoPilot = new MyTerminalControlOnOffSwitch<MyRemoteControl>("AutoPilot", MySpaceTexts.BlockPropertyTitle_AutoPilot, MySpaceTexts.Blank); autoPilot.Getter = (x) => x.m_autoPilotEnabled; autoPilot.Setter = (x, v) => x.SetAutoPilotEnabled(v); autoPilot.Enabled = r => r.CanEnableAutoPilot(); autoPilot.EnableToggleAction(); autoPilot.EnableOnOffActions(); MyTerminalControlFactory.AddControl(autoPilot); var dockignMode = new MyTerminalControlOnOffSwitch<MyRemoteControl>("DockingMode", MySpaceTexts.BlockPropertyTitle_EnableDockingMode, MySpaceTexts.Blank); dockignMode.Getter = (x) => x.m_dockingModeEnabled; dockignMode.Setter = (x, v) => x.SetDockingMode(v); dockignMode.Enabled = r => r.IsWorking; dockignMode.EnableToggleAction(); dockignMode.EnableOnOffActions(); MyTerminalControlFactory.AddControl(dockignMode); var flightMode = new MyTerminalControlCombobox<MyRemoteControl>("FlightMode", MySpaceTexts.BlockPropertyTitle_FlightMode, MySpaceTexts.Blank); flightMode.ComboBoxContent = (x) => FillFlightModeCombo(x); flightMode.Getter = (x) => (long)x.m_currentFlightMode; flightMode.Setter = (x, v) => x.ChangeFlightMode((FlightMode)v); MyTerminalControlFactory.AddControl(flightMode); var directionCombo = new MyTerminalControlCombobox<MyRemoteControl>("Direction", MySpaceTexts.BlockPropertyTitle_ForwardDirection, MySpaceTexts.Blank); directionCombo.ComboBoxContent = (x) => FillDirectionCombo(x); directionCombo.Getter = (x) => (long)x.m_currentDirection; directionCombo.Setter = (x, v) => x.ChangeDirection((Base6Directions.Direction)v); MyTerminalControlFactory.AddControl(directionCombo); var waypointList = new MyTerminalControlListbox<MyRemoteControl>("WaypointList", MySpaceTexts.BlockPropertyTitle_Waypoints, MySpaceTexts.Blank, true); waypointList.ListContent = (x, list1, list2) => x.FillWaypointList(list1, list2); waypointList.ItemSelected = (x, y) => x.SelectWaypoint(y); if (!MySandboxGame.IsDedicated) { m_waypointGuiControl = (MyGuiControlListbox)((MyGuiControlBlockProperty)waypointList.GetGuiControl()).PropertyControl; } MyTerminalControlFactory.AddControl(waypointList); var toolbarButton = new MyTerminalControlButton<MyRemoteControl>("Open Toolbar", MySpaceTexts.BlockPropertyTitle_AutoPilotToolbarOpen, MySpaceTexts.BlockPropertyPopup_AutoPilotToolbarOpen, delegate(MyRemoteControl self) { var actions = self.m_selectedWaypoints[0].Actions; if (actions != null) { for (int i = 0; i < actions.Length; i++) { if (actions[i] != null) { self.m_actionToolbar.SetItemAtIndex(i, actions[i]); } } } self.m_actionToolbar.ItemChanged += self.Toolbar_ItemChanged; if (MyGuiScreenCubeBuilder.Static == null) { MyToolbarComponent.CurrentToolbar = self.m_actionToolbar; MyGuiScreenBase screen = MyGuiSandbox.CreateScreen(MyPerGameSettings.GUI.ToolbarConfigScreen, 0, self); MyToolbarComponent.AutoUpdate = false; screen.Closed += (source) => { MyToolbarComponent.AutoUpdate = true; self.m_actionToolbar.ItemChanged -= self.Toolbar_ItemChanged; self.m_actionToolbar.Clear(); }; MyGuiSandbox.AddScreen(screen); } }); toolbarButton.Enabled = r => r.m_selectedWaypoints.Count == 1; toolbarButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(toolbarButton); var removeBtn = new MyTerminalControlButton<MyRemoteControl>("RemoveWaypoint", MySpaceTexts.BlockActionTitle_RemoveWaypoint, MySpaceTexts.Blank, (b) => b.RemoveWaypoints()); removeBtn.Enabled = r => r.CanRemoveWaypoints(); removeBtn.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(removeBtn); var moveUp = new MyTerminalControlButton<MyRemoteControl>("MoveUp", MySpaceTexts.BlockActionTitle_MoveWaypointUp, MySpaceTexts.Blank, (b) => b.MoveWaypointsUp()); moveUp.Enabled = r => r.CanMoveWaypointsUp(); moveUp.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(moveUp); var moveDown = new MyTerminalControlButton<MyRemoteControl>("MoveDown", MySpaceTexts.BlockActionTitle_MoveWaypointDown, MySpaceTexts.Blank, (b) => b.MoveWaypointsDown()); moveDown.Enabled = r => r.CanMoveWaypointsDown(); moveDown.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(moveDown); var addButton = new MyTerminalControlButton<MyRemoteControl>("AddWaypoint", MySpaceTexts.BlockActionTitle_AddWaypoint, MySpaceTexts.Blank, (b) => b.AddWaypoints()); addButton.Enabled = r => r.CanAddWaypoints(); addButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(addButton); var gpsList = new MyTerminalControlListbox<MyRemoteControl>("GpsList", MySpaceTexts.BlockPropertyTitle_GpsLocations, MySpaceTexts.Blank, true); gpsList.ListContent = (x, list1, list2) => x.FillGpsList(list1, list2); gpsList.ItemSelected = (x, y) => x.SelectGps(y); if (!MySandboxGame.IsDedicated) { m_gpsGuiControl = (MyGuiControlListbox)((MyGuiControlBlockProperty)gpsList.GetGuiControl()).PropertyControl; } MyTerminalControlFactory.AddControl(gpsList); foreach (var direction in m_directionNames) { var setDirectionAction = new MyTerminalAction<MyRemoteControl>(MyTexts.Get(direction.Value).ToString(), MyTexts.Get(direction.Value), OnAction, null, MyTerminalActionIcons.TOGGLE); setDirectionAction.Enabled = (b) => b.IsWorking; setDirectionAction.ParameterDefinitions.Add(TerminalActionParameter.Get((byte)direction.Key)); MyTerminalControlFactory.AddAction(setDirectionAction); } var resetButton = new MyTerminalControlButton<MyRemoteControl>("Reset", MySpaceTexts.BlockActionTitle_WaypointReset, MySpaceTexts.BlockActionTooltip_WaypointReset, (b) => b.ResetWaypoint()); resetButton.Enabled = r => r.IsWorking; resetButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(resetButton); var copyButton = new MyTerminalControlButton<MyRemoteControl>("Copy", MySpaceTexts.BlockActionTitle_RemoteCopy, MySpaceTexts.Blank, (b) => b.CopyAutopilotSetup()); copyButton.Enabled = r => r.IsWorking; copyButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(copyButton); var pasteButton = new MyTerminalControlButton<MyRemoteControl>("Paste", MySpaceTexts.BlockActionTitle_RemotePaste, MySpaceTexts.Blank, (b) => b.PasteAutopilotSetup()); pasteButton.Enabled = r => r.IsWorking && MyRemoteControl.m_clipboard != null; pasteButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(pasteButton); }
static MyProgrammableBlock() { var console = new MyTerminalControlButton<MyProgrammableBlock>("Edit", MySpaceTexts.TerminalControlPanel_EditCode, MySpaceTexts.TerminalControlPanel_EditCode_Tooltip, (b) => b.SyncObject.SendOpenEditorRequest(Sync.MyId)); console.Visible = (b) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; MyTerminalControlFactory.AddControl(console); var arg = new MyTerminalControlTextbox<MyProgrammableBlock>("ConsoleCommand", MySpaceTexts.TerminalControlPanel_RunArgument, MySpaceTexts.TerminalControlPanel_RunArgument_ToolTip); arg.Visible = (e) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; arg.Getter = (e) => new StringBuilder(e.TerminalRunArgument); arg.Setter = (e, v) => e.TerminalRunArgument = v.ToString(); MyTerminalControlFactory.AddControl(arg); var terminalRun = new MyTerminalControlButton<MyProgrammableBlock>("TerminalRun", MySpaceTexts.TerminalControlPanel_RunCode, MySpaceTexts.TerminalControlPanel_RunCode_Tooltip, (b) => b.Run()); terminalRun.Visible = (b) => MyFakes.ENABLE_PROGRAMMABLE_BLOCK && MySession.Static.EnableIngameScripts; terminalRun.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddControl(terminalRun); var runAction = new MyTerminalAction<MyProgrammableBlock>("Run", MyTexts.Get(MySpaceTexts.TerminalControlPanel_RunCode), OnRunApplied, null, MyTerminalActionIcons.START); runAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; runAction.DoUserParameterRequest = RequestRunArgument; runAction.ParameterDefinitions.Add(TerminalActionParameter.Get(string.Empty)); MyTerminalControlFactory.AddAction(runAction); }
static MyPistonBase() { var reverse = new MyTerminalControlButton<MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.Velocity.Value = -x.Velocity); reverse.EnableAction(MyTerminalActionIcons.REVERSE); MyTerminalControlFactory.AddControl(reverse); var extendAction = new MyTerminalAction<MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE); extendAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(extendAction); var retractAction = new MyTerminalAction<MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE); retractAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(retractAction); var velocity = new MyTerminalControlSlider<MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank); velocity.SetLimits((block) => -block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity); velocity.DefaultValue = -0.5f; velocity.Getter = (x) => x.Velocity; velocity.Setter = (x, v) => x.Velocity.Value = v; velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s"); velocity.EnableActionsWithReset(); MyTerminalControlFactory.AddControl(velocity); var maxDist = new MyTerminalControlSlider<MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank); maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum; maxDist.Getter = (x) => x.MaxLimit; maxDist.Setter = (x, v) => x.MaxLimit.Value = v; maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m"); maxDist.EnableActions(); MyTerminalControlFactory.AddControl(maxDist); var minDist = new MyTerminalControlSlider<MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank); minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum; minDist.Getter = (x) => x.MinLimit; minDist.Setter = (x, v) => x.MinLimit.Value = v; minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m"); minDist.EnableActions(); MyTerminalControlFactory.AddControl(minDist); var weldSpeed = new MyTerminalControlSlider<MyPistonBase>("Weld speed", MySpaceTexts.BlockPropertyTitle_WeldSpeed, MySpaceTexts.Blank); weldSpeed.SetLimits((block) => 0f, (block) => MyGridPhysics.SmallShipMaxLinearVelocity()); weldSpeed.DefaultValueGetter = (block) => MyGridPhysics.LargeShipMaxLinearVelocity() - 5f; weldSpeed.Getter = (x) => (float)Math.Sqrt(x.m_weldSpeedSq); weldSpeed.Setter = (x, v) => x.m_weldSpeedSq.Value = v * v; weldSpeed.Writer = (x, res) => res.AppendDecimal((float)Math.Sqrt(x.m_weldSpeedSq), 1).Append("m/s"); weldSpeed.EnableActions(); MyTerminalControlFactory.AddControl(weldSpeed); var weldForce = new MyTerminalControlCheckbox<MyPistonBase>("Force weld", MySpaceTexts.BlockPropertyTitle_WeldForce, MySpaceTexts.Blank); weldForce.Getter = (x) => x.m_forceWeld; weldForce.Setter = (x, v) => x.m_forceWeld.Value = v; weldForce.EnableAction(); MyTerminalControlFactory.AddControl(weldForce); }
protected override void CreateTerminalControls() { if (MyTerminalControlFactory.AreControlsCreated<MyRemoteControl>()) return; base.CreateTerminalControls(); var controlBtn = new MyTerminalControlButton<MyRemoteControl>("Control", MySpaceTexts.ControlRemote, MySpaceTexts.Blank, (b) => b.RequestControl()); controlBtn.Enabled = r => r.CanControl(); controlBtn.SupportsMultipleBlocks = false; var action = controlBtn.EnableAction(MyTerminalActionIcons.TOGGLE); if (action != null) { action.InvalidToolbarTypes = new List<MyToolbarType> { MyToolbarType.ButtonPanel }; action.ValidForGroups = false; } MyTerminalControlFactory.AddControl(controlBtn); var autoPilotSeparator = new MyTerminalControlSeparator<MyRemoteControl>(); MyTerminalControlFactory.AddControl(autoPilotSeparator); var autoPilot = new MyTerminalControlOnOffSwitch<MyRemoteControl>("AutoPilot", MySpaceTexts.BlockPropertyTitle_AutoPilot, MySpaceTexts.Blank); autoPilot.Getter = (x) => x.m_autoPilotEnabled; autoPilot.Setter = (x, v) => x.SetAutoPilotEnabled(v); autoPilot.Enabled = r => r.CanEnableAutoPilot(); autoPilot.EnableToggleAction(); autoPilot.EnableOnOffActions(); MyTerminalControlFactory.AddControl(autoPilot); var collisionAv = new MyTerminalControlOnOffSwitch<MyRemoteControl>("CollisionAvoidance", MySpaceTexts.BlockPropertyTitle_CollisionAvoidance, MySpaceTexts.Blank); collisionAv.Getter = (x) => x.m_useCollisionAvoidance; collisionAv.Setter = (x, v) => x.SetCollisionAvoidance(v); collisionAv.Enabled = r => true; collisionAv.EnableToggleAction(); collisionAv.EnableOnOffActions(); MyTerminalControlFactory.AddControl(collisionAv); var dockignMode = new MyTerminalControlOnOffSwitch<MyRemoteControl>("DockingMode", MySpaceTexts.BlockPropertyTitle_EnableDockingMode, MySpaceTexts.Blank); dockignMode.Getter = (x) => x.m_dockingModeEnabled; dockignMode.Setter = (x, v) => x.SetDockingMode(v); dockignMode.Enabled = r => r.IsWorking; dockignMode.EnableToggleAction(); dockignMode.EnableOnOffActions(); MyTerminalControlFactory.AddControl(dockignMode); var cameraList = new MyTerminalControlCombobox<MyRemoteControl>("CameraList", MySpaceTexts.BlockPropertyTitle_AssignedCamera, MySpaceTexts.Blank); cameraList.ComboBoxContentWithBlock = (x, list) => x.FillCameraComboBoxContent(list); cameraList.Getter = (x) => (long)x.m_bindedCamera; cameraList.Setter = (x, y) => x.m_bindedCamera.Value = y; MyTerminalControlFactory.AddControl(cameraList); m_cameraList = cameraList; var flightMode = new MyTerminalControlCombobox<MyRemoteControl>("FlightMode", MySpaceTexts.BlockPropertyTitle_FlightMode, MySpaceTexts.Blank); flightMode.ComboBoxContent = (x) => FillFlightModeCombo(x); flightMode.Getter = (x) => (long)x.m_currentFlightMode.Value; flightMode.Setter = (x, v) => x.ChangeFlightMode((FlightMode)v); flightMode.SetSerializerRange((int)MyEnum<FlightMode>.Range.Min, (int)MyEnum<FlightMode>.Range.Max); MyTerminalControlFactory.AddControl(flightMode); var directionCombo = new MyTerminalControlCombobox<MyRemoteControl>("Direction", MySpaceTexts.BlockPropertyTitle_ForwardDirection, MySpaceTexts.Blank); directionCombo.ComboBoxContent = (x) => FillDirectionCombo(x); directionCombo.Getter = (x) => (long)x.m_currentDirection.Value; directionCombo.Setter = (x, v) => x.ChangeDirection((Base6Directions.Direction)v); MyTerminalControlFactory.AddControl(directionCombo); if (MyFakes.ENABLE_VR_REMOTE_BLOCK_AUTOPILOT_SPEED_LIMIT) { var sliderSpeedLimit = new MyTerminalControlSlider<MyRemoteControl>("SpeedLimit", MySpaceTexts.BlockPropertyTitle_RemoteBlockSpeedLimit, MySpaceTexts.BlockPropertyTitle_RemoteBlockSpeedLimit); sliderSpeedLimit.SetLimits(1, 200); sliderSpeedLimit.DefaultValue = MyObjectBuilder_RemoteControl.DEFAULT_AUTOPILOT_SPEED_LIMIT; sliderSpeedLimit.Getter = (x) => x.m_autopilotSpeedLimit; sliderSpeedLimit.Setter = (x, v) => x.m_autopilotSpeedLimit.Value = v; sliderSpeedLimit.Writer = (x, sb) => sb.Append(MyValueFormatter.GetFormatedFloat(x.m_autopilotSpeedLimit, 0)); sliderSpeedLimit.EnableActions(); MyTerminalControlFactory.AddControl(sliderSpeedLimit); } var waypointList = new MyTerminalControlListbox<MyRemoteControl>("WaypointList", MySpaceTexts.BlockPropertyTitle_Waypoints, MySpaceTexts.Blank, true); waypointList.ListContent = (x, list1, list2) => x.FillWaypointList(list1, list2); waypointList.ItemSelected = (x, y) => x.SelectWaypoint(y); if (!MySandboxGame.IsDedicated) { m_waypointGuiControl = (MyGuiControlListbox)((MyGuiControlBlockProperty)waypointList.GetGuiControl()).PropertyControl; } MyTerminalControlFactory.AddControl(waypointList); var toolbarButton = new MyTerminalControlButton<MyRemoteControl>("Open Toolbar", MySpaceTexts.BlockPropertyTitle_AutoPilotToolbarOpen, MySpaceTexts.BlockPropertyPopup_AutoPilotToolbarOpen, delegate(MyRemoteControl self) { var actions = self.m_selectedWaypoints[0].Actions; if (actions != null) { for (int i = 0; i < actions.Length; i++) { if (actions[i] != null) { self.m_actionToolbar.SetItemAtIndex(i, actions[i]); } } } self.m_actionToolbar.ItemChanged += self.Toolbar_ItemChanged; if (MyGuiScreenCubeBuilder.Static == null) { MyToolbarComponent.CurrentToolbar = self.m_actionToolbar; MyGuiScreenBase screen = MyGuiSandbox.CreateScreen(MyPerGameSettings.GUI.ToolbarConfigScreen, 0, self); MyToolbarComponent.AutoUpdate = false; screen.Closed += (source) => { MyToolbarComponent.AutoUpdate = true; self.m_actionToolbar.ItemChanged -= self.Toolbar_ItemChanged; self.m_actionToolbar.Clear(); }; MyGuiSandbox.AddScreen(screen); } }); toolbarButton.Enabled = r => r.m_selectedWaypoints.Count == 1; toolbarButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(toolbarButton); var removeBtn = new MyTerminalControlButton<MyRemoteControl>("RemoveWaypoint", MySpaceTexts.BlockActionTitle_RemoveWaypoint, MySpaceTexts.Blank, (b) => b.RemoveWaypoints()); removeBtn.Enabled = r => r.CanRemoveWaypoints(); removeBtn.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(removeBtn); var moveUp = new MyTerminalControlButton<MyRemoteControl>("MoveUp", MySpaceTexts.BlockActionTitle_MoveWaypointUp, MySpaceTexts.Blank, (b) => b.MoveWaypointsUp()); moveUp.Enabled = r => r.CanMoveWaypointsUp(); moveUp.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(moveUp); var moveDown = new MyTerminalControlButton<MyRemoteControl>("MoveDown", MySpaceTexts.BlockActionTitle_MoveWaypointDown, MySpaceTexts.Blank, (b) => b.MoveWaypointsDown()); moveDown.Enabled = r => r.CanMoveWaypointsDown(); moveDown.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(moveDown); var addButton = new MyTerminalControlButton<MyRemoteControl>("AddWaypoint", MySpaceTexts.BlockActionTitle_AddWaypoint, MySpaceTexts.Blank, (b) => b.AddWaypoints()); addButton.Enabled = r => r.CanAddWaypoints(); addButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(addButton); var gpsList = new MyTerminalControlListbox<MyRemoteControl>("GpsList", MySpaceTexts.BlockPropertyTitle_GpsLocations, MySpaceTexts.Blank, true); gpsList.ListContent = (x, list1, list2) => x.FillGpsList(list1, list2); gpsList.ItemSelected = (x, y) => x.SelectGps(y); if (!MySandboxGame.IsDedicated) { m_gpsGuiControl = (MyGuiControlListbox)((MyGuiControlBlockProperty)gpsList.GetGuiControl()).PropertyControl; } MyTerminalControlFactory.AddControl(gpsList); foreach (var direction in m_directionNames) { var setDirectionAction = new MyTerminalAction<MyRemoteControl>(MyTexts.Get(direction.Value).ToString(), MyTexts.Get(direction.Value), OnAction, null, MyTerminalActionIcons.TOGGLE); setDirectionAction.Enabled = (b) => b.IsWorking; setDirectionAction.ParameterDefinitions.Add(TerminalActionParameter.Get((byte)direction.Key)); MyTerminalControlFactory.AddAction(setDirectionAction); } var resetButton = new MyTerminalControlButton<MyRemoteControl>("Reset", MySpaceTexts.BlockActionTitle_WaypointReset, MySpaceTexts.BlockActionTooltip_WaypointReset, (b) => b.ResetWaypoint()); resetButton.Enabled = r => r.IsWorking; resetButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(resetButton); var copyButton = new MyTerminalControlButton<MyRemoteControl>("Copy", MySpaceTexts.BlockActionTitle_RemoteCopy, MySpaceTexts.Blank, (b) => b.CopyAutopilotSetup()); copyButton.Enabled = r => r.IsWorking; copyButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(copyButton); var pasteButton = new MyTerminalControlButton<MyRemoteControl>("Paste", MySpaceTexts.BlockActionTitle_RemotePaste, MySpaceTexts.Blank, (b) => b.PasteAutopilotSetup()); pasteButton.Enabled = r => r.IsWorking && MyRemoteControl.m_clipboard != null; pasteButton.SupportsMultipleBlocks = false; MyTerminalControlFactory.AddControl(pasteButton); }
static MyPistonBase() { var reverse = new MyTerminalControlButton <MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.Velocity.Value = -x.Velocity); reverse.EnableAction(MyTerminalActionIcons.REVERSE); MyTerminalControlFactory.AddControl(reverse); var extendAction = new MyTerminalAction <MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE); extendAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(extendAction); var retractAction = new MyTerminalAction <MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE); retractAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true; MyTerminalControlFactory.AddAction(retractAction); var velocity = new MyTerminalControlSlider <MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank); velocity.SetLimits((block) => - block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity); velocity.DefaultValue = -0.5f; velocity.Getter = (x) => x.Velocity; velocity.Setter = (x, v) => x.Velocity.Value = v; velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s"); velocity.EnableActionsWithReset(); MyTerminalControlFactory.AddControl(velocity); var maxDist = new MyTerminalControlSlider <MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank); maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum; maxDist.Getter = (x) => x.MaxLimit; maxDist.Setter = (x, v) => x.MaxLimit.Value = v; maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m"); maxDist.EnableActions(); MyTerminalControlFactory.AddControl(maxDist); var minDist = new MyTerminalControlSlider <MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank); minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum); minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum; minDist.Getter = (x) => x.MinLimit; minDist.Setter = (x, v) => x.MinLimit.Value = v; minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m"); minDist.EnableActions(); MyTerminalControlFactory.AddControl(minDist); var weldSpeed = new MyTerminalControlSlider <MyPistonBase>("Weld speed", MySpaceTexts.BlockPropertyTitle_WeldSpeed, MySpaceTexts.Blank); weldSpeed.SetLimits((block) => 0f, (block) => MyGridPhysics.SmallShipMaxLinearVelocity()); weldSpeed.DefaultValueGetter = (block) => MyGridPhysics.LargeShipMaxLinearVelocity() - 5f; weldSpeed.Getter = (x) => (float)Math.Sqrt(x.m_weldSpeedSq); weldSpeed.Setter = (x, v) => x.m_weldSpeedSq.Value = v * v; weldSpeed.Writer = (x, res) => res.AppendDecimal((float)Math.Sqrt(x.m_weldSpeedSq), 1).Append("m/s"); weldSpeed.EnableActions(); MyTerminalControlFactory.AddControl(weldSpeed); var weldForce = new MyTerminalControlCheckbox <MyPistonBase>("Force weld", MySpaceTexts.BlockPropertyTitle_WeldForce, MySpaceTexts.Blank); weldForce.Getter = (x) => x.m_forceWeld; weldForce.Setter = (x, v) => x.m_forceWeld.Value = v; weldForce.EnableAction(); MyTerminalControlFactory.AddControl(weldForce); }