1+ /* INCLUDES */
2+
3+ // Class header
4+ #include " TechTreeDesign.h"
5+
6+ // Other includes
7+ #include < algorithm>
8+ #include " Game.h"
9+ #include < mbstring.h>
10+
11+ /* DEFINITIONS */
12+
13+ // The DAT read function. Defined in TechTreeElement.cpp.
14+ extern int (__cdecl *ReadDataFromCompressedFile)(int fileHandle, char *dataBuffer, unsigned int dataBufferSize);
15+
16+ /* FUNCTIONS */
17+
18+ TechTreeDesign::TechTreeDesign (int datFileHandle)
19+ {
20+ // Read SLPs
21+ int len;
22+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
23+ _nodeSlpFileName = new char [len + 1 ];
24+ ReadDataFromCompressedFile (datFileHandle, _nodeSlpFileName, len);
25+ _nodeSlpFileName[len] = ' \0 ' ;
26+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_nodeSlpId), 4 );
27+
28+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
29+ _scrollSlpFileName = new char [len + 1 ];
30+ ReadDataFromCompressedFile (datFileHandle, _scrollSlpFileName, len);
31+ _scrollSlpFileName[len] = ' \0 ' ;
32+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollSlpId), 4 );
33+
34+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
35+ _tileSlpFileName = new char [len + 1 ];
36+ ReadDataFromCompressedFile (datFileHandle, _tileSlpFileName, len);
37+ _tileSlpFileName[len] = ' \0 ' ;
38+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_tileSlpId), 4 );
39+
40+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
41+ _legendAgesSlpFileName = new char [len + 1 ];
42+ ReadDataFromCompressedFile (datFileHandle, _legendAgesSlpFileName, len);
43+ _legendAgesSlpFileName[len] = ' \0 ' ;
44+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendAgesSlpId), 4 );
45+
46+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
47+ _legendDisableSlpFileName = new char [len + 1 ];
48+ ReadDataFromCompressedFile (datFileHandle, _legendDisableSlpFileName, len);
49+ _legendDisableSlpFileName[len] = ' \0 ' ;
50+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendDisableSlpId), 4 );
51+
52+ // Read scroll data
53+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_mouseScrollArea), 4 );
54+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_mouseScrollDelay), 4 );
55+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_mouseScrollOffset), 4 );
56+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_keyScrollOffset), 4 );
57+
58+ // Read button rectangles
59+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_closeButtonRelativeRectangle.X ), 4 );
60+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_closeButtonRelativeRectangle.Y ), 4 );
61+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_closeButtonRelativeRectangle.Width ), 4 );
62+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_closeButtonRelativeRectangle.Height ), 4 );
63+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollLeftButtonRelativeRectangle.X ), 4 );
64+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollLeftButtonRelativeRectangle.Y ), 4 );
65+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollLeftButtonRelativeRectangle.Width ), 4 );
66+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollLeftButtonRelativeRectangle.Height ), 4 );
67+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollRightButtonRelativeRectangle.X ), 4 );
68+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollRightButtonRelativeRectangle.Y ), 4 );
69+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollRightButtonRelativeRectangle.Width ), 4 );
70+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_scrollRightButtonRelativeRectangle.Height ), 4 );
71+
72+ // Read resolution data
73+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
74+ for (int i = 0 ; i < len; ++i)
75+ {
76+ // Read minimum height
77+ int minHeight;
78+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&minHeight), 4 );
79+
80+ // Read data and store results in local map
81+ _resolutionData[minHeight] = new ResolutionConfiguration (datFileHandle);
82+ }
83+
84+ // Read popup data
85+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_popupLabelDelay), 4 );
86+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_popupLabelWidth), 4 );
87+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_popupInnerPadding), 4 );
88+
89+ // Read popup bevel data
90+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(_popupBoxBevelColorIndices), 6 );
91+
92+ // Read remaining data
93+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_nodeFontIndex), 1 );
94+ }
95+
96+ TechTreeDesign::~TechTreeDesign ()
97+ {
98+ // Delete strings
99+ delete[] _nodeSlpFileName;
100+ delete[] _scrollSlpFileName;
101+ delete[] _tileSlpFileName;
102+ delete[] _legendAgesSlpFileName;
103+ delete[] _legendDisableSlpFileName;
104+
105+ // Delete resolution list
106+ for (auto &rc : _resolutionData)
107+ delete rc.second ;
108+ }
109+
110+ TechTreeDesign::ResolutionConfiguration::ResolutionConfiguration (int datFileHandle)
111+ {
112+ // Read values
113+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendFrameIndex), 4 );
114+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_ageFrameIndex), 4 );
115+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_tileFrameIndex), 4 );
116+
117+ // Read point
118+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendDisableSlpDrawPosition.X ), 4 );
119+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendDisableSlpDrawPosition.Y ), 4 );
120+
121+ // Read rectangles
122+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civBonusLabelRectangle.X ), 4 );
123+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civBonusLabelRectangle.Y ), 4 );
124+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civBonusLabelRectangle.Width ), 4 );
125+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civBonusLabelRectangle.Height ), 4 );
126+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionComboBoxRectangle.X ), 4 );
127+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionComboBoxRectangle.Y ), 4 );
128+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionComboBoxRectangle.Width ), 4 );
129+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionComboBoxRectangle.Height ), 4 );
130+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionTitleLabelRectangle.X ), 4 );
131+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionTitleLabelRectangle.Y ), 4 );
132+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionTitleLabelRectangle.Width ), 4 );
133+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_civSelectionTitleLabelRectangle.Height ), 4 );
134+
135+ // Read rectangles
136+ for (int i = 0 ; i < 6 ; ++i)
137+ {
138+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendLabelRectangles[i].X ), 4 );
139+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendLabelRectangles[i].Y ), 4 );
140+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendLabelRectangles[i].Width ), 4 );
141+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&_legendLabelRectangles[i].Height ), 4 );
142+ }
143+
144+ // Read rectangles
145+ int len;
146+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
147+ for (int i = 0 ; i < len; ++i)
148+ {
149+ Rect aLR;
150+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&aLR.X ), 4 );
151+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&aLR.Y ), 4 );
152+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&aLR.Width ), 4 );
153+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&aLR.Height ), 4 );
154+ _ageLabelRectangles.push_back (aLR);
155+ }
156+
157+ // Read draw offsets
158+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&len), 4 );
159+ for (int i = 0 ; i < len; ++i)
160+ {
161+ int vDO;
162+ ReadDataFromCompressedFile (datFileHandle, reinterpret_cast <char *>(&vDO), 4 );
163+ _verticalDrawOffsets.push_back (vDO);
164+ }
165+ }
166+
167+ TechTreeDesign::ResolutionConfiguration::~ResolutionConfiguration ()
168+ {
169+ // Nothing to do here
170+ }
0 commit comments