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;
99 movedir = newstate.movedir;
101 angles = newstate.angles;
103 cameraPath = newstate.cameraPath;
104 splinePath = newstate.splinePath;
105 currentNode = newstate.currentNode;
106 loopNode = newstate.loopNode;
108 cameraTime = newstate.cameraTime;
109 lastTime = newstate.lastTime;
110 newTime = newstate.newTime;
112 followEnt = newstate.followEnt;
113 orbitEnt = newstate.orbitEnt;
115 followingpath = newstate.followingpath;
118inline void CameraMoveState::Archive(
Archiver& arc)
120 arc.ArchiveVector(&movedir);
121 arc.ArchiveVector(&pos);
122 arc.ArchiveVector(&angles);
124 cameraPath.Archive(arc);
126 arc.ArchiveSafePointer(&splinePath);
127 arc.ArchiveSafePointer(¤tNode);
128 arc.ArchiveSafePointer(&loopNode);
130 arc.ArchiveFloat(&cameraTime);
131 arc.ArchiveInteger(&lastTime);
132 arc.ArchiveInteger(&newTime);
134 arc.ArchiveSafePointer(&followEnt);
135 arc.ArchiveSafePointer(&orbitEnt);
137 arc.ArchiveBoolean(&followingpath);
150 void Initialize(
Camera *camera);
151 void Archive(
Archiver& arc)
override;
154inline void CameraWatchState::Archive(
Archiver& arc)
156 arc.ArchiveVector(&watchAngles);
157 arc.ArchiveSafePointer(&watchEnt);
158 arc.ArchiveBoolean(&watchNodes);
159 arc.ArchiveBoolean(&watchPath);
169 void Evaluate(
Camera *camera);
170 void Initialize(
Camera *camera);
171 void Archive(
Archiver& arc)
override;
174inline void CameraState::Archive(
Archiver& arc)
178 arc.ArchiveFloat(&fov);
181class Camera :
public Entity
184 friend class CameraState;
185 friend class CameraWatchState;
186 friend class CameraMoveState;
191 qboolean follow_yaw_fixed;
202 qboolean orbit_dotrace;
207 float automatic_startTime;
208 float automatic_stopTime;
209 float automatic_radius;
210 float automatic_maxFOV;
211 qboolean automatic_active;
218 CameraState currentstate;
219 CameraState newstate;
227 float followFadeTime;
236 void SetupCamera(
Event *ev);
237 void CameraThink(
Event *ev);
239 void CreatePath(
SplinePath *path, splinetype_t type);
240 void UpdateStates(
void);
241 Vector CalculatePosition(
void);
242 Vector CalculateOrientation(
void);
243 float CalculateFov(
void);
244 virtual void bind(Entity *master, qboolean use_my_angles =
false)
override;
245 void unbind(
void)
override;
248 CLASS_PROTOTYPE(Camera);
252 void FollowPath(
SplinePath *path, qboolean loop, Entity *watch);
253 void Orbit(Entity *ent,
float dist, Entity *watch,
float yaw_offset = 0, qboolean dotrace = qtrue);
254 void FollowEntity(Entity *ent,
float dist,
int mask, Entity *watch = NULL);
255 void Watch(
str watch,
float time);
256 void Watch(Entity *ent,
float time);
257 void SetFOV(
float fov,
float time);
259 void StartMoving(
Event *ev);
260 void StopMoving(
Event *ev);
261 void Pause(
Event *ev);
262 void Continue(
Event *ev);
263 void SetAnglesEvent(
Event *ev);
264 void SetSpeed(
Event *ev);
265 void SetFollowDistance(
Event *ev);
266 void SetOrbitHeight(
float height);
267 void SetOrbitHeight(
Event *ev);
268 void SetFollowYaw(
Event *ev);
269 void AbsoluteYaw(
Event *ev);
270 void RelativeYaw(
Event *ev);
271 void SetFOV(
Event *ev);
272 void OrbitEvent(
Event *ev);
273 void FollowEvent(
Event *ev);
274 void WatchEvent(
Event *ev);
275 void WatchStringEvent(
Event *ev);
276 void WatchPathEvent(
Event *ev);
277 void WatchNodesEvent(
Event *ev);
278 void NoWatchEvent(
Event *ev);
279 void EventShowQuakes(
Event *ev);
280 void LookAt(
Event *ev);
281 void MoveToEntity(
Event *ev);
282 void MoveToPos(
Event *ev);
284 void FadeTime(
Event *ev);
285 void TurnTo(
Event *ev);
286 void SetNextCamera(
Event *ev);
287 float CalculateScore(Entity *player,
str state);
288 float AutomaticStart(Entity *player);
289 float AutomaticStop(Entity *player);
290 qboolean IsAutomatic(
void);
291 qboolean IsLevelExit(
void);
292 void SetAutoStateEvent(
Event *ev);
293 void SetAutoRadiusEvent(
Event *ev);
294 void SetAutoStartTimeEvent(
Event *ev);
295 void SetAutoStopTimeEvent(
Event *ev);
296 void SetMaximumAutoFOVEvent(
Event *ev);
297 void SetAutoActiveEvent(
Event *ev);
299 str & NextCamera(
void);
304 bool ShowQuakes(
void)
const;
305 Vector GetPositionOffset(
void);
306 void SetPositionOffset(
Vector vNewOfs);
308 void Archive(
Archiver& arc)
override;
311inline bool Camera::ShowQuakes(
void)
const
313 return m_bShowquakes;
316inline Vector Camera::GetPositionOffset(
void)
321inline void Camera::SetPositionOffset(
Vector vNewOfs)
323 m_vPosOffset = vNewOfs;
326inline void Camera::Archive(
Archiver& arc)
328 Entity::Archive(arc);
330 arc.ArchiveFloat(&follow_yaw);
331 arc.ArchiveBoolean(&follow_yaw_fixed);
332 arc.ArchiveFloat(&follow_dist);
333 arc.ArchiveInteger(&follow_mask);
335 arc.ArchiveFloat(&camera_speed);
336 arc.ArchiveFloat(&camera_fov);
337 arc.ArchiveFloat(&orbit_height);
338 arc.ArchiveBoolean(&orbit_dotrace);
339 arc.ArchiveFloat(&auto_fov);
341 arc.ArchiveFloat(&automatic_startTime);
342 arc.ArchiveFloat(&automatic_stopTime);
343 arc.ArchiveFloat(&automatic_radius);
344 arc.ArchiveFloat(&automatic_maxFOV);
345 arc.ArchiveBoolean(&automatic_active);
347 automatic_states.Archive(arc);
350 currentstate.Archive(arc);
352 newstate.Archive(arc);
354 arc.ArchiveFloat(&watchTime);
355 arc.ArchiveFloat(&followTime);
356 arc.ArchiveFloat(&fovTime);
357 arc.ArchiveFloat(&fadeTime);
358 arc.ArchiveFloat(&fovFadeTime);
359 arc.ArchiveFloat(&followFadeTime);
360 arc.ArchiveFloat(&watchFadeTime);
362 arc.ArchiveString(&nextCamera);
364 arc.ArchiveBoolean(&showcamera);
367 if (spawnflags & AUTOMATIC) {
368 level.AddAutomaticCamera(
this);
373void SetCamera(
Entity *ent,
float switchTime);
378class CameraManager :
public Listener
384 SplinePathPtr current;
389 qboolean cameraPath_dirty;
391 void NewPath(
Event *ev);
392 void SetPath(
Event *ev);
393 void SetTargetName(
Event *ev);
394 void SetTarget(
Event *ev);
395 void AddPoint(
Event *ev);
396 void ReplacePoint(
Event *ev);
397 void DeletePoint(
Event *ev);
398 void MovePlayer(
Event *ev);
399 void NextPoint(
Event *ev);
400 void PreviousPoint(
Event *ev);
401 void ShowingPath(
Event *ev);
402 void ShowPath(
Event *ev);
403 void HidePath(
Event *ev);
404 void StopPlayback(
Event *ev);
405 void PlayPath(
Event *ev);
406 void LoopPath(
Event *ev);
407 void Watch(
Event *ev);
408 void NoWatch(
Event *ev);
410 void FadeTime(
Event *ev);
411 void Speed(
Event *ev);
412 void Save(
Event *ev);
413 void Load(
Event *ev);
414 void SaveMap(
Event *ev);
415 void UpdateEvent(
Event *ev);
416 void NextPath(
Event *ev);
417 void PreviousPath(
Event *ev);
418 void RenamePath(
Event *ev);
422 void SetPathName(
str name);
423 void SavePath(
str pathName);
426 CLASS_PROTOTYPE(CameraManager);
429 void SetPath(
str pathName);
430 void Archive(
Archiver& arc)
override;
433inline void CameraManager::Archive(
Archiver& arc)
436 Listener::Archive(arc);
438 pathList.Archive(arc);
441 arc.ArchiveSafePointer(&path);
442 arc.ArchiveSafePointer(¤t);
443 arc.ArchiveFloat(&speed);
444 arc.ArchiveInteger(&watch);
445 arc.ArchiveString(&pathName);
446 arc.ArchiveSafePointer(&cam);
449 cameraPath_dirty = qtrue;
Definition container.h:85
Definition listener.h:246