/
GameObject.h
263 lines (224 loc) · 6.98 KB
/
GameObject.h
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
/***********************************************************************************
**
** GameObject.h
**
** Copyright (C) August 2016 Hotride
**
************************************************************************************
*/
//----------------------------------------------------------------------------------
#ifndef GAMEOBJECT_H
#define GAMEOBJECT_H
//----------------------------------------------------------------------------------
struct DRAW_FRAME_INFORMATION
{
int OffsetX;
int OffsetY;
int Width;
int Height;
};
//----------------------------------------------------------------------------------
//!Класс игрового объекта
class CGameObject : public CRenderStaticObject
{
//!Серийник контейнера, содержащего объект (0xFFFFFFFF - объект лежит в мире)
SETGET(uint, Container, 0xFFFFFFFF);
//!Карта объекта
SETGET(uchar, MapIndex, 0);
//!Количество
SETGET(uint, Count, 0);
//!Флаги от сервера
SETGETE(uchar, Flags, 0, OnChangedFlags);
//!Имя
SETGETE(string, Name, "", OnChangeName);
//!НПС или предмет
SETGET(bool, NPC, false);
//!На предмет кликнули
SETGET(bool, Clicked, false);
//!Текущий индекс анимации
SETGET(char, AnimIndex, 0);
//!Префикс You see: в журнале
SETGET(bool, YouSeeJournalPrefix, false);
//!Время последнего изменения анимации
SETGET(uint, LastAnimationChangeTime, 0);
SETGET(wstring, ClilocMessage, L"");
SETGET(bool, SA_Poisoned, false);
SETGET(bool, ClosedObjectHandle, false);
SETGET(uint, ClilocRevision, 0);
protected:
//!Ссылка на список эффектов персонажа
class CGameEffect *m_Effects{ NULL };
//!Указатель на текстуру для опции Object Handles
CGLTexture m_TextureObjectHalndes{ CGLTexture() };
/*!
Создать текстуру для опции Object Handles
@param [__in] text Текст названия объекта
@return
*/
void GenerateObjectHandlesTexture(wstring text);
public:
CGameObject(const uint &serial = 0);
virtual ~CGameObject();
//!Информация о ФБ объекта (для Animation Manager)
DRAW_FRAME_INFORMATION m_FrameInfo;
vector<class CGameItem*> m_DrawLayeredObjects;
/*!
Добавить текст в контейнер
@param [__in] td Ссылка на объект текста
@return
*/
virtual void AddText(CTextData *td);
/*!
Отрисовать текстуру опции Object Handles (автоматически создает текстуру, если она не была создана)
@param [__in] mode Режим отображения
@param [__in] x Экранная координата X
@param [__in] y Экранная координата Y
@return
*/
void DrawObjectHandlesTexture();
void SelectObjectHandlesTexture();
/*!
Получить индекс анимации
@return Индекс анимации
*/
virtual ushort GetMountAnimation();
/*!
Событие, вызываемое при изменении индекса картинки
@param [__in_opt] direction Направление объекта
@return
*/
virtual void OnGraphicChange(int direction = 0) {}
/*!
Проверка прозрачности (для круга прозрачности)
@param [__in] playerZ Координата Z игрока
@return Может ли быть прозрачным
*/
virtual bool TranparentTest(int &playerZ) { return false; }
/*!
Отрисовать эффект
@param [__in] drawX Экранная координата X
@param [__in] drawY Экранная координата Y
@param [__in] ticks Таймер рендера
@return
*/
void DrawEffects(int x, int y);
void UpdateEffects();
/*!
Добавить эффект
@param [__in] effect Ссылка на эффект
@return
*/
void AddEffect(class CGameEffect *effect);
/*!
Удалить эффект
@param [__in] effect Ссылка на эффект
@return
*/
void RemoveEffect(class CGameEffect *effect);
/*!
Добавить объект в список объектов текущего контейнера
@param [__in] obj Ссылка на объект
@return
*/
void AddObject(CGameObject *obj);
/*!
Добавить объект в контейнер (this - контейнер)
@param [__in] obj Ссылка на объект
@return
*/
void AddItem(CGameObject *obj);
/*!
Изъять объект из контейнера
@param [__in] obj Ссылка на объект
@return
*/
void Reject(CGameObject *obj);
/*!
Очистить контейнер
@return
*/
void Clear();
void ClearUnequipped();
void ClearNotOpenedItems();
/*!
Заморожен ли объект
@return
*/
bool Frozen() { return (m_Flags & 0x01); }
/*!
Отравлен ли объект
@return
*/
bool Poisoned();
/*!
Летит ли объект
@return
*/
bool Flying();
/*!
Объект имеет желтую полоску жизней
@return
*/
bool YellowHits() { return (m_Flags & 0x08); }
/*!
Объект игнорирует персонажей при перемещении
@return
*/
bool IgnoreCharacters() { return (m_Flags & 0x10); }
/*!
Можно ли брать объект в руку
@return
*/
bool Locked() { return (!(m_Flags & 0x20) && m_TiledataPtr->Weight > 90); }
/*!
Объект в режиме боя
@return
*/
bool InWarMode() { return (m_Flags & 0x40); }
/*!
Объект спрятан
@return
*/
bool Hidden() { return (m_Flags & 0x80); }
/*!
Проверка на человекоподобного персонажа
@return Человекоподобное или нет
*/
virtual bool IsHuman() { return false; }
/*!
Проверка на игрока (персонаж - игрок человека за компьютером)
@return Игрок или нет
*/
virtual bool IsPlayer() { return false; }
/*!
Золото ли это
@return Индекс в таблице золота
*/
static int IsGold(const ushort &graphic);
/*!
Получить индекс картинки для рисования
@param [__out] doubleDraw Двойная отрисовка объекта
@return Индекс картинки
*/
ushort GetDrawGraphic(bool &doubleDraw);
/*!
Это игровой объект
@return
*/
bool IsGameObject() { return true; }
/*!
Это труп
@return
*/
bool IsCorpse() { return (m_Graphic == 0x2006); }
/*!
Найти объект в мире, в котором содержится контейнер
@return Ссылка на объект в мире
*/
CGameObject *GetTopObject();
CGameItem *FindLayer(const int &layer);
virtual CGameItem *FindSecureTradeBox() { return NULL; }
};
//----------------------------------------------------------------------------------
#endif
//----------------------------------------------------------------------------------