12#ifndef TT_INCLUDE_CONVERSATIONCLASS_H
13#define TT_INCLUDE_CONVERSATIONCLASS_H
14#include "engine_vector.h"
15#include "ReferencerClass.h"
16#include "PhysicalGameObj.h"
18class ConversationRemarkClass {
20 ConversationRemarkClass() : OratorID(0), TextID(0)
23 virtual ~ConversationRemarkClass()
26 ConversationRemarkClass(
const ConversationRemarkClass & that) : OratorID(0), TextID(0)
30 ConversationRemarkClass
const &operator = (ConversationRemarkClass
const & that)
32 OratorID = that.OratorID;
34 AnimationName = that.AnimationName;
37 int Get_Orator_ID()
const
41 void Set_Orator_ID(
int id)
45 uint32 Get_Text_ID()
const
49 void Set_Text_ID(uint32
id)
53 const char *Get_Animation_Name()
const
57 void Set_Animation_Name(
const char *name)
61 bool operator ==(ConversationRemarkClass
const & that)
63 if ((TextID == that.TextID) && (OratorID == that.OratorID))
69 bool operator !=(ConversationRemarkClass
const & that)
71 if ((TextID != that.TextID) || (OratorID != that.OratorID))
77 bool Save(ChunkSaveClass &cload);
78 bool Load(ChunkLoadClass &cload);
79 void Load_Variables(ChunkLoadClass &cload);
83 StringClass AnimationName;
87 OratorClass(
const OratorClass& that);
89 ReferencerClass Owner;
98 OratorClass& operator=(
const OratorClass& that)
102 Position = that.Position;
103 Arrived = that.Arrived;
105 OratorID = that.OratorID;
107 FacingID = that.FacingID;
111 OratorClass() : unk(0), Position(0, 0, 0), Arrived(false), Flags(0), OratorID(-1), unk2C(0), FacingID(0), unk34(false)
117 bool operator ==(
const OratorClass &that)
119 return OratorID == that.OratorID;
121 bool operator !=(
const OratorClass &that)
123 return OratorID != that.OratorID;
125 bool Get_Flag(
int flag)
127 return (Flags & flag) == flag;
129 PhysicalGameObj *Get_Game_Obj()
133 return Owner->As_PhysicalGameObj();
137 void Set_Flag(
int flag,
bool onoff)
139 int t = Flags & ~flag;
145 if (Flags & FLAG_DONT_MOVE)
150 Vector3 &Get_Position()
154 void Set_Flags(
int newflags)
157 if (Flags & FLAG_DONT_MOVE)
162 void Set_Arrived(
bool arrived)
166 void Initialize(PhysicalGameObj *obj)
170 void Set_Orator_ID(
int id)
176 FLAG_DONT_TURN_HEAD = 2,
177 FLAG_TEMP_DONT_FACE = 4,
180 void Set_Facing_ID(
int id)
184 bool Save(ChunkSaveClass &cload);
185 bool Load(ChunkLoadClass &cload);
186 void Load_Variables(ChunkLoadClass &cload);
188class ConversationClass :
public RefCountClass {
190 ConversationClass(
const ConversationClass& that);
191 ConversationClass& operator=(
const ConversationClass& that);
194 DynamicVectorClass<ConversationRemarkClass> Remarks;
195 DynamicVectorClass<OratorClass> Orators;
196 SoldierAIState AIState;
204 bool IsInterruptable;
207 void Clear_Orators();
208 void Clear_Remarks();
209 ~ConversationClass();
210 int Get_Orator_Count()
const
212 return Orators.Count();
214 void Add_Orator(OratorClass
const&);
215 void Add_Remark(ConversationRemarkClass
const&);
216 int Get_Remark_Count()
const
218 return Remarks.Count();
220 bool Get_Remark_Info(
int index,ConversationRemarkClass &remark)
222 if (index >= 0 && index < Remarks.Count())
224 remark = Remarks[index];
229 bool Save(ChunkSaveClass &cload);
230 bool Load(ChunkLoadClass &cload);
231 void Load_Variables(ChunkLoadClass &cload);
232 OratorClass *Get_Orator(
int);
233 OratorClass *Find_Orator(
int);
234 int Get_ID()
const {
return ID; }
235 void Set_ID(
int id) { ID = id; }
236 const char *Get_Name()
const {
return Name; }
237 void Set_Name(
const char *name) { Name = name; }
238 SoldierAIState Get_AI_State()
const {
return AIState; }
239 void Set_AI_State(SoldierAIState state) { AIState = state; }
240 bool Is_Innate()
const {
return IsInnate; }
241 void Set_Is_Innate(
bool b) { IsInnate = b; }
242 bool Is_Key()
const {
return IsKey; }
243 void Set_Is_Key(
bool b) { IsKey = b; }
244 float Get_Probability()
const {
return Probability; }
245 void Set_Probability(
float f) { Probability = f; }
246 int Get_Category_ID()
const {
return CategoryID; }
247 void Set_Category_ID(
int id) { CategoryID = id; }
248 int Get_Look_At_Obj_ID()
const {
return LookAtObjID; }
249 void Set_Look_At_Obj_ID(
int id) { LookAtObjID = id; }
250 int Get_Priority()
const {
return Priority; }
251 void Set_Priority(
int i) { Priority = i; }
252 float Get_Max_Dist()
const {
return MaxDist; }
253 void Set_Max_Dist(
float f) { MaxDist = f; }
254 bool Is_Interruptable()
const {
return IsInterruptable; }
255 void Set_Is_Interruptable(
bool b) { IsInterruptable = b; }