Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
        }