Skip to content

Commit

Permalink
Add damage control screen. Which can be run on a seperate screen to s…
Browse files Browse the repository at this point in the history
…plit up the engineering task. Does require a power management screen as well.
  • Loading branch information
daid committed Nov 4, 2015
1 parent e56c86a commit 950054f
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 2 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Expand Up @@ -21,7 +21,7 @@ set(SOURCES
src/screens/crewStationScreen.cpp src/screens/topDownScreen.cpp src/screens/gameMasterScreen.cpp src/screens/windowScreen.cpp src/screens/mainScreen.cpp
src/screens/crew4/operationsScreen.cpp src/screens/crew4/engineeringAdvancedScreen.cpp src/screens/crew4/tacticalScreen.cpp
src/screens/crew6/engineeringScreen.cpp src/screens/crew6/scienceScreen.cpp src/screens/crew6/relayScreen.cpp src/screens/crew6/weaponsScreen.cpp src/screens/crew6/helmsScreen.cpp
src/screens/crew1/singlePilotScreen.cpp
src/screens/crew1/singlePilotScreen.cpp src/screens/extra/damcon.cpp
src/screenComponents/missileTubeControls.cpp src/screenComponents/selfDestructIndicator.cpp src/screenComponents/viewport3d.cpp src/screenComponents/selfDestructEntry.cpp src/screenComponents/dockingButton.cpp src/screenComponents/shieldsEnableButton.cpp src/screenComponents/selfDestructButton.cpp src/screenComponents/shieldFreqencySelect.cpp src/screenComponents/jumpControls.cpp src/screenComponents/impulseControls.cpp src/screenComponents/frequencyCurve.cpp src/screenComponents/noiseOverlay.cpp src/screenComponents/powerDamageIndicator.cpp src/screenComponents/beamTargetSelector.cpp src/screenComponents/shipInternalView.cpp src/screenComponents/beamFrequencySelector.cpp src/screenComponents/radarView.cpp src/screenComponents/scanTargetButton.cpp src/screenComponents/snapSlider.cpp src/screenComponents/indicatorOverlays.cpp src/screenComponents/openCommsButton.cpp src/screenComponents/combatManeuver.cpp src/screenComponents/rotatingModelView.cpp src/screenComponents/shipDestroyedPopup.cpp src/screenComponents/warpControls.cpp src/screenComponents/targetsContainer.cpp src/screenComponents/globalMessage.cpp src/screenComponents/commsOverlay.cpp src/screenComponents/jumpIndicator.cpp src/screenComponents/scanningDialog.cpp src/screenComponents/signalQualityIndicator.cpp src/screenComponents/mainScreenControls.cpp
src/gui/mouseRenderer.cpp src/gui/scriptError.cpp src/gui/gui2_slider.cpp src/gui/gui2_togglebutton.cpp src/gui/gui2_arrow.cpp src/gui/gui2_selector.cpp src/gui/gui2_canvas.cpp src/gui/gui2_rotationdial.cpp src/gui/gui2_textentry.cpp src/gui/gui2_label.cpp src/gui/gui2_autolayout.cpp src/gui/gui2_arrowbutton.cpp src/gui/gui2_entrylist.cpp src/gui/gui2_progressbar.cpp src/gui/gui2_scrolltext.cpp src/gui/gui2_button.cpp src/gui/debugRenderer.cpp src/gui/gui2_element.cpp src/gui/gui2.cpp src/gui/gui2_keyvaluedisplay.cpp src/gui/gui2_listbox.cpp src/gui/gui2_scrollbar.cpp src/gui/gui2_container.cpp src/gui/gui2_box.cpp src/gui/gui2_overlay.cpp
src/spaceObjects/spaceStation.cpp src/spaceObjects/spaceship.cpp src/spaceObjects/wormHole.cpp src/spaceObjects/spaceObject.cpp src/spaceObjects/nebula.cpp src/spaceObjects/explosionEffect.cpp src/spaceObjects/cpuShip.cpp src/spaceObjects/asteroid.cpp src/spaceObjects/mine.cpp src/spaceObjects/blackHole.cpp src/spaceObjects/missileWeapon.cpp src/spaceObjects/EMPMissile.cpp src/spaceObjects/playerSpaceship.cpp src/spaceObjects/beamEffect.cpp src/spaceObjects/homingMissile.cpp src/spaceObjects/electricExplosionEffect.cpp src/spaceObjects/supplyDrop.cpp src/spaceObjects/warpJammer.cpp src/spaceObjects/scanProbe.cpp src/spaceObjects/nuke.cpp src/spaceObjects/artifact.cpp
Expand Down
3 changes: 2 additions & 1 deletion src/menus/shipSelectionScreen.cpp
Expand Up @@ -68,7 +68,7 @@ ShipSelectionScreen::ShipSelectionScreen()
crew_type_selector = new GuiSelector(this, "CREW_TYPE_SELECTION", [this](int index, string value) {
updateCrewTypeOptions();
});
crew_type_selector->setOptions({"6/5 player crew", "4/3 player crew", "1 player crew", "Alternative options"})->setPosition(-50, 560, ATopRight)->setSize(460, 50);
crew_type_selector->setOptions({"6/5 player crew", "4/3 player crew", "1 player crew/extras", "Alternative options"})->setPosition(-50, 560, ATopRight)->setSize(460, 50);

(new GuiLabel(this, "SHIP_SELECTION_LABEL", "Select ship:", 30))->addBox()->setPosition(50, 50, ATopLeft)->setSize(550, 50);
no_ships_label = new GuiLabel(this, "SHIP_SELECTION_NO_SHIPS_LABEL", "Waiting for server to spawn a ship", 30);
Expand Down Expand Up @@ -209,6 +209,7 @@ void ShipSelectionScreen::updateCrewTypeOptions()
break;
case 2:
crew_position_button[singlePilot]->show();
crew_position_button[damageControl]->show();
break;
case 3:
main_screen_button->hide();
Expand Down
6 changes: 6 additions & 0 deletions src/playerInfo.cpp
Expand Up @@ -14,6 +14,8 @@

#include "screens/crew1/singlePilotScreen.h"

#include "screens/extra/damcon.h"

#include "screenComponents/mainScreenControls.h"
#include "screenComponents/selfDestructEntry.h"

Expand Down Expand Up @@ -137,6 +139,9 @@ void PlayerInfo::spawnUI()
//Crew 1
if (crew_position[singlePilot])
screen->addStationTab(new SinglePilotScreen(screen), getCrewPositionName(singlePilot));
//Extra
if (crew_position[damageControl])
screen->addStationTab(new DamageControlScreen(screen), getCrewPositionName(damageControl));

GuiSelfDestructEntry* sde = new GuiSelfDestructEntry(screen, "SELF_DESTRUCT_ENTRY");
for(int n=0; n<max_crew_positions; n++)
Expand Down Expand Up @@ -177,6 +182,7 @@ string getCrewPositionName(ECrewPosition position)
case engineeringAdvanced: return "Engineering+";
case operationsOfficer: return "Operations";
case singlePilot: return "Single Pilot";
case damageControl: return "Damage Control";
default: return "ErrUnk: " + string(position);
}
}
2 changes: 2 additions & 0 deletions src/screenComponents/shipInternalView.cpp
Expand Up @@ -144,6 +144,7 @@ void GuiShipRoom::onDraw(sf::RenderTarget& window)
break;
}
sprite.setPosition(getCenterPoint());
sprite.setScale(room_size / 48.0f, room_size / 48.0f);
window.draw(sprite);
}
}
Expand Down Expand Up @@ -237,6 +238,7 @@ void GuiShipCrew::onDraw(sf::RenderTarget& window)
sf::Sprite select_sprite;
textureManager.setTexture(select_sprite, "redicule.png");
select_sprite.setPosition(getCenterPoint());
select_sprite.setScale(f, f);
window.draw(select_sprite);
}
}
Expand Down
32 changes: 32 additions & 0 deletions src/screens/extra/damcon.cpp
@@ -0,0 +1,32 @@
#include "damcon.h"

#include "playerInfo.h"
#include "screenComponents/shipInternalView.h"

DamageControlScreen::DamageControlScreen(GuiContainer* owner)
: GuiOverlay(owner, "DAMCON_SCREEN", sf::Color::Black)
{
(new GuiShipInternalView(this, "SHIP_INTERNAL_VIEW", 48.0f * 1.5f))->setShip(my_spaceship)->setPosition(300, 0, ATopLeft)->setSize(GuiElement::GuiSizeMax, GuiElement::GuiSizeMax);

GuiAutoLayout* system_health_layout = new GuiAutoLayout(this, "DAMCON_LAYOUT", GuiAutoLayout::LayoutVerticalTopToBottom);
system_health_layout->setPosition(0, 0, ACenterLeft)->setSize(300, 600);
for(unsigned int n=0; n<SYS_COUNT; n++)
{
system_health[n] = new GuiKeyValueDisplay(system_health_layout, "DAMCON_HEALTH_" + string(n), 0.8, getSystemName(ESystem(n)), "0%");
system_health[n]->setSize(GuiElement::GuiSizeMax, 40);
}
}

void DamageControlScreen::onDraw(sf::RenderTarget& window)
{
GuiOverlay::onDraw(window);

if (my_spaceship)
{
for(unsigned int n=0; n<SYS_COUNT; n++)
{
system_health[n]->setVisible(my_spaceship->hasSystem(ESystem(n)));
system_health[n]->setValue(string(int(my_spaceship->systems[n].health * 100)) + "%");
}
}
}
17 changes: 17 additions & 0 deletions src/screens/extra/damcon.h
@@ -0,0 +1,17 @@
#ifndef DAMCON_SCREEN_H
#define DAMCON_SCREEN_H

#include "gui/gui2.h"
#include "shipTemplate.h"

class DamageControlScreen : public GuiOverlay
{
private:
GuiKeyValueDisplay* system_health[SYS_COUNT];
public:
DamageControlScreen(GuiContainer* owner);

void onDraw(sf::RenderTarget& window) override;
};

#endif//DAMCON_SCREEN_H
6 changes: 6 additions & 0 deletions src/spaceObjects/playerSpaceship.h
Expand Up @@ -7,15 +7,21 @@

enum ECrewPosition
{
//6/5 player crew
helmsOfficer,
weaponsOfficer,
engineering,
scienceOfficer,
relayOfficer,
//4/3 player crew
tacticalOfficer, //helms+weapons-shields
engineeringAdvanced,//engineering+shields
operationsOfficer, //science+comms
//1 player crew
singlePilot,
//extras
damageControl,

max_crew_positions
};

Expand Down

0 comments on commit 950054f

Please sign in to comment.