⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camera.h

📁 this keik game source
💻 H
字号:
//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/camera.h                         $
// $Revision:: 25                                                             $
//   $Author:: Jimdose                                                        $
//     $Date:: 10/25/98 11:53p                                                $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/camera.h                              $
// 
// 25    10/25/98 11:53p Jimdose
// added EXPORT_TEMPLATE
// 
// 24    9/29/98 5:58p Markd
// put in archive and unarchive
// 
// 23    9/24/98 1:19a Markd
// bullet proofed some equating bspline code
// 
// 22    9/20/98 6:49p Markd
// Added Thread ability to cameras when they are looked through
// 
// 21    8/17/98 7:42p Markd
// Added SetOverlay
// 
// 20    8/17/98 6:20p Markd
// Changed SetCamera to a Player method
// 
// 19    8/17/98 4:35p Markd
// Added SecurityCamera
// 
// 18    8/14/98 8:18p Markd
// reworked camera class
// 
// 17    8/08/98 7:29p Aldie
// Added intermissions for deathmatch
// 
// 16    7/22/98 5:22p Markd
// Added MoveToPos and TurnTo
// 
// 15    7/22/98 4:12p Markd
// Redid camera stuff
// 
// 14    7/18/98 6:14p Markd
// Added optional watch commands at the end of follow and orbit events
// 
// 13    7/13/98 12:58p Markd
// added fixed_position
// 
// 12    7/11/98 6:31p Markd
// removed valid orientation, simplified code
// 
// 11    7/10/98 1:12p Markd
// Added more functionality to camera stuff
// 
// 10    7/08/98 12:42p Markd
// Removed CameraPath with SplinePath
// 
// 9     7/02/98 9:48p Markd
// Added orientation support to cameras
// 
// 8     5/27/98 3:18a Jimdose
// cameras can now watch specific entities
// 
// 7     5/26/98 8:49p Jimdose
// Added yaw commands
// 
// 6     5/26/98 8:18p Jimdose
// added height event
// 
// 5     5/26/98 7:56p Jimdose
// added scripted cameras
// 
// 4     5/13/98 4:55p Jimdose
// now uses SafePtrs
// 
// 3     5/07/98 10:41p Jimdose
// fleshed out functionality a bit more
// 
// 2     5/05/98 2:37p Jimdose
// Created file
// 
// DESCRIPTION:
// Camera.  Duh.
// 

#ifndef __CAMERA_H__
#define __CAMERA_H__

#include "g_local.h"
#include "entity.h"
#include "bspline.h"

#define ORBIT		1
#define START_ON	2
#define PANNING	4

extern Event EV_Camera_FollowingPath;
extern Event EV_Camera_StartMoving;
extern Event EV_Camera_Pause;
extern Event EV_Camera_Continue;
extern Event EV_Camera_StopMoving;
extern Event EV_Camera_SetSpeed;
extern Event EV_Camera_SetDistance;
extern Event EV_Camera_SetHeight;
extern Event EV_Camera_SetYaw;
extern Event EV_Camera_FixedYaw;
extern Event EV_Camera_RelativeYaw;
extern Event EV_Camera_SetFOV;
extern Event EV_Camera_Orbit;
extern Event EV_Camera_Follow;
extern Event EV_Camera_Watch;
extern Event EV_Camera_LookAt;
extern Event EV_Camera_TurnTo;
extern Event EV_Camera_MoveToEntity;
extern Event EV_Camera_MoveToPos;
extern Event EV_Camera_NoWatch;
extern Event EV_Camera_IgnoreAngles;
extern Event EV_Camera_UseAngles;
extern Event EV_Camera_SplineAngles;
extern Event EV_Camera_NormalAngles;
extern Event EV_Camera_FixedPosition;
extern Event EV_Camera_NoFixedPosition;
extern Event EV_Camera_JumpTime;
extern Event EV_Camera_JumpCut;
extern Event EV_Camera_Pan;
extern Event EV_Camera_StopPan;
extern Event EV_Camera_PanSpeed;
extern Event EV_Camera_PanMax;
extern Event EV_Camera_SetPanAngles;


class EXPORT_FROM_DLL CameraMoveState
   {
   public:
      Vector            pos;

	   BSpline				cameraPath;
	   float					cameraTime;

	   EntityPtr			followEnt;
      EntityPtr         orbitEnt;

      qboolean          followingpath;
	   float					speed;
      qboolean          fixed_position;
	   float					fov;
		float					height;
		float					follow_dist;
		int					follow_mask;

		void		      operator=( CameraMoveState &newstate );
	   virtual void   Archive( Archiver &arc );
      virtual void   Unarchive( Archiver &arc );
   };

inline void CameraMoveState::operator=
	(
	CameraMoveState &newstate
	)

	{
   pos = newstate.pos;

   cameraPath = newstate.cameraPath;

   cameraTime = newstate.cameraTime;

   followEnt = newstate.followEnt;
   orbitEnt = newstate.orbitEnt;

   followingpath = newstate.followingpath;
   speed = newstate.speed;
   fixed_position = newstate.fixed_position;
   fov = newstate.fov;
   height = newstate.height;
   follow_dist = newstate.follow_dist;
   follow_mask = newstate.follow_mask;
	}

inline EXPORT_FROM_DLL void CameraMoveState::Archive
	(
	Archiver &arc
	)
   {
   arc.WriteVector( pos );

   cameraPath.Archive( arc );

   arc.WriteFloat( cameraTime );

   arc.WriteSafePointer( followEnt );
   arc.WriteSafePointer( orbitEnt );

   arc.WriteBoolean( followingpath );
   arc.WriteFloat( speed );
   arc.WriteBoolean( fixed_position );

   arc.WriteFloat( fov );
   arc.WriteFloat( height );
   arc.WriteFloat( follow_dist );
   arc.WriteInteger( follow_mask );
   }

inline EXPORT_FROM_DLL void CameraMoveState::Unarchive
	(
	Archiver &arc
	)
   {
   arc.ReadVector( &pos );

   cameraPath.Unarchive( arc );

   arc.ReadFloat( &cameraTime );

   arc.ReadSafePointer( &followEnt );
   arc.ReadSafePointer( &orbitEnt );

   arc.ReadBoolean( &followingpath );
   arc.ReadFloat( &speed );
   arc.ReadBoolean( &fixed_position );

   arc.ReadFloat( &fov );
   arc.ReadFloat( &height );
   arc.ReadFloat( &follow_dist );
   arc.ReadInteger( &follow_mask );
   }

class EXPORT_FROM_DLL CameraWatchState
   {
   public:
      Vector            dir;

	   EntityPtr			watchEnt;

      qboolean          ignoreangles;
      qboolean          splineangles;
      qboolean          panning;

      float             pan_offset;
      float             pan_dir;
      float             pan_max;
      float             pan_speed;
      Vector            pan_angles;

	   float					yaw;
	   qboolean				fixedyaw;

	   virtual void      Archive( Archiver &arc );
      virtual void      Unarchive( Archiver &arc );
   };

inline EXPORT_FROM_DLL void CameraWatchState::Archive
	(
	Archiver &arc
	)
   {
   arc.WriteVector( dir );
   arc.WriteSafePointer( watchEnt );

   arc.WriteBoolean( ignoreangles );
   arc.WriteBoolean( splineangles );
   arc.WriteBoolean( panning );

   arc.WriteFloat( pan_offset );
   arc.WriteFloat( pan_dir );
   arc.WriteFloat( pan_max );
   arc.WriteFloat( pan_speed );
   arc.WriteVector( pan_angles );

   arc.WriteFloat( yaw );
   arc.WriteBoolean( fixedyaw );
   }

inline EXPORT_FROM_DLL void CameraWatchState::Unarchive
	(
	Archiver &arc
	)
   {
   arc.ReadVector( &dir );
   arc.ReadSafePointer( &watchEnt );

   arc.ReadBoolean( &ignoreangles );
   arc.ReadBoolean( &splineangles );
   arc.ReadBoolean( &panning );

   arc.ReadFloat( &pan_offset );
   arc.ReadFloat( &pan_dir );
   arc.ReadFloat( &pan_max );
   arc.ReadFloat( &pan_speed );
   arc.ReadVector( &pan_angles );

   arc.ReadFloat( &yaw );
   arc.ReadBoolean( &fixedyaw );
   }

class EXPORT_FROM_DLL CameraState
   {
   public:
      CameraMoveState   move;
      CameraWatchState  watch;

	   virtual void      Archive( Archiver &arc );
      virtual void      Unarchive( Archiver &arc );
   };

inline EXPORT_FROM_DLL void CameraState::Archive
	(
	Archiver &arc
	)
   {
   move.Archive( arc );
   watch.Archive( arc );
   }

inline EXPORT_FROM_DLL void CameraState::Unarchive
	(
	Archiver &arc
	)
   {
   move.Unarchive( arc );
   watch.Unarchive( arc );
   }

class EXPORT_FROM_DLL Camera : public Entity
	{
   private:
      float default_fov;
      float default_yaw;
      float default_follow_dist;
      float default_height;
      float default_speed;
      float default_pan_max;
      float default_pan_speed;

      Vector default_angles;

	protected:
      CameraState       currentstate;
      CameraState       newstate;

      float             watchTime;
      float             followTime;
      float             jumpTime;

		EntityPtr			targetEnt;
		EntityPtr			targetWatchEnt;

      str               nextCamera;
      str               overlay;
      str               thread;

		qboolean				showcamera;

		Event					moveevent;

		void					FollowingPath( Event *ev );
		void					CreateOribit( Vector pos, float radius );
		void					CreatePath( SplinePath *path, splinetype_t type );
      void              InitializeMoveState( CameraMoveState &movestate );
      void              InitializeWatchState( CameraWatchState &watchstate );
      void              InitializeState( CameraState &state );

	public:
      CLASS_PROTOTYPE( Camera );

      float             fov;

								Camera();
		void					Stop( void );
		void					FollowPath( SplinePath *path, qboolean loop, Entity *watch );
		void					Orbit( Entity *ent, float dist, Entity *watch );
		void					FollowEntity( Entity *ent, float dist, int mask, Entity *watch = NULL );
		void					StartMoving( Event *ev );
		void					StopMoving( Event *ev );
		void					Pause( Event *ev );
		void					Continue( Event *ev );
		void					SetSpeed( Event *ev );
		void					SetDistance( Event *ev );
		void					SetHeight( Event *ev );
		void					SetYaw( Event *ev );
		void					FixedYaw( Event *ev );
		void					RelativeYaw( Event *ev );
		void					SetFOV( Event *ev );
		void					OrbitEvent( Event *ev );
		void					FollowEvent( Event *ev );
		void					WatchEvent( Event *ev );
		void					NoWatchEvent( Event *ev );
		void					LookAt( Event *ev );
		void					MoveToEntity( Event *ev );
		void					MoveToPos( Event *ev );
		void					IgnoreAngles( Event *ev );
		void					UseAngles( Event *ev );
		void					SplineAngles( Event *ev );
		void					NormalAngles( Event *ev );
		void					FixedPosition( Event *ev );
		void					NoFixedPosition( Event *ev );
		void					JumpCut( Event *ev );
		void					JumpTime( Event *ev );
		void					TurnTo( Event *ev );
      void              EvaluatePosition( CameraState &state );
      void              PanEvent( Event *ev );
      void              StopPanEvent( Event *ev );
      void              PanSpeedEvent( Event *ev );
      void              PanMaxEvent( Event *ev );
      void              SetPanAngles( Event *ev );
      void              SetNextCamera( Event *ev );
      void              SetOverlay( Event *ev );
      void              SetThread( Event *ev );

      str               &NextCamera( void );
      str               &Thread( void );
      str               &Overlay( void );

	   virtual void      Archive( Archiver &arc );
      virtual void      Unarchive( Archiver &arc );
	};

inline EXPORT_FROM_DLL void Camera::Archive
	(
	Archiver &arc
	)
   {
   Entity::Archive( arc );

   arc.WriteFloat( default_fov );
   arc.WriteFloat( default_yaw );
   arc.WriteFloat( default_follow_dist );
   arc.WriteFloat( default_height );
   arc.WriteFloat( default_speed );
   arc.WriteFloat( default_pan_max );
   arc.WriteFloat( default_pan_speed );
   arc.WriteVector( default_angles );

   // currentstate
   currentstate.Archive( arc );
   // newstate
   newstate.Archive( arc );

   arc.WriteFloat( watchTime );
   arc.WriteFloat( followTime );
   arc.WriteFloat( jumpTime );

   arc.WriteSafePointer( targetEnt );
   arc.WriteSafePointer( targetWatchEnt );

   arc.WriteString( nextCamera );
   arc.WriteString( overlay );
   arc.WriteString( thread );

   arc.WriteBoolean( showcamera );
   arc.WriteEvent( moveevent );
   arc.WriteFloat( fov );
   }

inline EXPORT_FROM_DLL void Camera::Unarchive
	(
	Archiver &arc
	)
   {
   Entity::Unarchive( arc );

   arc.ReadFloat( &default_fov );
   arc.ReadFloat( &default_yaw );
   arc.ReadFloat( &default_follow_dist );
   arc.ReadFloat( &default_height );
   arc.ReadFloat( &default_speed );
   arc.ReadFloat( &default_pan_max );
   arc.ReadFloat( &default_pan_speed );
   arc.ReadVector( &default_angles );

   // currentstate
   currentstate.Unarchive( arc );
   // newstate
   newstate.Unarchive( arc );

   arc.ReadFloat( &watchTime );
   arc.ReadFloat( &followTime );
   arc.ReadFloat( &jumpTime );

   arc.ReadSafePointer( &targetEnt );
   arc.ReadSafePointer( &targetWatchEnt );

   arc.ReadString( &nextCamera );
   arc.ReadString( &overlay );
   arc.ReadString( &thread );

   arc.ReadBoolean( &showcamera );
   arc.ReadEvent( &moveevent );
   arc.ReadFloat( &fov );
   }

void SetCamera( Entity *ent );

#ifdef EXPORT_TEMPLATE
template class EXPORT_FROM_DLL SafePtr<Camera>;
#endif
typedef SafePtr<Camera> CameraPtr;

class EXPORT_FROM_DLL SecurityCamera : public Camera
	{
	public:
      CLASS_PROTOTYPE( SecurityCamera );

							SecurityCamera();
	};

#endif /* camera.h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -