Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ set(MAIN_SOURCES
src/screens/extra/powerManagement.cpp
src/screens/extra/databaseScreen.cpp
src/screens/extra/commsScreen.cpp
src/screens/extra/scannerScreen.cpp
src/screens/extra/shipLogScreen.cpp
src/screens/gm/gameMasterScreen.cpp
src/screens/gm/objectCreationView.cpp
Expand Down Expand Up @@ -625,6 +626,7 @@ set(MAIN_SOURCES
src/screens/crew6/weaponsScreen.h
src/screens/crewStationScreen.h
src/screens/extra/commsScreen.h
src/screens/extra/scannerScreen.h
src/screens/extra/damcon.h
src/screens/extra/databaseScreen.h
src/screens/extra/powerManagement.h
Expand Down
6 changes: 6 additions & 0 deletions src/crewPosition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ string crewPositionToString(CrewPosition value) {
case CrewPosition::singlePilot: return "singlepilot";
case CrewPosition::damageControl: return "damagecontrol";
case CrewPosition::powerManagement: return "powermanagement";
case CrewPosition::altScience: return "altscience";
case CrewPosition::scanOnly: return "scanonly";
case CrewPosition::databaseView: return "database";
case CrewPosition::altRelay: return "altrelay";
case CrewPosition::commsOnly: return "commsonly";
Expand Down Expand Up @@ -51,6 +53,10 @@ std::optional<CrewPosition> tryParseCrewPosition(string value) {
return CrewPosition::damageControl;
else if (value == "powermanagement")
return CrewPosition::powerManagement;
else if (value == "altscience" || value == "tacticalmap")
return CrewPosition::altScience;
else if (value == "scanonly")
return CrewPosition::scanOnly;
else if (value == "database" || value == "databaseview")
return CrewPosition::databaseView;
else if (value == "altrelay")
Expand Down
8 changes: 5 additions & 3 deletions src/crewPosition.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ enum class CrewPosition
//extras
damageControl,
powerManagement,
databaseView,
altRelay,
commsOnly,
altScience, // Science without scanning or database
scanOnly, // Science scanner only
databaseView, // Science database only
altRelay, // Relay without comms
commsOnly, // Relay comms only
shipLog,

MAX
Expand Down
30 changes: 15 additions & 15 deletions src/menus/shipSelectionScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -748,59 +748,59 @@ CrewPositionSelection::CrewPositionSelection(GuiContainer* owner, string id, int
// 6/5 player crew panel
(new GuiLabel(standard_crew_panel, "CREW_POSITION_SELECT_LABEL", tr("6/5 player crew"), 30.0f))->addBackground()->setSize(GuiElement::GuiSizeMax, 50)->setAttribute("margin", "0, 0, 0, 10");

auto create_crew_position_button = [this](GuiElement* standard_crew_panel, int n) {
auto createCrewPositionButton = [this](GuiElement* standard_crew_panel, int n) {
auto cp = CrewPosition(n);
auto button = new GuiToggleButton(standard_crew_panel, "", getCrewPositionName(cp), [this, cp](bool value){
my_player_info->commandSetCrewPosition(window_index, cp, value);
unselectSingleOptions();
});
button->setSize(GuiElement::GuiSizeMax, 50);
button->setSize(GuiElement::GuiSizeMax, button_height);
button->setIcon(getCrewPositionIcon(cp));
button->setValue(size_t(window_index) < my_player_info->crew_positions.size() && my_player_info->crew_positions[window_index].has(cp));
crew_position_button[n] = button;
return button;
};
for (int n = 0; n <= int(CrewPosition::relayOfficer); n++)
{
create_crew_position_button(standard_crew_panel, n);
standard_crew_panel->setSize(standard_crew_panel->getSize() + glm::vec2(0.0f, 50.0f));
createCrewPositionButton(standard_crew_panel, n);
standard_crew_panel->setSize(standard_crew_panel->getSize() + glm::vec2(0.0f, button_height));
}

// 4/3/1 player crew panel
for (int n = int(CrewPosition::tacticalOfficer); n <= int(CrewPosition::singlePilot); n++)
{
create_crew_position_button(limited_crew_panel, n);
limited_crew_panel->setSize(limited_crew_panel->getSize() + glm::vec2(0.0f, 50.0f));
createCrewPositionButton(limited_crew_panel, n);
limited_crew_panel->setSize(limited_crew_panel->getSize() + glm::vec2(0.0f, button_height));
}

// Center column
// 3D screens panel
auto space_screens_panel = new GuiPanel(center_container, "");
space_screens_panel->setSize(GuiElement::GuiSizeMax, 180.0f);
space_screens_panel->setSize(GuiElement::GuiSizeMax, 170.0f);
space_screens_panel->setAttribute("margin", "0, 0, 0, 20");
space_screens_panel->setAttribute("padding", "20, 20, 0, 20");
space_screens_panel->setAttribute("layout", "vertical");
(new GuiLabel(space_screens_panel, "CREW_POSITION_SELECT_LABEL", tr("3D screens"), 30.0f))->addBackground()->setSize(GuiElement::GuiSizeMax, 50.0f)->setAttribute("margin", "0, 0, 0, 10");

// 3D screens panel
// Main screen button
main_screen_button = new GuiToggleButton(space_screens_panel, "", tr("Main screen"), [this](bool value) {
my_player_info->commandSetMainScreen(window_index, value);
unselectSingleOptions();
});
main_screen_button
->setValue(my_player_info->main_screen & (1 << window_index))
->setSize(GuiElement::GuiSizeMax, 50.0f);
->setSize(GuiElement::GuiSizeMax, button_height);

// Window button
auto window_button_row = new GuiElement(space_screens_panel, "");
window_button_row->setSize(GuiElement::GuiSizeMax, 50.0f)->setAttribute("layout", "horizontal");
window_button_row->setSize(GuiElement::GuiSizeMax, button_height)->setAttribute("layout", "horizontal");
window_button = new GuiToggleButton(window_button_row, "WINDOW_BUTTON", tr("Ship window"), [this](bool value) {
disableAllExcept(window_button);
});
window_button->setSize(GuiElement::GuiSizeMax, 50.0f);
window_button->setSize(GuiElement::GuiSizeMax, GuiElement::GuiSizeMax);

window_angle = new GuiTextEntry(window_button_row, "WINDOW_ANGLE","0");
window_angle->setSize(75.0f, 50.0f);
window_angle->setSize(75.0f, button_height);
window_angle->setSelectOnFocus();
window_angle->callback([this](string text) { // Check validity: Only allow numbers and no more than 3 digits. Angles above 360 are fine though.
if (text !="" && text !="-") window_angle->setText(text.toInt());
Expand All @@ -823,12 +823,12 @@ CrewPositionSelection::CrewPositionSelection(GuiContainer* owner, string id, int
main_screen_controls_button = new GuiToggleButton(alternative_options_panel, "MAIN_SCREEN_CONTROLS_ENABLE", tr("Main screen controls"), [this](bool value) {
my_player_info->commandSetMainScreenControl(window_index, value);
});
main_screen_controls_button->setValue(my_player_info->main_screen_control)->setSize(GuiElement::GuiSizeMax, 50);
main_screen_controls_button->setValue(my_player_info->main_screen_control)->setSize(GuiElement::GuiSizeMax, button_height);

for (int n = int(CrewPosition::singlePilot) + 1; n < int(CrewPosition::MAX); n++)
{
create_crew_position_button(alternative_options_panel, n);
alternative_options_panel->setSize(alternative_options_panel->getSize() + glm::vec2(0.0f, 50.0f));
createCrewPositionButton(alternative_options_panel, n);
alternative_options_panel->setSize(alternative_options_panel->getSize() + glm::vec2(0.0f, button_height));
}

// Right column
Expand Down
2 changes: 2 additions & 0 deletions src/menus/shipSelectionScreen.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,9 @@ class CrewPositionSelection : public GuiPanel
void disableAllExcept(GuiToggleButton* button);
void unselectSingleOptions();

const float button_height = 45.0f;
int window_index;

GuiButton* ready_button;
GuiToggleButton* main_screen_button;
GuiToggleButton* crew_position_button[static_cast<int>(CrewPosition::MAX)];
Expand Down
9 changes: 9 additions & 0 deletions src/playerInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "screens/extra/powerManagement.h"
#include "screens/extra/databaseScreen.h"
#include "screens/extra/commsScreen.h"
#include "screens/extra/scannerScreen.h"
#include "screens/extra/shipLogScreen.h"

#include "screenComponents/mainScreenControls.h"
Expand Down Expand Up @@ -1099,6 +1100,10 @@ void PlayerInfo::spawnUI(int monitor_index, RenderLayer* render_layer)
screen->addStationTab(new DamageControlScreen(container), CrewPosition::damageControl, getCrewPositionName(CrewPosition::damageControl), getCrewPositionIcon(CrewPosition::damageControl));
if (cps.has(CrewPosition::powerManagement))
screen->addStationTab(new PowerManagementScreen(container), CrewPosition::powerManagement, getCrewPositionName(CrewPosition::powerManagement), getCrewPositionIcon(CrewPosition::powerManagement));
if (cps.has(CrewPosition::altScience))
screen->addStationTab(new ScienceScreen(container, false), CrewPosition::altScience, getCrewPositionName(CrewPosition::altScience), getCrewPositionIcon(CrewPosition::altScience));
if (cps.has(CrewPosition::scanOnly))
screen->addStationTab(new ScannerScreen(container), CrewPosition::scanOnly, getCrewPositionName(CrewPosition::scanOnly), getCrewPositionIcon(CrewPosition::scanOnly));
if (cps.has(CrewPosition::databaseView))
screen->addStationTab(new DatabaseScreen(container), CrewPosition::databaseView, getCrewPositionName(CrewPosition::databaseView), getCrewPositionIcon(CrewPosition::databaseView));
if (cps.has(CrewPosition::altRelay))
Expand Down Expand Up @@ -1149,6 +1154,8 @@ string getCrewPositionName(CrewPosition position)
case CrewPosition::singlePilot: return tr("station","Single Pilot");
case CrewPosition::damageControl: return tr("station","Damage Control");
case CrewPosition::powerManagement: return tr("station","Power Management");
case CrewPosition::altScience: return tr("station","Long-range Radar");
case CrewPosition::scanOnly: return tr("station","Scanner");
case CrewPosition::databaseView: return tr("station","Database");
case CrewPosition::altRelay: return tr("station","Strategic Map");
case CrewPosition::commsOnly: return tr("station","Comms");
Expand All @@ -1172,6 +1179,8 @@ string getCrewPositionIcon(CrewPosition position)
case CrewPosition::singlePilot: return "";
case CrewPosition::damageControl: return "";
case CrewPosition::powerManagement: return "";
case CrewPosition::altScience: return "";
case CrewPosition::scanOnly: return "";
case CrewPosition::databaseView: return "";
case CrewPosition::altRelay: return "";
case CrewPosition::commsOnly: return "";
Expand Down
4 changes: 2 additions & 2 deletions src/screenComponents/frequencyCurve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ void GuiFrequencyCurve::onDraw(sp::RenderTarget& renderer)
} // end if enemy_has_equipment
else {
if (frequency_is_beam)
renderer.drawText(rect, tr("scienceFrequencyGraph", "No enemy beams"), sp::Alignment::Center, 35);
renderer.drawText(rect, tr("scienceFrequencyGraph", "No beams"), sp::Alignment::Center, 35);
else
renderer.drawText(rect, tr("scienceFrequencyGraph", "No enemy shields"), sp::Alignment::Center, 35);
renderer.drawText(rect, tr("scienceFrequencyGraph", "No shields"), sp::Alignment::Center, 35);
}
}else{
renderer.drawText(rect, tr("scienceFrequencyGraph", "No data"), sp::Alignment::Center, 35);
Expand Down
48 changes: 34 additions & 14 deletions src/screenComponents/scanTargetButton.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "scanTargetButton.h"
#include "gameGlobalInfo.h"
#include "playerInfo.h"
#include "targetsContainer.h"
#include "gui/gui2_button.h"
Expand All @@ -8,8 +9,8 @@
#include "i18n.h"


GuiScanTargetButton::GuiScanTargetButton(GuiContainer* owner, string id, TargetsContainer* targets)
: GuiElement(owner, id), targets(targets)
GuiScanTargetButton::GuiScanTargetButton(GuiContainer* owner, string id, TargetsContainer* targets, bool allow_scanning)
: GuiElement(owner, id), targets(targets), allow_scanning(allow_scanning)
{
button = new GuiButton(this, id + "_BUTTON", tr("scienceButton", "Scan"), [this]() {
if (my_spaceship && this->targets && this->targets->get())
Expand All @@ -28,28 +29,47 @@ void GuiScanTargetButton::onUpdate()
void GuiScanTargetButton::onDraw(sp::RenderTarget& target)
{
auto ss = my_spaceship.getComponent<ScienceScanner>();
if (!ss)
return;
if (!ss) return;

if (ss->delay > 0.0f)
{
progress->show();
progress->setRange(0, ss->max_scanning_delay);
progress->setValue(ss->delay);
button->hide();
if (allow_scanning && gameGlobalInfo->scanning_complexity == EScanningComplexity::SC_None)
{
progress
->setText(tr("scienceButton", "Scanning..."))
->setRange(0.0f, ss->max_scanning_delay)
->setValue(ss->delay)
->show();
button->hide();
}
else
{
progress->hide();
button
->setText(tr("scienceButton", "Scan initiated..."))
->disable();
}
}
else
{
button->show();
progress->hide();

sp::ecs::Entity obj;
if (targets)
obj = targets->get();
if (targets) obj = targets->get();

button->show();
auto scanstate = obj.getComponent<ScanState>();
if (scanstate && scanstate->getStateFor(my_spaceship) != ScanState::State::FullScan)
button->enable();
{
button
->setText(allow_scanning ? tr("sciencebutton", "Scan"): tr("sciencebutton", "Link to scanner"))
->enable();
}
else
button->disable();
progress->hide();
{
button
->setText(tr("sciencebutton", "No scanner target"))
->disable();
}
}
}
8 changes: 3 additions & 5 deletions src/screenComponents/scanTargetButton.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#ifndef SCAN_TARGET_BUTTON_H
#define SCAN_TARGET_BUTTON_H
#pragma once

#include "gui/gui2_element.h"

Expand All @@ -13,11 +12,10 @@ class GuiScanTargetButton : public GuiElement
TargetsContainer* targets;
GuiButton* button;
GuiProgressbar* progress;
bool allow_scanning = true;
public:
GuiScanTargetButton(GuiContainer* owner, string id, TargetsContainer* targets);
GuiScanTargetButton(GuiContainer* owner, string id, TargetsContainer* targets, bool allow_scanning=true);

virtual void onUpdate() override;
virtual void onDraw(sp::RenderTarget& target) override;
};

#endif//SCAN_TARGET_BUTTON_H
9 changes: 5 additions & 4 deletions src/screenComponents/scanningDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@
GuiScanningDialog::GuiScanningDialog(GuiContainer* owner, string id)
: GuiElement(owner, id)
{
locked = false;
lock_start_time = 0;
scan_depth = 0;

setSize(GuiElement::GuiSizeMax, GuiElement::GuiSizeMax);

box = new GuiPanel(this, id + "_BOX");
Expand Down Expand Up @@ -247,3 +243,8 @@ std::pair<int, int> GuiScanningDialog::getScanComplexityDepth()
}
return {complexity, depth};
}

bool GuiScanningDialog::isBoxVisible()
{
return isVisible() && box->isVisible();
}
6 changes: 2 additions & 4 deletions src/screenComponents/scanningDialog.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#ifndef SCANNING_DIALOG_H
#define SCANNING_DIALOG_H
#pragma once

#include "gui/gui2_element.h"
#include "signalQualityIndicator.h"
Expand Down Expand Up @@ -37,6 +36,5 @@ class GuiScanningDialog : public GuiElement

void setupParameters();
void updateSignal();
bool isBoxVisible();
};

#endif//SCANNING_DIALOG_H
2 changes: 1 addition & 1 deletion src/screens/crew4/operationsScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
OperationScreen::OperationScreen(GuiContainer* owner)
: GuiOverlay(owner, "", colorConfig.background)
{
science = new ScienceScreen(this, CrewPosition::operationsOfficer);
science = new ScienceScreen(this, true, CrewPosition::operationsOfficer);
science->setSize(GuiElement::GuiSizeMax, GuiElement::GuiSizeMax)->setMargins(0, 0, 0, 50);
science->science_radar->setCallbacks(
[this](sp::io::Pointer::Button button, glm::vec2 position) { // Down
Expand Down
Loading
Loading