Skip to content
Open
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
10 changes: 10 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ set(MAIN_SOURCES
src/screens/crew4/tacticalScreen.cpp
src/screens/crew6/engineeringScreen.cpp
src/screens/crew6/scienceScreen.cpp
src/screens/crew6/sensorScreen.cpp
src/screens/crew6/relayScreen.cpp
src/screens/crew6/weaponsScreen.cpp
src/screens/crew6/helmsScreen.cpp
Expand Down Expand Up @@ -301,11 +302,14 @@ set(MAIN_SOURCES
src/screenComponents/beamFrequencySelector.cpp
src/screenComponents/radarView.cpp
src/screenComponents/rawScannerDataRadarOverlay.cpp
src/screenComponents/sensorScreenOverlay.cpp
src/screenComponents/scanTargetButton.cpp
src/screenComponents/snapSlider.cpp
src/screenComponents/indicatorOverlays.cpp
src/screenComponents/openCommsButton.cpp
src/screenComponents/combatManeuver.cpp
src/screenComponents/graph.cpp
src/screenComponents/graphLabel.cpp
src/screenComponents/rotatingModelView.cpp
src/screenComponents/shipDestroyedPopup.cpp
src/screenComponents/warpControls.cpp
Expand Down Expand Up @@ -518,6 +522,8 @@ set(MAIN_SOURCES
src/script/gm.cpp
src/script/scriptRandom.h
src/script/scriptRandom.cpp
src/utils/rawScannerUtil.h
src/utils/rawScannerUtil.cpp

src/ai/aiFactory.h
src/ai/ai.h
Expand Down Expand Up @@ -568,6 +574,8 @@ set(MAIN_SOURCES
src/screenComponents/beamFrequencySelector.h
src/screenComponents/beamTargetSelector.h
src/screenComponents/combatManeuver.h
src/screenComponents/graph.h
src/screenComponents/graphLabel.h
src/screenComponents/commsOverlay.h
src/screenComponents/customShipFunctions.h
src/screenComponents/databaseView.h
Expand All @@ -593,6 +601,7 @@ set(MAIN_SOURCES
src/screenComponents/powerDamageIndicator.h
src/screenComponents/radarView.h
src/screenComponents/rawScannerDataRadarOverlay.h
src/screenComponents/sensorScreenOverlay.h
src/screenComponents/rotatingModelView.h
src/screenComponents/scanningDialog.h
src/screenComponents/scanTargetButton.h
Expand Down Expand Up @@ -620,6 +629,7 @@ set(MAIN_SOURCES
src/screens/crew6/helmsScreen.h
src/screens/crew6/relayScreen.h
src/screens/crew6/scienceScreen.h
src/screens/crew6/sensorScreen.h
src/screens/crew6/weaponsScreen.h
src/screens/crewStationScreen.h
src/screens/extra/commsScreen.h
Expand Down
3 changes: 3 additions & 0 deletions resources/gui/colors.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ overlay_low_energy = #FF8000
overlay_low_power = #FF8000
overlay_overheating = #FF8000
overlay_hacked = #4040FF
overlay_electrical_signal = #FF2D54
overlay_biological_signal = #41FF51
overlay_gravity_signal = #4678FF

textbox = #FFFFFF
textbox.forground.disabled = #808080
Expand Down
6 changes: 5 additions & 1 deletion src/components/radar.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ class RawRadarSignatureInfo
float gravity;
float electrical;
float biological;
float size;

RawRadarSignatureInfo()
: gravity(0), electrical(0), biological(0) {}
: gravity(0), electrical(0), biological(0), size(0) {}

RawRadarSignatureInfo(float gravity, float electrical, float biological)
: gravity(gravity), electrical(electrical), biological(biological) {}
Expand Down Expand Up @@ -68,6 +69,9 @@ class LongRangeRadar
float short_range = 5000.0f;
float long_range = 30000.0f;

float raw_radar_range = 60000.0f;
float raw_radar_noise_floor = 0.3f;

bool waypoints_dirty = true;
std::vector<glm::vec2> waypoints;
sp::ecs::Entity radar_view_linked_entity;
Expand Down
3 changes: 3 additions & 0 deletions src/crewPosition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ string crewPositionToString(CrewPosition value) {
case CrewPosition::engineering: return "engineering";
case CrewPosition::scienceOfficer: return "science";
case CrewPosition::relayOfficer: return "relay";
case CrewPosition::sensorOfficer: return "sensor";
case CrewPosition::tacticalOfficer: return "tactical";
case CrewPosition::engineeringAdvanced: return "engineering+";
case CrewPosition::operationsOfficer: return "operations";
Expand All @@ -33,6 +34,8 @@ std::optional<CrewPosition> tryParseCrewPosition(string value) {
return CrewPosition::scienceOfficer;
else if (value == "relay" || value == "relayofficer")
return CrewPosition::relayOfficer;
else if (value == "sensor" || value == "sensorofficer")
return CrewPosition::sensorOfficer;

//4/3 player crew
else if (value == "tactical" || value == "tacticalofficer")
Expand Down
1 change: 1 addition & 0 deletions src/crewPosition.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ enum class CrewPosition
engineering,
scienceOfficer,
relayOfficer,
sensorOfficer,
//4/3 player crew
tacticalOfficer, //helms+weapons-shields
engineeringAdvanced,//engineering+shields
Expand Down
3 changes: 3 additions & 0 deletions src/gui/colorConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ void ColorConfig::load()
DEF_COLOR(overlay_low_energy);
DEF_COLOR(overlay_low_power);
DEF_COLOR(overlay_overheating);
DEF_COLOR(overlay_electrical_signal);
DEF_COLOR(overlay_biological_signal);
DEF_COLOR(overlay_gravity_signal);

DEF_COLOR(ship_waypoint_background);
DEF_COLOR(ship_waypoint_text);
Expand Down
3 changes: 3 additions & 0 deletions src/gui/colorConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ class ColorConfig
glm::u8vec4 overlay_low_energy;
glm::u8vec4 overlay_low_power;
glm::u8vec4 overlay_overheating;
glm::u8vec4 overlay_electrical_signal;
glm::u8vec4 overlay_biological_signal;
glm::u8vec4 overlay_gravity_signal;

glm::u8vec4 ship_waypoint_background;
glm::u8vec4 ship_waypoint_text;
Expand Down
2 changes: 1 addition & 1 deletion src/menus/shipSelectionScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ CrewPositionSelection::CrewPositionSelection(GuiContainer* owner, string id, int
crew_position_button[n] = button;
return button;
};
for(int n=0; n<=int(CrewPosition::relayOfficer); n++)
for(int n=0; n<=int(CrewPosition::sensorOfficer); n++)
create_crew_position_button(layout, n);


Expand Down
2 changes: 2 additions & 0 deletions src/multiplayer/radar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ BASIC_REPLICATION_IMPL(RawRadarSignatureInfoReplication, RawRadarSignatureInfo)
BASIC_REPLICATION_IMPL(LongRangeRadarReplication, LongRangeRadar)
BASIC_REPLICATION_FIELD(short_range);
BASIC_REPLICATION_FIELD(long_range);
BASIC_REPLICATION_FIELD(raw_radar_range);
BASIC_REPLICATION_FIELD(raw_radar_noise_floor);
REPLICATE_VECTOR_IF_DIRTY(waypoints, waypoints_dirty);
BASIC_REPLICATION_FIELD(radar_view_linked_entity);
}
Expand Down
6 changes: 6 additions & 0 deletions src/playerInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "screens/crew6/engineeringScreen.h"
#include "screens/crew6/scienceScreen.h"
#include "screens/crew6/relayScreen.h"
#include "screens/crew6/sensorScreen.h"

#include "screens/crew4/tacticalScreen.h"
#include "screens/crew4/engineeringAdvancedScreen.h"
Expand Down Expand Up @@ -1088,6 +1089,9 @@ void PlayerInfo::spawnUI(int monitor_index, RenderLayer* render_layer)
screen->addStationTab(new ScienceScreen(container), CrewPosition::scienceOfficer, getCrewPositionName(CrewPosition::scienceOfficer), getCrewPositionIcon(CrewPosition::scienceOfficer));
if (cps.has(CrewPosition::relayOfficer))
screen->addStationTab(new RelayScreen(container, true), CrewPosition::relayOfficer, getCrewPositionName(CrewPosition::relayOfficer), getCrewPositionIcon(CrewPosition::relayOfficer));
if (cps.has(CrewPosition::sensorOfficer))
screen->addStationTab(new SensorScreen(container), CrewPosition::sensorOfficer, getCrewPositionName(CrewPosition::sensorOfficer), getCrewPositionIcon(CrewPosition::sensorOfficer));


//Crew 4/3
if (cps.has(CrewPosition::tacticalOfficer))
Expand Down Expand Up @@ -1150,6 +1154,7 @@ string getCrewPositionName(CrewPosition position)
case CrewPosition::engineering: return tr("station","Engineering");
case CrewPosition::scienceOfficer: return tr("station","Science");
case CrewPosition::relayOfficer: return tr("station","Relay");
case CrewPosition::sensorOfficer: return tr("station","Sensor");
case CrewPosition::tacticalOfficer: return tr("station","Tactical");
case CrewPosition::engineeringAdvanced: return tr("station","Engineering+");
case CrewPosition::operationsOfficer: return tr("station","Operations");
Expand All @@ -1173,6 +1178,7 @@ string getCrewPositionIcon(CrewPosition position)
case CrewPosition::engineering: return "gui/icons/station-engineering";
case CrewPosition::scienceOfficer: return "gui/icons/station-science";
case CrewPosition::relayOfficer: return "gui/icons/station-relay";
case CrewPosition::sensorOfficer: return "gui/icons/station-science";
case CrewPosition::tacticalOfficer: return "";
case CrewPosition::engineeringAdvanced: return "";
case CrewPosition::operationsOfficer: return "";
Expand Down
90 changes: 90 additions & 0 deletions src/screenComponents/graph.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#include <i18n.h>
#include "playerInfo.h"
#include "components/maneuveringthrusters.h"
#include "graph.h"
#include "powerDamageIndicator.h"
#include "snapSlider.h"
#include <vector>

#include "gui/gui2_progressbar.h"

GuiGraph::GuiGraph(GuiContainer *owner, string id, glm::u8vec4 color)
: GuiElement(owner, id), auto_scale_y(true), show_axis_zero(true)
{
this->color = color;
data = std::vector<float>(2, 0.0f);
}

void GuiGraph::updateData(std::vector<float> new_data)
{
if (new_data.size() != data.size())
{
data.resize(new_data.size());
}

for (int i = 0; i < data.size(); i++)
{
data[i] = new_data[i];
}
}

void GuiGraph::onDraw(sp::RenderTarget &renderer)
{
// Find max

float max = -std::numeric_limits<float>::infinity();
float min = std::numeric_limits<float>::infinity();
if(auto_scale_y)
{
for (int i = 0; i < data.size(); i++)
{
if (data[i] > max)
max = data[i];
if (data[i] < min)
min = data[i];
}
}
else
{
max = y_max;
min = y_min;
}

float range = max - min;

if (show_axis_zero)
{
std::vector<glm::vec2> zero_line(2);
zero_line[0] = glm::vec2(
rect.position.x,
rect.position.y + rect.size.y + rect.size.y * min / range);
zero_line[1] = glm::vec2(
rect.position.x + rect.size.x,
rect.position.y + rect.size.y + rect.size.y * min / range);
renderer.drawLineBlendAdd(zero_line, glm::u8vec4(100, 100, 100, 255));
}

std::vector<glm::vec2> graph_points(data.size());
for (int i = 0; i < data.size(); i++)
{
graph_points[i] = glm::vec2(
rect.position.x + rect.size.x * i / (float)data.size(),
rect.position.y + rect.size.y - rect.size.y * ((data[i] - min) / range));
}
renderer.drawLineBlendAdd(graph_points, this->color); // red
}

GuiGraph* GuiGraph::setYlimit(float min, float max)

{
auto_scale_y = false;
y_min = min;
y_max = max;
return this;
}

void GuiGraph::onMouseDrag(glm::vec2 position, sp::io::Pointer::ID id)
{
if (on_drag_callback)
on_drag_callback(position);
}
28 changes: 28 additions & 0 deletions src/screenComponents/graph.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#pragma once

#include "gui/gui2_element.h"

class GuiGraph : public GuiElement
{
private:
std::vector<float> data;
bool auto_scale_y;
bool show_axis_zero;
float y_min;
float y_max;
glm::u8vec4 color;
std::function<void(glm::vec2)> on_drag_callback;

public:
GuiGraph(GuiContainer *owner, string id, glm::u8vec4 color);

GuiGraph *showAxisZero(bool value){show_axis_zero = value; return this;};
void updateData(std::vector<float> data);
GuiGraph *setYlimit(float min, float max);
GuiGraph *setAutoScaleY(bool value) { auto_scale_y = value; return this;}
GuiGraph *setColor(glm::u8vec4 value) {color = value; return this;}
GuiGraph *setOnDragCallback(std::function<void(glm::vec2)> callback) { on_drag_callback = callback; return this; }

virtual void onDraw(sp::RenderTarget &renderer) override;
virtual void onMouseDrag(glm::vec2 position, sp::io::Pointer::ID id) override;
};
88 changes: 88 additions & 0 deletions src/screenComponents/graphLabel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#include "screenComponents/graphLabel.h"
#include "playerInfo.h"
#include "main.h"

GuiGraphLabel::GuiGraphLabel(GuiContainer* owner, string id)
: GuiElement(owner, id), text_size(20.0f)
{
}

void GuiGraphLabel::onDraw(sp::RenderTarget& renderer)
{


int major_ticks_start = ceil(start / major_tick_size);
int major_ticks_stop = floor(stop / major_tick_size);
int minor_tick_size = floor(major_tick_size / (minor_tick_number + 1));

float major_tick_Y_size = 1.0f;
float minor_tick_Y_size = 0.5f;
if (display_label_text)
{
major_tick_Y_size = 0.5f * major_tick_Y_size;
minor_tick_Y_size = 0.5f * minor_tick_Y_size;
}

// Draw major and minor ticks
auto major_color = glm::uvec4(255,255,255,255);
auto minor_color = glm::uvec4(255,255,255,100);
for(int i = major_ticks_start; i <= major_ticks_stop; i++)
{
float major_tick_pos = (i * major_tick_size);
std::vector<glm::vec2> temp =
{
glm::vec2(rect.position.x + rect.size.x * (major_tick_pos - start)/(stop-start), rect.position.y),
glm::vec2(rect.position.x + rect.size.x * (major_tick_pos - start)/(stop-start), rect.position.y + rect.size.y * major_tick_Y_size),
};
renderer.drawLineBlendAdd(temp, major_color);

if(display_label_text)
{
auto text_box_position = glm::vec2(
rect.position.x + rect.size.x * (major_tick_pos - major_tick_size / 2 - start)/(stop-start),
rect.position.y + rect.size.y * major_tick_Y_size
);
auto text_box_size = glm::vec2(
rect.size.x * major_tick_size / (stop-start),
rect.size.y * (1 - major_tick_Y_size)
);

auto text_box = sp::Rect(
text_box_position,
text_box_size
);

string text;
if(modulo > 0)
{
float temp = fmodf(major_tick_pos, modulo);
if(temp < 0)
temp += modulo;
text = string(int(temp));
}
else
text = string(int(major_tick_pos));

renderer.drawText(
text_box,
text,
sp::Alignment::Center,
text_size,
main_font,
major_color
);
}

for(int j = 0; j < minor_tick_number; j++)
{
float minor_tick_pos = major_tick_pos + (j + 1) * minor_tick_size;
std::vector<glm::vec2> temp =
{
glm::vec2(rect.position.x + rect.size.x * (minor_tick_pos - start)/(stop-start), rect.position.y),
glm::vec2(rect.position.x + rect.size.x * (minor_tick_pos - start)/(stop-start), rect.position.y + rect.size.y * minor_tick_Y_size),
};
renderer.drawLineBlendAdd(temp, minor_color);

}
}
}
Loading
Loading