Pyrogenesis trunk
TerrainProperties.h
Go to the documentation of this file.
1/* Copyright (C) 2022 Wildfire Games.
2 * This file is part of 0 A.D.
3 *
4 * 0 A.D. is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * 0 A.D. is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18/*
19///////////////////////////////////////////////
20 CTerrainProperties
21
22 Basically represents a set of terrain attributes loaded from XML. These
23 objects are organized in an inheritance tree, determined at load time.
24
25*/
26
27#ifndef INCLUDED_TERRAINPROPERTIES
28#define INCLUDED_TERRAINPROPERTIES
29
30#include <memory>
31
32#include "ps/CStr.h"
34
35class CTerrainGroup;
36class XMBElement;
37class CXeromyces;
39
40typedef std::shared_ptr<CTerrainProperties> CTerrainPropertiesPtr;
41
43{
44public:
45 typedef std::vector<CTerrainGroup *> GroupVector;
46
47private:
49
50 // BGRA color of topmost mipmap level, for coloring minimap, or a color
51 // manually specified in the Terrain XML (or by any parent)
52 // ..Valid is true if the base color is specified in this terrain XML
53 // No caching here, since ideally, a saved XML file of an object should
54 // produce be equivalent to the source file
57
58 // Orientation of texture (in radians) (default pi/4 = 45 degrees)
60
61 // Size of texture in metres (default 32m = 8 tiles)
63
64 // All terrain type groups we're a member of
66
67public:
69
70 // Create a new object and load the XML file specified. Returns NULL upon
71 // failure
72 // The parent pointer may be NULL, for the "root" terrainproperties object.
73 static CTerrainPropertiesPtr FromXML(const CTerrainPropertiesPtr& parent, const VfsPath& pathname);
74
75 void LoadXml(XMBElement node, CXeromyces *pFile, const VfsPath& pathname);
76
77 // Save the object to an XML file. Implement when needed! ;-)
78 // bool WriteXML(const CStr& path);
79
81 {
82 return m_pParent;
83 }
84
85 // Return true if this property object or any of its parents has a basecolor
86 // override (mmap attribute in the XML file)
87 bool HasBaseColor();
88 // Return the minimap color specified in this property object or in any of
89 // its parents. If no minimap color is specified, return garbage.
90 // Use HasBaseColor() to see if the value is valid.
91 // The color value is in BGRA format
93
95 {
96 return m_TextureAngle;
97 }
98
100 {
101 return m_TextureSize;
102 }
103
104 const GroupVector &GetGroups() const
105 {
106 return m_Groups;
107 }
108};
109
110#endif
std::shared_ptr< CTerrainProperties > CTerrainPropertiesPtr
Definition: TerrainProperties.h:40
Definition: TerrainTextureManager.h:42
Definition: TerrainProperties.h:43
const GroupVector & GetGroups() const
Definition: TerrainProperties.h:104
bool HasBaseColor()
Definition: TerrainProperties.cpp:140
u32 GetBaseColor()
Definition: TerrainProperties.cpp:145
CTerrainPropertiesPtr GetParent() const
Definition: TerrainProperties.h:80
float GetTextureSize()
Definition: TerrainProperties.h:99
float m_TextureAngle
Definition: TerrainProperties.h:59
bool m_HasBaseColor
Definition: TerrainProperties.h:56
std::vector< CTerrainGroup * > GroupVector
Definition: TerrainProperties.h:45
float m_TextureSize
Definition: TerrainProperties.h:62
void LoadXml(XMBElement node, CXeromyces *pFile, const VfsPath &pathname)
Definition: TerrainProperties.cpp:90
GroupVector m_Groups
Definition: TerrainProperties.h:65
u32 m_BaseColor
Definition: TerrainProperties.h:55
static CTerrainPropertiesPtr FromXML(const CTerrainPropertiesPtr &parent, const VfsPath &pathname)
Definition: TerrainProperties.cpp:44
float GetTextureAngle()
Definition: TerrainProperties.h:94
CTerrainProperties(CTerrainPropertiesPtr parent)
Definition: TerrainProperties.cpp:33
CTerrainPropertiesPtr m_pParent
Definition: TerrainProperties.h:48
Definition: Xeromyces.h:41
Definition: path.h:80
Definition: XMBData.h:136
uint32_t u32
Definition: types.h:39