Files

65 lines
1.8 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 = "#d8b480";
QString borderColorStr = "#52381c";
float width = 3.5f;
float worldWidth = 0.056f;
float borderWidth = 0.012f;
float textureScale = 4.5f;
float opacity = 0.96f;
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