- Radiant is now Vista compatible (Aero must be disabled)
[xonotic/netradiant.git] / contrib / camera / camera.h
1 /*
2 Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
4
5 This file is part of GtkRadiant.
6
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21
22 /*
23 Camera plugin for GtkRadiant
24 Copyright (C) 2002 Splash Damage Ltd.
25 */
26
27 #ifndef _CAMERA_H_
28 #define _CAMERA_H_
29
30 typedef unsigned char byte;
31
32 #include "mathlib.h"
33 #include <string.h>
34 #include "qertypes.h"
35 #include <stdio.h>
36
37 #define USE_QERTABLE_DEFINE
38 #include "iscenegraph.h"
39 #include "qerplugin.h"
40
41 #define USE_QGLTABLE_DEFINE
42 #include "igl.h"
43 extern _QERQglTable __QGLTABLENAME;
44
45 #include "iui.h"
46 #include "icamera.h"
47
48 #include "bytebool.h"
49
50 class CCamera;
51 #include <gtk/gtk.h>
52
53 #include "str.h"
54
55
56 #include "misc.h"
57 #include "dialogs.h"
58 #include "funchandlers.h"
59 #include "renderer.h"
60 #include "listener.h"
61
62 extern _QERFuncTable_1    g_FuncTable;
63 extern _QERQglTable       g_QglTable;
64 extern _QERUITable        g_UITable;
65 extern _QERCameraTable          g_CameraTable;
66
67 extern CRenderer          *Renderer;
68 extern CListener          *Listener;
69
70 // splinelib
71 #define CAMERA_PLUGIN
72 #define DotProduct(a,b)                 ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2])
73
74 #include "splines/splines.h"
75
76 // this needs to match splines.cpp
77 #define MAX_CAMERAS 64
78 extern idCameraDef camera[MAX_CAMERAS];
79
80 extern "C" qboolean loadCamera(int camNum, const        char *name);
81
82 #define PATH_MAX 260
83
84 //
85 // CCamera
86 //
87
88 class CCamera {
89 public:
90   CCamera( int i ) {
91     cam = &camera[i];
92     camnum = i;
93     Init();
94   }
95   ~CCamera();
96
97   void Init() {
98     next = prev = NULL;
99     fileName[0] = '\0';
100                 hasbeensaved = 0;
101   }
102
103   idCameraDef *GetCam() {
104     return( cam );
105   }
106   int GetCamNum() {
107     return( camnum );
108   }
109
110   char *GetFileName() {
111     return( fileName );
112   }
113   void SetFileName( const char *name, bool save ) {
114     strcpy( fileName, name );
115     if( save )
116       hasbeensaved = 1;
117   }
118
119   CCamera *GetNext() {
120     return( next );
121   }
122
123   CCamera *GetPrev() {
124     return( prev );
125   }
126
127   void SetNext( CCamera *camera ) {
128     next = camera;
129   }
130   void SetPrev( CCamera *camera ) {
131     prev = camera;
132   }
133
134         int HasBeenSaved() {
135                 return( hasbeensaved );
136         }
137         void HasBeenModified() {
138                 if( hasbeensaved )
139                         hasbeensaved = 2;
140         }
141
142 protected:
143   idCameraDef *cam;
144   int camnum;
145   CCamera *next, *prev;
146   char fileName[PATH_MAX];
147         int hasbeensaved;       // 0:never saved 1:saved 2:saved, but modified
148 };
149
150 CCamera *AllocCam();
151 void FreeCam( CCamera *cam );
152 void SetCurrentCam( CCamera *cam );
153 CCamera *GetCurrentCam();
154
155 // globals
156 extern GtkWidget *g_pRadiantWnd;
157 extern GtkWidget *g_pCameraInspectorWnd;
158 extern CCamera *firstCam;
159 extern bool g_bEditOn;
160 extern int g_iEditMode;
161 extern int g_iActiveTarget;
162 extern int g_iPreviewRunning;
163 extern CCamera *g_pCurrentEditCam;
164
165 #endif // _CAMERA_H_