]> icculus.org git repositories - icculus/iodoom3.git/blob - neo/d3xp/Camera.h
Various Mac OS X tweaks to get this to build. Probably breaking things.
[icculus/iodoom3.git] / neo / d3xp / Camera.h
1 /*
2 ===========================================================================
3
4 Doom 3 GPL Source Code
5 Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company. 
6
7 This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).  
8
9 Doom 3 Source Code is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 Doom 3 Source Code is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with Doom 3 Source Code.  If not, see <http://www.gnu.org/licenses/>.
21
22 In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code.  If not, please request a copy in writing from id Software at the address below.
23
24 If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
25
26 ===========================================================================
27 */
28
29 #ifndef __GAME_CAMERA_H__
30 #define __GAME_CAMERA_H__
31
32
33 /*
34 ===============================================================================
35
36 Camera providing an alternative view of the level.
37
38 ===============================================================================
39 */
40
41 class idCamera : public idEntity {
42 public:
43         ABSTRACT_PROTOTYPE( idCamera );
44
45         void                                    Spawn( void );
46         virtual void                    GetViewParms( renderView_t *view ) = 0;
47         virtual renderView_t *  GetRenderView();
48         virtual void                    Stop( void ){} ;
49 };
50
51 /*
52 ===============================================================================
53
54 idCameraView
55
56 ===============================================================================
57 */
58
59 class idCameraView : public idCamera {
60 public:
61         CLASS_PROTOTYPE( idCameraView );
62                                                         idCameraView();
63
64         // save games
65         void                                    Save( idSaveGame *savefile ) const;                             // archives object for save game file
66         void                                    Restore( idRestoreGame *savefile );                             // unarchives object from save game file
67
68         void                                    Spawn( );
69         virtual void                    GetViewParms( renderView_t *view );
70         virtual void                    Stop( void );
71
72 protected:
73         void                                    Event_Activate( idEntity *activator );
74         void                                    Event_SetAttachments();
75         void                                    SetAttachment( idEntity **e, const char *p );
76         float                                   fov;
77         idEntity                                *attachedTo;
78         idEntity                                *attachedView;
79 };
80
81
82
83 /*
84 ===============================================================================
85
86 A camera which follows a path defined by an animation.
87
88 ===============================================================================
89 */
90
91 typedef struct {
92         idCQuat                         q;
93         idVec3                          t;
94         float                           fov;
95 } cameraFrame_t;
96
97 class idCameraAnim : public idCamera {
98 public:
99         CLASS_PROTOTYPE( idCameraAnim );
100
101                                                         idCameraAnim();
102                                                         ~idCameraAnim();
103
104         // save games
105         void                                    Save( idSaveGame *savefile ) const;                             // archives object for save game file
106         void                                    Restore( idRestoreGame *savefile );                             // unarchives object from save game file
107
108         void                                    Spawn( void );
109         virtual void                    GetViewParms( renderView_t *view );
110
111 private:
112         int                                             threadNum;
113         idVec3                                  offset;
114         int                                             frameRate;
115         int                                             starttime;
116         int                                             cycle;
117         idList<int>                             cameraCuts;
118         idList<cameraFrame_t>   camera;
119         idEntityPtr<idEntity>   activator;
120
121         void                                    Start( void );
122         void                                    Stop( void );
123         void                                    Think( void );
124
125         void                                    LoadAnim( void );
126         void                                    Event_Start( void );
127         void                                    Event_Stop( void );
128         void                                    Event_SetCallback( void );
129         void                                    Event_Activate( idEntity *activator );
130 };
131
132 #endif /* !__GAME_CAMERA_H__ */