schematic selection dialog

This commit is contained in:
2026-06-13 12:00:05 +02:00
parent 1641189b75
commit 49f7129bd5
25 changed files with 453 additions and 268 deletions

View File

@@ -10,7 +10,8 @@ SET(HDRS
${CMAKE_CURRENT_SOURCE_DIR}/ItemType.h
${CMAKE_CURRENT_SOURCE_DIR}/Item.h
${CMAKE_CURRENT_SOURCE_DIR}/Port.h
${CMAKE_CURRENT_SOURCE_DIR}/SchematicDropEvent.h
${CMAKE_CURRENT_SOURCE_DIR}/SchematicChoiceOption.h
${CMAKE_CURRENT_SOURCE_DIR}/DisplayName.h
PARENT_SCOPE
)
@@ -18,6 +19,7 @@ SET(SRCS
${SRCS}
${CMAKE_CURRENT_SOURCE_DIR}/BuildingType.cpp
${CMAKE_CURRENT_SOURCE_DIR}/EntityAdmin.cpp
${CMAKE_CURRENT_SOURCE_DIR}/DisplayName.cpp
PARENT_SCOPE
)

View File

@@ -0,0 +1,27 @@
#include "DisplayName.h"
#include <cctype>
std::string toDisplayName(const std::string& id)
{
std::string result;
bool nextUpper = true;
for (char c : id)
{
if (c == '_')
{
result += ' ';
nextUpper = true;
}
else if (nextUpper)
{
result += static_cast<char>(std::toupper(static_cast<unsigned char>(c)));
nextUpper = false;
}
else
{
result += c;
}
}
return result;
}

View File

@@ -0,0 +1,5 @@
#pragma once
#include <string>
std::string toDisplayName(const std::string& id);

View File

@@ -0,0 +1,22 @@
#pragma once
#include <string>
enum class SchematicType
{
Ship,
Module,
Recipe
};
// One option presented to the player in the schematic choice dialog
// (REQ-DEF-SCHEMATIC-DROP). Built by the simulation when enemy stations are
// destroyed; the UI reads these to populate the dialog.
struct SchematicChoiceOption
{
std::string schematicId;
SchematicType type;
std::string displayName;
bool isNewUnlock;
int targetLevel;
};

View File

@@ -1,15 +0,0 @@
#pragma once
#include <string>
// Emitted in tick step 9 (Deaths & loot) when a destroyed enemy-defence-station
// set awards a schematic (REQ-DEF-SCHEMATIC-DROP). The UI renders a toast
// (REQ-UI-SCHEMATIC-TOAST); wasNewUnlock chooses between the "unlocked" and
// "level -> N" wording. isModuleSchematic selects ship vs. module toast text.
struct SchematicDropEvent
{
std::string schematicId; // matches ShipDef::id or ModuleDef::id in the config.
int newLevel;
bool wasNewUnlock;
bool isModuleSchematic;
};