#ifndef ROADCONFIG_H #define ROADCONFIG_H #include #include #include #include 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& 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 m_types; }; #endif // ROADCONFIG_H