34#define CAMERA_SWITCHTIME 0.5f
37#define START_ON (1 << 1)
38#define AUTOMATIC (1 << 2)
39#define NO_TRACE (1 << 3)
40#define NO_WATCH (1 << 4)
41#define LEVEL_EXIT (1 << 5)
43extern Event EV_Camera_CameraThink;
44extern Event EV_Camera_StartMoving;
45extern Event EV_Camera_Pause;
46extern Event EV_Camera_Continue;
47extern Event EV_Camera_StopMoving;
48extern Event EV_Camera_SetSpeed;
49extern Event EV_Camera_SetFollowDistance;
50extern Event EV_Camera_SetOrbitHeight;
51extern Event EV_Camera_SetYaw;
52extern Event EV_Camera_AbsoluteYaw;
53extern Event EV_Camera_RelativeYaw;
54extern Event EV_Camera_SetFOV;
55extern Event EV_Camera_Orbit;
56extern Event EV_Camera_Follow;
57extern Event EV_Camera_Watch;
58extern Event EV_Camera_WatchPath;
59extern Event EV_Camera_LookAt;
60extern Event EV_Camera_TurnTo;
61extern Event EV_Camera_MoveToEntity;
62extern Event EV_Camera_MoveToPos;
63extern Event EV_Camera_NoWatch;
64extern Event EV_Camera_FadeTime;
65extern Event EV_Camera_Cut;
77 SplinePathPtr splinePath;
78 SplinePathPtr currentNode;
79 SplinePathPtr loopNode;
85 qboolean followingpath;
90 void Evaluate(
Camera *camera);
91 void Initialize(
Camera *camera);
92 void DoNodeEvents(
Camera *camera);
93 void Archive(
Archiver& arc)
override;
98 movedir = newstate.movedir;
100 angles = newstate.angles;
102 cameraPath = newstate.cameraPath;
103 splinePath = newstate.splinePath;
104 currentNode = newstate.currentNode;
105 loopNode = newstate.loopNode;
107 cameraTime = newstate.cameraTime;
108 lastTime = newstate.lastTime;
109 newTime = newstate.newTime;
111 followEnt = newstate.followEnt;
112 orbitEnt = newstate.orbitEnt;
114 followingpath = newstate.followingpath;
117inline void CameraMoveState::Archive(
Archiver& arc)
119 arc.ArchiveVector(&movedir);
120 arc.ArchiveVector(&pos);
121 arc.ArchiveVector(&angles);
123 cameraPath.Archive(arc);
125 arc.ArchiveSafePointer(&splinePath);
126 arc.ArchiveSafePointer(¤tNode);
127 arc.ArchiveSafePointer(&loopNode);
129 arc.ArchiveFloat(&cameraTime);
130 arc.ArchiveInteger(&lastTime);
131 arc.ArchiveInteger(&newTime);
133 arc.ArchiveSafePointer(&followEnt);
134 arc.ArchiveSafePointer(&orbitEnt);
136 arc.ArchiveBoolean(&followingpath);
149 void Initialize(
Camera *camera);
150 void Archive(
Archiver& arc)
override;
153inline void CameraWatchState::Archive(
Archiver& arc)
155 arc.ArchiveVector(&watchAngles);
156 arc.ArchiveSafePointer(&watchEnt);
157 arc.ArchiveBoolean(&watchNodes);
158 arc.ArchiveBoolean(&watchPath);
168 void Evaluate(
Camera *camera);
169 void Initialize(
Camera *camera);
170 void Archive(
Archiver& arc)
override;
173inline void CameraState::Archive(
Archiver& arc)
177 arc.ArchiveFloat(&fov);
180class Camera :
public Entity
183 friend class CameraState;
184 friend class CameraWatchState;
185 friend class CameraMoveState;
190 qboolean follow_yaw_fixed;
201 qboolean orbit_dotrace;
206 float automatic_startTime;
207 float automatic_stopTime;
208 float automatic_radius;
209 float automatic_maxFOV;
210 qboolean automatic_active;
217 CameraState currentstate;
218 CameraState newstate;
226 float followFadeTime;
235 void SetupCamera(
Event *ev);
236 void CameraThink(
Event *ev);
238 void CreatePath(
SplinePath *path, splinetype_t type);
239 void UpdateStates(
void);
240 Vector CalculatePosition(
void);
241 Vector CalculateOrientation(
void);
242 float CalculateFov(
void);
243 virtual void bind(Entity *master, qboolean use_my_angles =
false)
override;
244 void unbind(
void)
override;
247 CLASS_PROTOTYPE(Camera);
251 void FollowPath(
SplinePath *path, qboolean loop, Entity *watch);
252 void Orbit(Entity *ent,
float dist, Entity *watch,
float yaw_offset = 0, qboolean dotrace = qtrue);
253 void FollowEntity(Entity *ent,
float dist,
int mask, Entity *watch = NULL);
254 void Watch(
str watch,
float time);
255 void Watch(Entity *ent,
float time);
256 void SetFOV(
float fov,
float time);
258 void StartMoving(
Event *ev);
259 void StopMoving(
Event *ev);
260 void Pause(
Event *ev);
261 void Continue(
Event *ev);
262 void SetAnglesEvent(
Event *ev);
263 void SetSpeed(
Event *ev);
264 void SetFollowDistance(
Event *ev);
265 void SetOrbitHeight(
float height);
266 void SetOrbitHeight(
Event *ev);
267 void SetFollowYaw(
Event *ev);
268 void AbsoluteYaw(
Event *ev);
269 void RelativeYaw(
Event *ev);
270 void SetFOV(
Event *ev);
271 void OrbitEvent(
Event *ev);
272 void FollowEvent(
Event *ev);
273 void WatchEvent(
Event *ev);
274 void WatchStringEvent(
Event *ev);
275 void WatchPathEvent(
Event *ev);
276 void WatchNodesEvent(
Event *ev);
277 void NoWatchEvent(
Event *ev);
278 void EventShowQuakes(
Event *ev);
279 void LookAt(
Event *ev);
280 void MoveToEntity(
Event *ev);
281 void MoveToPos(
Event *ev);
283 void FadeTime(
Event *ev);
284 void TurnTo(
Event *ev);
285 void SetNextCamera(
Event *ev);
286 float CalculateScore(Entity *player,
str state);
287 float AutomaticStart(Entity *player);
288 float AutomaticStop(Entity *player);
289 qboolean IsAutomatic(
void);
290 qboolean IsLevelExit(
void);
291 void SetAutoStateEvent(
Event *ev);
292 void SetAutoRadiusEvent(
Event *ev);
293 void SetAutoStartTimeEvent(
Event *ev);
294 void SetAutoStopTimeEvent(
Event *ev);
295 void SetMaximumAutoFOVEvent(
Event *ev);
296 void SetAutoActiveEvent(
Event *ev);
298 str& NextCamera(
void);
303 bool ShowQuakes(
void)
const;
304 Vector GetPositionOffset(
void);
305 void SetPositionOffset(
Vector vNewOfs);
307 void Archive(
Archiver& arc)
override;
310inline bool Camera::ShowQuakes(
void)
const
312 return m_bShowquakes;
315inline Vector Camera::GetPositionOffset(
void)
320inline void Camera::SetPositionOffset(
Vector vNewOfs)
322 m_vPosOffset = vNewOfs;
325inline void Camera::Archive(
Archiver& arc)
327 Entity::Archive(arc);
329 arc.ArchiveFloat(&follow_yaw);
330 arc.ArchiveBoolean(&follow_yaw_fixed);
331 arc.ArchiveFloat(&follow_dist);
332 arc.ArchiveInteger(&follow_mask);
334 arc.ArchiveFloat(&camera_speed);
335 arc.ArchiveFloat(&camera_fov);
336 arc.ArchiveFloat(&orbit_height);
337 arc.ArchiveBoolean(&orbit_dotrace);
338 arc.ArchiveFloat(&auto_fov);
340 arc.ArchiveFloat(&automatic_startTime);
341 arc.ArchiveFloat(&automatic_stopTime);
342 arc.ArchiveFloat(&automatic_radius);
343 arc.ArchiveFloat(&automatic_maxFOV);
344 arc.ArchiveBoolean(&automatic_active);
346 automatic_states.Archive(arc);
349 currentstate.Archive(arc);
351 newstate.Archive(arc);
353 arc.ArchiveFloat(&watchTime);
354 arc.ArchiveFloat(&followTime);
355 arc.ArchiveFloat(&fovTime);
356 arc.ArchiveFloat(&fadeTime);
357 arc.ArchiveFloat(&fovFadeTime);
358 arc.ArchiveFloat(&followFadeTime);
359 arc.ArchiveFloat(&watchFadeTime);
361 arc.ArchiveString(&nextCamera);
363 arc.ArchiveBoolean(&showcamera);
366 if (spawnflags & AUTOMATIC) {
367 level.AddAutomaticCamera(
this);
372void SetCamera(
Entity *ent,
float switchTime);
377class CameraManager :
public Listener
383 SplinePathPtr current;
388 qboolean cameraPath_dirty;
390 void NewPath(
Event *ev);
391 void SetPath(
Event *ev);
392 void SetTargetName(
Event *ev);
393 void SetTarget(
Event *ev);
394 void AddPoint(
Event *ev);
395 void ReplacePoint(
Event *ev);
396 void DeletePoint(
Event *ev);
397 void MovePlayer(
Event *ev);
398 void NextPoint(
Event *ev);
399 void PreviousPoint(
Event *ev);
400 void ShowingPath(
Event *ev);
401 void ShowPath(
Event *ev);
402 void HidePath(
Event *ev);
403 void StopPlayback(
Event *ev);
404 void PlayPath(
Event *ev);
405 void LoopPath(
Event *ev);
406 void Watch(
Event *ev);
407 void NoWatch(
Event *ev);
409 void FadeTime(
Event *ev);
410 void Speed(
Event *ev);
411 void Save(
Event *ev);
412 void Load(
Event *ev);
413 void SaveMap(
Event *ev);
414 void UpdateEvent(
Event *ev);
415 void NextPath(
Event *ev);
416 void PreviousPath(
Event *ev);
417 void RenamePath(
Event *ev);
421 void SetPathName(
str name);
422 void SavePath(
str pathName);
425 CLASS_PROTOTYPE(CameraManager);
428 void SetPath(
str pathName);
429 void Archive(
Archiver& arc)
override;
432inline void CameraManager::Archive(
Archiver& arc)
434 Listener::Archive(arc);
436 pathList.Archive(arc);
439 arc.ArchiveSafePointer(&path);
440 arc.ArchiveSafePointer(¤t);
441 arc.ArchiveFloat(&speed);
442 arc.ArchiveInteger(&watch);
443 arc.ArchiveString(&pathName);
444 arc.ArchiveSafePointer(&cam);
447 cameraPath_dirty = qtrue;
Definition container.h:85
Definition listener.h:246