32#include "scriptslave.h"
34extern Event EV_Door_TryOpen;
35extern Event EV_Door_GoDown;
36extern Event EV_Door_GoUp;
37extern Event EV_Door_HitBottom;
38extern Event EV_Door_HitTop;
39extern Event EV_Door_Fire;
40extern Event EV_Door_Link;
41extern Event EV_Door_SetSpeed;
42extern Event EV_Door_Lock;
43extern Event EV_Door_Unlock;
47typedef SafePtr<Door> DoorPtr;
49class Door :
public ScriptSlave
54 str sound_close_start;
67 float next_locked_time;
70 void SetDir(Event *ev);
71 void OpenEnd(Event *ev);
72 void CloseEnd(Event *ev);
73 void Close(Event *ev);
75 void DoorUse(Event *ev);
76 void DoorFire(Event *ev);
77 void DoorBlocked(Event *ev);
78 void FieldTouched(Event *ev);
79 void TryOpen(Event *ev);
80 void SpawnTriggerField(Vector fmins, Vector fmaxs);
81 qboolean DoorTouches(Door *e1);
82 void LinkDoors(Event *ev);
83 void SetTime(Event *ev);
84 void LockDoor(Event *ev);
85 void UnlockDoor(Event *ev);
86 void SetOpenStartSound(str sound);
87 void SetOpenStartSound(Event *ev);
88 void SetOpenEndSound(str sound);
89 void SetOpenEndSound(Event *ev);
90 void SetCloseStartSound(Event *ev);
91 void SetCloseStartSound(str sound);
92 void SetCloseEndSound(Event *ev);
93 void SetCloseEndSound(str sound);
94 void SetMessageSound(str sound);
95 void SetMessageSound(Event *ev);
96 void SetLockedSound(str sound);
97 void SetLockedSound(Event *ev);
98 void SetWait(Event *ev);
99 void SetDmg(Event *ev);
100 void EventTrySolid(Event *ev);
101 void EventAlwaysAway(Event *ev);
102 void EventDoorType(Event *ev);
104 void SetDoorType(str s);
105 qboolean BlocksAIMovement(
void)
const override;
106 qboolean AIDontFace(
void)
const override;
107 void ShowInfo(
float fDot,
float fDist)
override;
109 void UpdatePathConnection(
void);
110 void SetLocked(qboolean newLocked);
111 void SetState(
int newState);
114 CLASS_PROTOTYPE(Door);
119 qboolean isOpen(
void);
120 qboolean isCompletelyClosed(
void);
121 void GetIsOpen(Event *ev);
122 qboolean CanBeOpenedBy(
Entity *ent);
123 void Archive(
Archiver &arc)
override;
126inline void Door::Archive(
Archiver& arc)
128 ScriptSlave::Archive(arc);
130 arc.ArchiveString(&sound_open_start);
131 arc.ArchiveString(&sound_open_end);
132 arc.ArchiveString(&sound_close_start);
133 arc.ArchiveString(&sound_close_end);
134 arc.ArchiveString(&sound_message);
135 arc.ArchiveString(&sound_locked);
137 SetOpenStartSound(sound_open_start);
138 SetOpenEndSound(sound_open_end);
139 SetCloseStartSound(sound_close_start);
140 SetCloseEndSound(sound_close_end);
141 SetMessageSound(sound_message);
142 SetLockedSound(sound_locked);
144 arc.ArchiveFloat(&lastblocktime);
145 arc.ArchiveFloat(&angle);
146 arc.ArchiveVector(&dir);
147 arc.ArchiveFloat(&diropened);
148 arc.ArchiveInteger(&state);
149 arc.ArchiveInteger(&previous_state);
150 arc.ArchiveInteger(&trigger);
151 arc.ArchiveInteger(&nextdoor);
152 arc.ArchiveSafePointer(&master);
153 arc.ArchiveFloat(&next_locked_time);
154 arc.ArchiveBoolean(&locked);
155 arc.ArchiveBool(&m_bAlwaysAway);
158class RotatingDoor :
public Door
163 int init_door_direction;
166 CLASS_PROTOTYPE(RotatingDoor);
168 void DoOpen(Event *ev);
169 void DoClose(Event *ev);
170 void OpenAngle(Event *ev);
171 void Archive(
Archiver& arc)
override;
176inline void RotatingDoor::Archive(
Archiver& arc)
180 arc.ArchiveFloat(&angle);
181 arc.ArchiveVector(&startangle);
182 arc.ArchiveInteger(&init_door_direction);
185class SlidingDoor :
public Door
196 CLASS_PROTOTYPE(SlidingDoor);
198 void SetMoveDir(Event *ev);
199 void Setup(Event *ev);
200 void SetLip(Event *ev);
201 void SetSpeed(Event *ev);
202 void DoOpen(Event *ev);
203 void DoClose(Event *ev);
204 void Archive(
Archiver& arc)
override;
209inline void SlidingDoor::Archive(
Archiver& arc)
213 arc.ArchiveFloat(&totalmove);
214 arc.ArchiveFloat(&lip);
215 arc.ArchiveVector(&pos1);
216 arc.ArchiveVector(&pos2);
217 arc.ArchiveVector(&movedir);
218 arc.ArchiveFloat(&basespeed);
221class ScriptDoor :
public Door
233 CLASS_PROTOTYPE(ScriptDoor);
235 void SetMoveDir(Event *ev);
236 void DoInit(Event *ev);
237 void DoOpen(Event *ev);
238 void DoClose(Event *ev);
239 void SetOpenThread(Event *ev);
240 void SetCloseThread(Event *ev);
241 void SetInitThread(Event *ev);
242 void Archive(
Archiver& arc)
override;
246inline void ScriptDoor::Archive(
Archiver& arc)
250 arc.ArchiveFloat(&doorsize);
251 arc.ArchiveVector(&startangle);
252 arc.ArchiveVector(&startorigin);
253 arc.ArchiveVector(&movedir);
Definition gamescript.h:165