diff --git a/src/gui/hotkeyConfig.cpp b/src/gui/hotkeyConfig.cpp index 04a74bd667..4a9a7781da 100644 --- a/src/gui/hotkeyConfig.cpp +++ b/src/gui/hotkeyConfig.cpp @@ -232,15 +232,17 @@ Keys::Keys() : }}, //Engineering - engineering_select_reactor("ENGINEERING_SELECT_SYSTEM_REACTOR", "1"), - engineering_select_beam_weapons("ENGINEERING_SELECT_SYSTEM_BEAM_WEAPONS", "2"), - engineering_select_missile_system("ENGINEERING_SELECT_SYSTEM_MISSILE", "3"), - engineering_select_maneuvering_system("ENGINEERING_SELECT_SYSTEM_MANEUVERING", "4"), - engineering_select_impulse_system("ENGINEERING_SELECT_SYSTEM_IMPULSE", "5"), - engineering_select_warp_system("ENGINEERING_SELECT_SYSTEM_WARP", "6"), - engineering_select_jump_drive_system("ENGINEERING_SELECT_SYSTEM_JUMP_DRIVE", "7"), - engineering_select_front_shield_system("ENGINEERING_SELECT_SYSTEM_FRONT_SHIELD", "8"), - engineering_select_rear_shield_system("ENGINEERING_SELECT_SYSTEM_READ_SHIELD", "9"), + engineering_select_system{ + {"ENGINEERING_SELECT_SYSTEM_REACTOR", "1"}, + {"ENGINEERING_SELECT_SYSTEM_BEAM_WEAPONS", "2"}, + {"ENGINEERING_SELECT_SYSTEM_MISSILE", "3"}, + {"ENGINEERING_SELECT_SYSTEM_MANEUVERING", "4"}, + {"ENGINEERING_SELECT_SYSTEM_IMPULSE", "5"}, + {"ENGINEERING_SELECT_SYSTEM_WARP", "6"}, + {"ENGINEERING_SELECT_SYSTEM_JUMP_DRIVE", "7"}, + {"ENGINEERING_SELECT_SYSTEM_FRONT_SHIELD", "8"}, + {"ENGINEERING_SELECT_SYSTEM_READ_SHIELD", "9"}, + }, engineering_set_power_000("ENGINEERING_POWER_000"), engineering_set_power_030("ENGINEERING_POWER_030"), engineering_set_power_050("ENGINEERING_POWER_050"), @@ -251,8 +253,10 @@ Keys::Keys() : engineering_set_power_300("ENGINEERING_POWER_300"), engineering_increase_power("ENGINEERING_POWER_INCREASE", "]"), engineering_decrease_power("ENGINEERING_POWER_DECREASE", "["), + engineering_set_power("ENGINEERING_POWER_SET"), engineering_increase_coolant("ENGINEERING_COOLANT_INCREASE", "="), engineering_decrease_coolant("ENGINEERING_COOLANT_DECREASE", "-"), + engineering_set_coolant("ENGINEERING_COOLANT_SET"), engineering_next_repair_crew("ENGINEERING_REPAIR_CREW_NEXT", "C"), engineering_repair_crew_up("ENGINEERING_REPAIR_CREW_UP", "Up"), engineering_repair_crew_down("ENGINEERING_REPAIR_CREW_DOWN", "Down"), @@ -261,6 +265,28 @@ Keys::Keys() : engineering_self_destruct_start("ENGINEERING_SELF_DESTRUCT_START"), engineering_self_destruct_confirm("ENGINEERING_SELF_DESTRUCT_CONFIRM"), engineering_self_destruct_cancel("ENGINEERING_SELF_DESTRUCT_CANCEL"), + engineering_set_power_for_system{ + {"ENGINEERING_SET_SYSTEM_POWER_REACTOR"}, + {"ENGINEERING_SET_SYSTEM_POWER_BEAM_WEAPONS"}, + {"ENGINEERING_SET_SYSTEM_POWER_MISSILE"}, + {"ENGINEERING_SET_SYSTEM_POWER_MANEUVERING"}, + {"ENGINEERING_SET_SYSTEM_POWER_IMPULSE"}, + {"ENGINEERING_SET_SYSTEM_POWER_WARP"}, + {"ENGINEERING_SET_SYSTEM_POWER_JUMP_DRIVE"}, + {"ENGINEERING_SET_SYSTEM_POWER_FRONT_SHIELD"}, + {"ENGINEERING_SET_SYSTEM_POWER_READ_SHIELD"}, + }, + engineering_set_coolant_for_system{ + {"ENGINEERING_SET_SYSTEM_COOLANT_REACTOR"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_BEAM_WEAPONS"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_MISSILE"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_MANEUVERING"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_IMPULSE"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_WARP"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_JUMP_DRIVE"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_FRONT_SHIELD"}, + {"ENGINEERING_SET_SYSTEM_COOLANT_READ_SHIELD"}, + }, relay_alert_level_none("RELAY_ALERT_NONE"), relay_alert_level_yellow("RELAY_ALERT_YELLOW"), @@ -378,15 +404,15 @@ void Keys::init() } //Engineering - engineering_select_reactor.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select reactor system")); - engineering_select_beam_weapons.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select beam weapon system")); - engineering_select_missile_system.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select missile weapon system")); - engineering_select_maneuvering_system.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select maneuvering system")); - engineering_select_impulse_system.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select impulse system")); - engineering_select_warp_system.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select warp system")); - engineering_select_jump_drive_system.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select jump drive system")); - engineering_select_front_shield_system.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select front shields system")); - engineering_select_rear_shield_system.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select rear shields system")); + engineering_select_system[SYS_Reactor].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select reactor system")); + engineering_select_system[SYS_BeamWeapons].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select beam weapon system")); + engineering_select_system[SYS_MissileSystem].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select missile weapon system")); + engineering_select_system[SYS_Maneuver].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select maneuvering system")); + engineering_select_system[SYS_Impulse].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select impulse system")); + engineering_select_system[SYS_Warp].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select warp system")); + engineering_select_system[SYS_JumpDrive].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select jump drive system")); + engineering_select_system[SYS_FrontShield].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select front shields system")); + engineering_select_system[SYS_RearShield].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Select rear shields system")); engineering_set_power_000.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set system power to 0%")); engineering_set_power_030.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set system power to 30%")); engineering_set_power_050.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set system power to 50%")); @@ -397,8 +423,10 @@ void Keys::init() engineering_set_power_300.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set system power to 300%")); engineering_increase_power.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Increase system power")); engineering_decrease_power.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Decrease system power")); + engineering_set_power.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set system power (analogue)")); engineering_increase_coolant.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Increase system coolant")); engineering_decrease_coolant.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Decrease system coolant")); + engineering_set_coolant.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set system coolant (analogue)")); engineering_next_repair_crew.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Next repair crew")); engineering_repair_crew_up.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Crew move up")); engineering_repair_crew_down.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Crew move down")); @@ -408,6 +436,26 @@ void Keys::init() engineering_self_destruct_confirm.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Confirm self-destruct")); engineering_self_destruct_cancel.setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Cancel self-destruct")); + engineering_set_power_for_system[SYS_Reactor].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set reactor power (analogue)")); + engineering_set_power_for_system[SYS_BeamWeapons].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set beam weapon power (analogue)")); + engineering_set_power_for_system[SYS_MissileSystem].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set missile weapon power (analogue)")); + engineering_set_power_for_system[SYS_Maneuver].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set maneuvering power (analogue)")); + engineering_set_power_for_system[SYS_Impulse].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set impulse power (analogue)")); + engineering_set_power_for_system[SYS_Warp].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set warp power (analogue)")); + engineering_set_power_for_system[SYS_JumpDrive].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set jump drive power (analogue)")); + engineering_set_power_for_system[SYS_FrontShield].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set front shields power (analogue)")); + engineering_set_power_for_system[SYS_RearShield].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set rear shields power (analogue)")); + + engineering_set_coolant_for_system[SYS_Reactor].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set reactor coolant (analogue)")); + engineering_set_coolant_for_system[SYS_BeamWeapons].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set beam weapon coolant (analogue)")); + engineering_set_coolant_for_system[SYS_MissileSystem].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set missile weapon coolant (analogue)")); + engineering_set_coolant_for_system[SYS_Maneuver].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set maneuvering coolant (analogue)")); + engineering_set_coolant_for_system[SYS_Impulse].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set impulse coolant (analogue)")); + engineering_set_coolant_for_system[SYS_Warp].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set warp coolant (analogue)")); + engineering_set_coolant_for_system[SYS_JumpDrive].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set jump drive coolant (analogue)")); + engineering_set_coolant_for_system[SYS_FrontShield].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set front shields coolant (analogue)")); + engineering_set_coolant_for_system[SYS_RearShield].setLabel(tr("hotkey_menu", "Engineering"), tr("hotkey_Engineering", "Set rear shields coolant (analogue)")); + relay_alert_level_none.setLabel(tr("hotkey_menu", "Relay"), tr("hotkey_Relay", "Alert level: Normal")); relay_alert_level_yellow.setLabel(tr("hotkey_menu", "Relay"), tr("hotkey_Relay", "Alert level: Yellow")); relay_alert_level_red.setLabel(tr("hotkey_menu", "Relay"), tr("hotkey_Relay", "Alert level: Red")); diff --git a/src/gui/hotkeyConfig.h b/src/gui/hotkeyConfig.h index 3f6b75c562..69b15c1bb1 100644 --- a/src/gui/hotkeyConfig.h +++ b/src/gui/hotkeyConfig.h @@ -6,6 +6,8 @@ #include #include #include "stringImproved.h" +#include "shipTemplate.h" + class Keys { @@ -107,15 +109,7 @@ class Keys std::array science_scan_param_set; //Engineering - sp::io::Keybinding engineering_select_reactor; - sp::io::Keybinding engineering_select_beam_weapons; - sp::io::Keybinding engineering_select_missile_system; - sp::io::Keybinding engineering_select_maneuvering_system; - sp::io::Keybinding engineering_select_impulse_system; - sp::io::Keybinding engineering_select_warp_system; - sp::io::Keybinding engineering_select_jump_drive_system; - sp::io::Keybinding engineering_select_front_shield_system; - sp::io::Keybinding engineering_select_rear_shield_system; + sp::io::Keybinding engineering_select_system[SYS_COUNT]; sp::io::Keybinding engineering_set_power_000; sp::io::Keybinding engineering_set_power_030; sp::io::Keybinding engineering_set_power_050; @@ -126,8 +120,10 @@ class Keys sp::io::Keybinding engineering_set_power_300; sp::io::Keybinding engineering_increase_power; sp::io::Keybinding engineering_decrease_power; + sp::io::Keybinding engineering_set_power; sp::io::Keybinding engineering_increase_coolant; sp::io::Keybinding engineering_decrease_coolant; + sp::io::Keybinding engineering_set_coolant; sp::io::Keybinding engineering_next_repair_crew; sp::io::Keybinding engineering_repair_crew_up; sp::io::Keybinding engineering_repair_crew_down; @@ -137,6 +133,9 @@ class Keys sp::io::Keybinding engineering_self_destruct_confirm; sp::io::Keybinding engineering_self_destruct_cancel; + sp::io::Keybinding engineering_set_power_for_system[SYS_COUNT]; + sp::io::Keybinding engineering_set_coolant_for_system[SYS_COUNT]; + //Relay sp::io::Keybinding relay_alert_level_none; sp::io::Keybinding relay_alert_level_yellow; diff --git a/src/screens/crew6/engineeringScreen.cpp b/src/screens/crew6/engineeringScreen.cpp index cd5764d8cd..301e46acbf 100644 --- a/src/screens/crew6/engineeringScreen.cpp +++ b/src/screens/crew6/engineeringScreen.cpp @@ -361,15 +361,22 @@ void EngineeringScreen::onUpdate() { if (my_spaceship && isVisible()) { - if (keys.engineering_select_reactor.getDown()) selectSystem(SYS_Reactor); - if (keys.engineering_select_beam_weapons.getDown()) selectSystem(SYS_BeamWeapons); - if (keys.engineering_select_missile_system.getDown()) selectSystem(SYS_MissileSystem); - if (keys.engineering_select_maneuvering_system.getDown()) selectSystem(SYS_Maneuver); - if (keys.engineering_select_impulse_system.getDown()) selectSystem(SYS_Impulse); - if (keys.engineering_select_warp_system.getDown()) selectSystem(SYS_Warp); - if (keys.engineering_select_jump_drive_system.getDown()) selectSystem(SYS_JumpDrive); - if (keys.engineering_select_front_shield_system.getDown()) selectSystem(SYS_FrontShield); - if (keys.engineering_select_rear_shield_system.getDown()) selectSystem(SYS_RearShield); + for(unsigned int n=0; n(n)); + + float set_value = keys.engineering_set_power_for_system[n].getValue() * 3.0f; + if (set_value != my_spaceship->systems[n].power_request && (set_value != 0.0f || set_power_active[n])) + { + my_spaceship->commandSetSystemPowerRequest(selected_system, set_value); + set_power_active[n] = set_value != 0.0f; //Make sure the next update is send, even if it is back to zero. + } + set_value = keys.engineering_set_coolant_for_system[n].getValue() * my_spaceship->max_coolant_per_system; + if (set_value != my_spaceship->systems[n].coolant_request && (set_value != 0.0f || set_coolant_active[n])) + { + my_spaceship->commandSetSystemCoolantRequest(selected_system, set_value); + set_coolant_active[n] = set_value != 0.0f; //Make sure the next update is send, even if it is back to zero. + } + } if (selected_system != SYS_None) { @@ -427,6 +434,19 @@ void EngineeringScreen::onUpdate() coolant_slider->setValue(my_spaceship->systems[selected_system].coolant_request + coolant_adjust); my_spaceship->commandSetSystemCoolantRequest(selected_system, coolant_slider->getValue()); } + + float set_value = keys.engineering_set_power.getValue() * 3.0f; + if (set_value != my_spaceship->systems[selected_system].power_request && (set_value != 0.0f || set_power_active[selected_system])) + { + my_spaceship->commandSetSystemPowerRequest(selected_system, set_value); + set_power_active[selected_system] = set_value != 0.0f; //Make sure the next update is send, even if it is back to zero. + } + set_value = keys.engineering_set_coolant.getValue() * my_spaceship->max_coolant_per_system; + if (set_value != my_spaceship->systems[selected_system].coolant_request && (set_value != 0.0f || set_coolant_active[selected_system])) + { + my_spaceship->commandSetSystemCoolantRequest(selected_system, set_value); + set_coolant_active[selected_system] = set_value != 0.0f; //Make sure the next update is send, even if it is back to zero. + } } } } diff --git a/src/screens/crew6/engineeringScreen.h b/src/screens/crew6/engineeringScreen.h index 28fb108132..4efb22027f 100644 --- a/src/screens/crew6/engineeringScreen.h +++ b/src/screens/crew6/engineeringScreen.h @@ -57,6 +57,9 @@ class EngineeringScreen : public GuiOverlay float previous_energy_level; float average_energy_delta; + bool set_power_active[SYS_COUNT] = {false}; + bool set_coolant_active[SYS_COUNT] = {false}; + void addSystemEffect(string key, string value); void selectSystem(ESystem system); diff --git a/src/screens/extra/powerManagement.cpp b/src/screens/extra/powerManagement.cpp index 9b7d78acfa..c879315738 100644 --- a/src/screens/extra/powerManagement.cpp +++ b/src/screens/extra/powerManagement.cpp @@ -117,15 +117,22 @@ void PowerManagementScreen::onUpdate() { if (my_spaceship && isVisible()) { - if (keys.engineering_select_reactor.getDown()) selected_system = SYS_Reactor; - if (keys.engineering_select_beam_weapons.getDown()) selected_system = SYS_BeamWeapons; - if (keys.engineering_select_missile_system.getDown()) selected_system = SYS_MissileSystem; - if (keys.engineering_select_maneuvering_system.getDown()) selected_system = SYS_Maneuver; - if (keys.engineering_select_impulse_system.getDown()) selected_system = SYS_Impulse; - if (keys.engineering_select_warp_system.getDown()) selected_system = SYS_Warp; - if (keys.engineering_select_jump_drive_system.getDown()) selected_system = SYS_JumpDrive; - if (keys.engineering_select_front_shield_system.getDown()) selected_system = SYS_FrontShield; - if (keys.engineering_select_rear_shield_system.getDown()) selected_system = SYS_RearShield; + for(unsigned int n=0; n(n); + + float set_value = keys.engineering_set_power_for_system[n].getValue() * 3.0f; + if (set_value != my_spaceship->systems[n].power_request && (set_value != 0.0f || set_power_active[n])) + { + my_spaceship->commandSetSystemPowerRequest(selected_system, set_value); + set_power_active[n] = set_value != 0.0f; //Make sure the next update is send, even if it is back to zero. + } + set_value = keys.engineering_set_coolant_for_system[n].getValue() * my_spaceship->max_coolant_per_system; + if (set_value != my_spaceship->systems[n].coolant_request && (set_value != 0.0f || set_coolant_active[n])) + { + my_spaceship->commandSetSystemCoolantRequest(selected_system, set_value); + set_coolant_active[n] = set_value != 0.0f; //Make sure the next update is send, even if it is back to zero. + } + } // Don't act if the selected system doesn't exist. if (!my_spaceship->hasSystem(selected_system)) diff --git a/src/screens/extra/powerManagement.h b/src/screens/extra/powerManagement.h index 4387e2de56..7e23702bd1 100644 --- a/src/screens/extra/powerManagement.h +++ b/src/screens/extra/powerManagement.h @@ -31,6 +31,8 @@ class PowerManagementScreen : public GuiOverlay GuiProgressbar* coolant_bar; }; SystemRow systems[SYS_COUNT]; + bool set_power_active[SYS_COUNT] = {false}; + bool set_coolant_active[SYS_COUNT] = {false}; public: PowerManagementScreen(GuiContainer* owner);