62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
#ifndef ROADCONFIG_H
|
|
#define ROADCONFIG_H
|
|
|
|
#include <QString>
|
|
#include <QMap>
|
|
#include <QColor>
|
|
#include <QVector3D>
|
|
|
|
struct TileRoad {
|
|
QString roadTypeId = "dirt"; // "dirt", "stone", "rail"
|
|
int tileX = 0;
|
|
int tileY = 0;
|
|
int playerId = 1;
|
|
unsigned char connectionMask = 0; // 6 bits: bit e (0..5) is 1 if connected to neighbor across edge e
|
|
QVector3D worldPos;
|
|
|
|
bool hasConnection(int edge) const {
|
|
return (connectionMask & (1 << (edge % 6))) != 0;
|
|
}
|
|
void setConnection(int edge, bool connected) {
|
|
if (connected) connectionMask |= (1 << (edge % 6));
|
|
else connectionMask &= ~(1 << (edge % 6));
|
|
}
|
|
};
|
|
|
|
struct RoadTypeConfig {
|
|
QString id = "dirt";
|
|
QString name = "Dirt Road";
|
|
float speedMultiplier = 1.30f;
|
|
QString colorStr = "#c49a62";
|
|
QString borderColorStr = "#6b4b23";
|
|
float width = 3.5f;
|
|
float worldWidth = 0.11f;
|
|
int cost = 5;
|
|
|
|
QColor getColor() const { return QColor(colorStr); }
|
|
QColor getBorderColor() const { return QColor(borderColorStr); }
|
|
};
|
|
|
|
class RoadConfigManager {
|
|
public:
|
|
RoadConfigManager();
|
|
|
|
bool loadConfigFile(const QString &filePath);
|
|
const RoadTypeConfig* getRoadType(const QString &id) const;
|
|
const QMap<QString, RoadTypeConfig>& getAllRoadTypes() const { return m_types; }
|
|
|
|
QString defaultRoadType() const { return m_defaultRoadType; }
|
|
int buildDurationTicks() const { return m_buildDurationTicks; }
|
|
float meanderAmplitude() const { return m_meanderAmplitude; }
|
|
int meanderSubdivisions() const { return m_meanderSubdivisions; }
|
|
|
|
private:
|
|
QString m_defaultRoadType;
|
|
int m_buildDurationTicks;
|
|
float m_meanderAmplitude;
|
|
int m_meanderSubdivisions;
|
|
QMap<QString, RoadTypeConfig> m_types;
|
|
};
|
|
|
|
#endif // ROADCONFIG_H
|