forked from Phobos-developers/YRpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFoggedObjectClass.h
More file actions
146 lines (123 loc) · 3.76 KB
/
FoggedObjectClass.h
File metadata and controls
146 lines (123 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#pragma once
#include <AbstractClass.h>
#include <Helpers/CompileTime.h>
// Forward declarations
class BuildingClass;
class TerrainClass;
class ObjectTypeClass;
class BuildingTypeClass;
class TerrainTypeClass;
class AnimTypeClass;
class NOVTABLE FoggedObjectClass : public AbstractClass
{
public:
static const AbstractType AbsID = AbstractType::FoggedObject;
static constexpr constant_ptr<DynamicVectorClass<FoggedObjectClass*>, 0x8B3D10> Array{};
struct DrawRecord
{
union {
ObjectTypeClass* ObjectType;
BuildingTypeClass* BuildingType;
TerrainTypeClass* TerrainType;
AnimTypeClass* AnimType;
};
int FrameIndex;
bool IsFireStormWall;
int zAdjust;
bool operator==(const DrawRecord&) const { return true; };
};
//IPersist
virtual HRESULT __stdcall GetClassID(CLSID* pClassID) R0;
//IPersistStream
virtual HRESULT __stdcall Load(IStream* pStm) R0;
virtual HRESULT __stdcall Save(IStream* pStm, BOOL fClearDirty) R0;
//Destructor
virtual ~FoggedObjectClass() RX;
//AbstractClass
virtual AbstractType WhatAmI() const RT(AbstractType);
virtual int Size() const R0;
virtual CellStruct* GetMapCoords(CellStruct* pUCell) const R0;
CellStruct GetMapCoords() const {
CellStruct ret;
this->GetMapCoords(&ret);
return ret;
}
//Constructor
FoggedObjectClass() noexcept
: FoggedObjectClass(noinit_t())
{ JMP_THIS(0x4D08B0); }
// for building
FoggedObjectClass(BuildingClass* pBuilding, bool translucent) noexcept
: FoggedObjectClass(noinit_t())
{ JMP_THIS(0x4D0EF0); }
// for terrain
FoggedObjectClass(TerrainClass* pTerrain) noexcept
: FoggedObjectClass(noinit_t())
{ JMP_THIS(0x4D1370); }
// for overlay
FoggedObjectClass(const CoordStruct& location, int overlayIndex, int powerup) noexcept
: FoggedObjectClass(noinit_t())
{ JMP_THIS(0x4D0980); }
// for smudge
FoggedObjectClass(const CoordStruct* location, int smudgeIndex, int frameIdx) noexcept
: FoggedObjectClass(noinit_t())
{ JMP_THIS(0x4D0C40); }
// helper
FoggedObjectClass& operator=(FoggedObjectClass&& foggedObject) noexcept
{
OverlayIndex = foggedObject.OverlayIndex;
Owner = foggedObject.Owner;
Powerup = foggedObject.Powerup;
CoveredAbstractType = foggedObject.CoveredAbstractType;
Location = foggedObject.Location;
Bound = foggedObject.Bound;
Level = foggedObject.Level;
SmudgeIndex = foggedObject.SmudgeIndex;
SmudgeFrameIndex = foggedObject.SmudgeFrameIndex;
Translucent = foggedObject.Translucent;
DrawRecords.Swap(foggedObject.DrawRecords);
return *this;
}
FoggedObjectClass(const FoggedObjectClass& foggedObject) noexcept
{
*this = foggedObject;
}
FoggedObjectClass& operator=(const FoggedObjectClass& foggedObject) noexcept
{
OverlayIndex = foggedObject.OverlayIndex;
Owner = foggedObject.Owner;
Powerup = foggedObject.Powerup;
CoveredAbstractType = foggedObject.CoveredAbstractType;
Location = foggedObject.Location;
Bound = foggedObject.Bound;
Level = foggedObject.Level;
SmudgeIndex = foggedObject.SmudgeIndex;
SmudgeFrameIndex = foggedObject.SmudgeFrameIndex;
Translucent = foggedObject.Translucent;
DrawRecords = foggedObject.DrawRecords;
return *this;
}
protected:
explicit __forceinline FoggedObjectClass(noinit_t) noexcept
: AbstractClass(noinit_t())
{ }
//===========================================================================
//===== Properties ==========================================================
//===========================================================================
public:
int OverlayIndex;
HouseClass* Owner;
int Powerup;
AbstractType CoveredAbstractType;
CoordStruct Location;
RectangleStruct Bound;
int Level;
int SmudgeIndex;
int SmudgeFrameIndex;
DynamicVectorClass<DrawRecord> DrawRecords;
char Translucent;
// never used in YR
char field_75;
char field_76;
char field_77;
};