private void create_controller_widgets <_controller_type_>() where _controller_type_ : IMyShipController { if (!screen_info.torque_disabled) { IMyTerminalControlSeparator controller_line = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, _controller_type_>("TTDTWM_LINE1"); MyAPIGateway.TerminalControls.AddControl <_controller_type_>(controller_line); create_checkbox <_controller_type_>("RotationalDamping", "Rotational Damping", null, "On", "Off", thruster_and_grid_tagger.is_grid_rotational_damping_on, thruster_and_grid_tagger.set_grid_rotational_damping, thruster_and_grid_tagger.is_grid_control_available); create_switch <_controller_type_>("CoTMode", "Active Control Reference", null, "CoT", "CoM", "CoT", "CoM", thruster_and_grid_tagger.is_grid_CoT_mode_on, thruster_and_grid_tagger.set_grid_CoT_mode, thruster_and_grid_tagger.is_grid_control_available); create_switch <_controller_type_>("IndividualCalibration", "Thrust Calibration Method", null, "Ind.", "Quad", "Ind.", "Quad", thruster_and_grid_tagger.use_individual_calibration, thruster_and_grid_tagger.choose_calibration_method, thruster_and_grid_tagger.is_grid_control_available); create_switch <_controller_type_>("LandingMode", "Touchdown Mode", null, "On", "Off", "Land", "Flight", thruster_and_grid_tagger.is_grid_touchdown_mode_on, thruster_and_grid_tagger.set_grid_touchdown_mode, thruster_and_grid_tagger.is_grid_touchdown_mode_available); create_slider <_controller_type_>("ControlSensitivity", "Thrust Control Sensitivity", thruster_and_grid_tagger.get_control_sensitivity, thruster_and_grid_tagger.set_control_sensitivity, thruster_and_grid_tagger.control_sensitivity_text, 0.1f, 20.0f, 0.1f, "IncreaseSensitivity", "DecreaseSensitivity", "Increase Control Sensitivity", "Decrease Control Sensitivity"); IMyTerminalControlSeparator controller_line2 = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlSeparator, _controller_type_>("TTDTWM_LINE2"); MyAPIGateway.TerminalControls.AddControl <_controller_type_>(controller_line2); IMyTerminalControlLabel controller_line_ID_override_label = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlLabel, _controller_type_>("TTDTWM_ID_OVR"); controller_line_ID_override_label.Label = MyStringId.GetOrCompute("Inertia Damper Overrides"); MyAPIGateway.TerminalControls.AddControl <_controller_type_>(controller_line_ID_override_label); create_checkbox <_controller_type_>("ForeAftIDDisable", "Disable fore/aft", null, "On", "Off", thruster_and_grid_tagger.create_damper_override_reader(2), thruster_and_grid_tagger.create_damper_override_setter(2), thruster_and_grid_tagger.is_grid_control_available); create_checkbox <_controller_type_>("PortStarboardIDDisable", "Disable port/starboard", null, "On", "Off", thruster_and_grid_tagger.create_damper_override_reader(0), thruster_and_grid_tagger.create_damper_override_setter(0), thruster_and_grid_tagger.is_grid_control_available); create_checkbox <_controller_type_>("DorsalVentralIDDisable", "Disable dorsal/ventral", null, "On", "Off", thruster_and_grid_tagger.create_damper_override_reader(1), thruster_and_grid_tagger.create_damper_override_setter(1), thruster_and_grid_tagger.is_grid_control_available); } IMyTerminalControlLabel controller_line_ID_mode = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlLabel, _controller_type_>("TTDTWM_IDMODE"); controller_line_ID_mode.Label = MyStringId.GetOrCompute("Inertia Damper Mode"); MyAPIGateway.TerminalControls.AddControl <_controller_type_>(controller_line_ID_mode); create_button <_controller_type_>("IDFullStop", "Full Stop", null, "Select", thruster_and_grid_tagger.create_ID_mode_selector(false), thruster_and_grid_tagger.is_grid_control_available, thruster_and_grid_tagger.create_ID_mode_indicator(false)); create_button <_controller_type_>("IDCircularise", "Circularise", null, "Select", thruster_and_grid_tagger.create_ID_mode_selector(true), thruster_and_grid_tagger.is_grid_circularise_mode_available, thruster_and_grid_tagger.create_ID_mode_indicator(true)); IMyTerminalControlLabel controller_line_manoeuvre = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlLabel, _controller_type_>("TTDTWM_IDmanoeuvre"); controller_line_manoeuvre.Label = MyStringId.GetOrCompute("Manoeuvres"); MyAPIGateway.TerminalControls.AddControl <_controller_type_>(controller_line_manoeuvre); create_button <_controller_type_>("IDPrograde", "Prograde", null, "Start", thruster_and_grid_tagger.create_manoeuvre_starter(engine_control_unit.ID_manoeuvres.burn_prograde), thruster_and_grid_tagger.is_grid_circularise_mode_available, thruster_and_grid_tagger.create_manoeuvre_indicator(engine_control_unit.ID_manoeuvres.burn_prograde)); create_button <_controller_type_>("IDRetrograde", "Retrograde", null, "Start", thruster_and_grid_tagger.create_manoeuvre_starter(engine_control_unit.ID_manoeuvres.burn_retrograde), thruster_and_grid_tagger.is_grid_circularise_mode_available, thruster_and_grid_tagger.create_manoeuvre_indicator(engine_control_unit.ID_manoeuvres.burn_retrograde)); create_button <_controller_type_>("IDNormal", "Normal", null, "Start", thruster_and_grid_tagger.create_manoeuvre_starter(engine_control_unit.ID_manoeuvres.burn_normal), thruster_and_grid_tagger.is_grid_circularise_mode_available, thruster_and_grid_tagger.create_manoeuvre_indicator(engine_control_unit.ID_manoeuvres.burn_normal)); create_button <_controller_type_>("IDAntiNormal", "Anti-normal", null, "Start", thruster_and_grid_tagger.create_manoeuvre_starter(engine_control_unit.ID_manoeuvres.burn_antinormal), thruster_and_grid_tagger.is_grid_circularise_mode_available, thruster_and_grid_tagger.create_manoeuvre_indicator(engine_control_unit.ID_manoeuvres.burn_antinormal)); create_button <_controller_type_>("IDOutward", "Outward", null, "Start", thruster_and_grid_tagger.create_manoeuvre_starter(engine_control_unit.ID_manoeuvres.burn_outward), thruster_and_grid_tagger.is_grid_circularise_mode_available, thruster_and_grid_tagger.create_manoeuvre_indicator(engine_control_unit.ID_manoeuvres.burn_outward)); create_button <_controller_type_>("IDInward", "Inward", null, "Start", thruster_and_grid_tagger.create_manoeuvre_starter(engine_control_unit.ID_manoeuvres.burn_inward), thruster_and_grid_tagger.is_grid_circularise_mode_available, thruster_and_grid_tagger.create_manoeuvre_indicator(engine_control_unit.ID_manoeuvres.burn_inward)); create_PB_property <int, _controller_type_>("CurrentIDMode", get_current_ID_mode); }
public static IMyTerminalControlLabel CreateControlLabel(string id, string labelText, Func <IMyTerminalBlock, bool> visible, Func <IMyTerminalBlock, bool> enabled) { if (ControlIdExists(id) != null) { return(null); } IMyTerminalControlLabel label = MyAPIGateway.TerminalControls.CreateControl <IMyTerminalControlLabel, IMyUpgradeModule>(id); label.Enabled = enabled; label.Visible = visible; label.SupportsMultipleBlocks = false; label.Label = MyStringId.GetOrCompute(labelText); MyAPIGateway.TerminalControls.AddControl <IMyUpgradeModule>(label); return(label); }
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; }