FS2_Open
Open source remastering of the Freespace 2 engine
camera.h
Go to the documentation of this file.
1 
2 #ifndef _CAMERA_H
3 #define _CAMERA_H
4 
5 #include "globalincs/globals.h"
6 #include "globalincs/pstypes.h"
7 #include "graphics/2d.h"
8 #include "object/object.h"
9 #include "physics/physics.h" //for avd
10 
11 #include <string>
12 
13 #define CAM_STATIONARY_FOV (1<<0)
14 #define CAM_STATIONARY_ORI (1<<1)
15 #define CAM_STATIONARY_POS (1<<2)
16 #define CAM_DEFAULT_FLAGS 0
17 
18 class camera
19 {
20  friend class avd_camera;
21 protected:
23  int sig;
24  int flags;
25 
28 
31 
34 
40 
41  //Cache stuff
42  float c_fov;
45 public:
46  camera(char *in_name=NULL, int in_signature=-1);
47  ~camera();
48  void clear();
49  void reset();
50 
51  //Set
52  void set_name(char *in_name);
53 
54  void set_object_host(object *objp, int n_object_host_submodel = -1);
55  void set_object_target(object *objp, int n_object_target_submodel = -1);
56 
57  void set_custom_position_function(void (*n_func_custom_position)(camera *cam, vec3d *pos));
58  void set_custom_orientation_function(void (*n_func_custom_orientation)(camera *cam, matrix *ori));
59 
60  void set_fov(float in_fov, float in_fov_time = 0.0f, float in_fov_acceleration_time = 0.0f, float in_deceleration_time = 0.0f);
61 
62  void set_position(vec3d *in_position = NULL, float in_translation_time = 0.0f, float in_translation_acceleration_time = 0.0f, float in_translation_deceleration_time = 0.0f, float in_end_velocity = 0.0f);
63  void set_translation_velocity(vec3d *in_velocity, float in_acceleration_time = 0.0f);
64 
65  void set_rotation(matrix *in_orientation = NULL, float in_rotation_time = 0.0f, float in_rotation_acceleration_time = 0.0f, float in_rotation_deceleration_time = 0.0f);
66  void set_rotation(angles *in_angles, float in_rotation_time = 0.0f, float in_rotation_acceleration_time = 0.0f, float in_rotation_deceleration_time = 0.0f);
67  void set_rotation_facing(vec3d *in_target, float in_rotation_time = 0.0f, float in_rotation_acceleration_time = 0.0f, float in_rotation_deceleration_time = 0.0f);
68  void set_rotation_velocity(angles *in_rotation_rate, float in_acceleration_time = 0.0f);
69 
70  //Get
71  char *get_name() {return name;}
72  int get_signature() {return sig;}
73  object *get_object_host();
75  object *get_object_target();
77  float get_fov();
78  void get_info(vec3d *position, matrix *orientation);
79 
80  //Is
81  bool is_empty(){return sig < 0;}
82 
83  //Do
84  void do_frame(float in_frametime);
85 };
86 
88 {
89 private:
90  float c_time;
91  float c_damping;
92 
93  vec3d c_vel;
94  vec3d c_desired_vel;
95 
96  vec3d c_pos;
97  matrix c_ori;
98 public:
99  warp_camera();
100  warp_camera(object *objp);
101  void reset();
102 
103  void set_position(vec3d *in_pos);
104  void set_rotation(matrix *in_ori);
105  void set_velocity(vec3d *in_vel, bool instantaneous);
106 
107  void do_frame(float in_frametime);
108 
109  void get_info(vec3d *position, matrix *orientation);
110 };
111 
112 extern warp_camera Warp_camera;
113 
114 class subtitle
115 {
116 private:
117  void clone(const subtitle &sub);
118 
119  SCP_vector<SCP_string> text_lines;
120  struct { int x; int y; } text_pos;
121 
122  float display_time;
123  float fade_time;
124  color text_color;
125  int text_fontnum;
126 
127  //Done with set
128  char imageanim[MAX_FILENAME_LEN];
129  int image_id;
130  struct { int x; int y; int w; int h; } image_pos;
131 
132  //Time this has been displayed
133  float time_displayed;
134 
135  //When to end it
136  float time_displayed_end;
137 
138  bool post_shaded;
139 public:
140  subtitle(int in_x_pos, int in_y_pos, const char* in_text = NULL, const char* in_imageanim = NULL,
141  float in_display_time = 0, float in_fade_time = 0.0f, const color *in_text_color = NULL, int in_text_fontnum = -1,
142  bool center_x = false, bool center_y = false, int in_width = 0, int in_height = 0, bool post_shaded=false);
143  ~subtitle();
144 
145  subtitle(const subtitle &sub) { clone(sub); }
146  const subtitle &operator=(const subtitle &sub);
147 
148  void do_frame(float frametime);
149  bool is_post_shaded( ) { return post_shaded; }
150 };
151 
152 //Some global stuff
154 extern float VIEWER_ZOOM_DEFAULT;
155 extern float Sexp_fov;
156 
157 //Helpful functions
158 void cam_init();
159 void cam_close();
160 void cam_do_frame(float frametime);
161 camid cam_create(char *n_name=NULL, vec3d *n_pos=NULL, matrix *n_ori=NULL, object *n_object=NULL, int n_submodel_parent=-1);
162 camid cam_create(char *n_name, vec3d *n_pos, vec3d *n_norm, object *n_object=NULL, int n_submodel_parent=-1);
163 void cam_delete(camid cid);
164 bool cam_set_camera(camid cid);
165 void cam_reset_camera();
166 camid cam_lookup(char *name);
169 uint cam_get_num();
170 
171 void get_turret_cam_pos(camera *cam, vec3d *pos);
172 void get_turret_cam_orient(camera *cam, matrix *ori);
173 
174 void subtitles_close();
175 void subtitles_do_frame(float frametime);
176 void subtitles_do_frame_post_shaded(float frametime);
177 
178 #endif // _CAMERA_H
#define MAX_FILENAME_LEN
Definition: pstypes.h:324
camid cam_lookup(char *name)
Definition: camera.cpp:965
int get_object_host_submodel()
Definition: camera.cpp:266
bool is_empty()
Definition: camera.h:81
matrix c_ori
Definition: camera.h:44
avd_movement fov
Definition: camera.h:35
~camera()
Definition: camera.cpp:37
void set_object_host(object *objp, int n_object_host_submodel=-1)
Definition: camera.cpp:105
camera(char *in_name=NULL, int in_signature=-1)
Definition: camera.cpp:29
void get_turret_cam_orient(camera *cam, matrix *ori)
Definition: camera.cpp:1061
avd_movement pos_z
Definition: camera.h:38
GLuint index
Definition: Glext.h:5608
subtitle(int in_x_pos, int in_y_pos, const char *in_text=NULL, const char *in_imageanim=NULL, float in_display_time=0, float in_fade_time=0.0f, const color *in_text_color=NULL, int in_text_fontnum=-1, bool center_x=false, bool center_y=false, int in_width=0, int in_height=0, bool post_shaded=false)
Definition: camera.cpp:543
const subtitle & operator=(const subtitle &sub)
Definition: camera.cpp:805
void get_turret_cam_pos(camera *cam, vec3d *pos)
Definition: camera.cpp:1040
Definition: pstypes.h:88
void set_position(vec3d *in_position=NULL, float in_translation_time=0.0f, float in_translation_acceleration_time=0.0f, float in_translation_deceleration_time=0.0f, float in_end_velocity=0.0f)
Definition: camera.cpp:162
Definition: 2d.h:95
float Sexp_fov
Definition: camera.cpp:16
void set_rotation(matrix *in_ori)
Definition: camera.cpp:471
GLclampf f
Definition: Glext.h:7097
friend class avd_camera
Definition: camera.h:20
object_h object_target
Definition: camera.h:29
SCP_vector< subtitle > Subtitles
Definition: camera.cpp:21
bool cam_set_camera(camid cid)
Definition: camera.cpp:980
void set_position(vec3d *in_pos)
Definition: camera.cpp:466
void set_fov(float in_fov, float in_fov_time=0.0f, float in_fov_acceleration_time=0.0f, float in_deceleration_time=0.0f)
Definition: camera.cpp:87
object * objp
Definition: lua.cpp:3105
void get_info(vec3d *position, matrix *orientation)
Definition: camera.cpp:531
void get_info(vec3d *position, matrix *orientation)
Definition: camera.cpp:295
camid cam_get_camera(uint index)
Definition: camera.cpp:944
void reset()
Definition: camera.cpp:458
~subtitle()
Definition: camera.cpp:767
object_h object_host
Definition: camera.h:26
int sig
Definition: camera.h:23
bool is_post_shaded()
Definition: camera.h:149
void set_translation_velocity(vec3d *in_velocity, float in_acceleration_time=0.0f)
Definition: camera.cpp:188
warp_camera Warp_camera
Definition: camera.cpp:17
void set_object_target(object *objp, int n_object_target_submodel=-1)
Definition: camera.cpp:135
avd_movement ori[9]
Definition: camera.h:39
void cam_do_frame(float frametime)
Definition: camera.cpp:934
void set_custom_position_function(void(*n_func_custom_position)(camera *cam, vec3d *pos))
Definition: camera.cpp:148
unsigned int uint
Definition: pstypes.h:64
void cam_close()
Definition: camera.cpp:872
int get_signature()
Definition: camera.h:72
void do_frame(float frametime)
Definition: camera.cpp:686
void set_custom_orientation_function(void(*n_func_custom_orientation)(camera *cam, matrix *ori))
Definition: camera.cpp:157
char name[NAME_LENGTH]
Definition: camera.h:22
int x
Definition: camera.h:120
void(* func_custom_position)(camera *cam, vec3d *pos)
Definition: camera.h:32
void subtitles_do_frame_post_shaded(float frametime)
Definition: camera.cpp:1028
subtitle(const subtitle &sub)
Definition: camera.h:145
int w
Definition: camera.h:130
void set_rotation(matrix *in_orientation=NULL, float in_rotation_time=0.0f, float in_rotation_acceleration_time=0.0f, float in_rotation_deceleration_time=0.0f)
Definition: camera.cpp:195
typedef void(APIENTRY *PFNGLARRAYELEMENTEXTPROC)(GLint i)
avd_movement pos_x
Definition: camera.h:36
GLuint const GLchar * name
Definition: Glext.h:5608
float c_fov
Definition: camera.h:42
int flags
Definition: camera.h:24
int object_target_submodel
Definition: camera.h:30
void set_velocity(vec3d *in_vel, bool instantaneous)
Definition: camera.cpp:476
Definition: pstypes.h:606
#define NAME_LENGTH
Definition: globals.h:15
char * get_name()
Definition: camera.h:71
float VIEWER_ZOOM_DEFAULT
Definition: camera.cpp:15
void clear()
Definition: camera.cpp:46
void set_name(char *in_name)
Definition: camera.cpp:81
int get_object_target_submodel()
Definition: camera.cpp:279
camid cam_get_current()
Definition: camera.cpp:952
void reset()
Definition: camera.cpp:53
uint cam_get_num()
Definition: camera.cpp:957
object * get_object_host()
Definition: camera.cpp:258
hull_check pos
Definition: lua.cpp:5050
float get_fov()
Definition: camera.cpp:284
int object_host_submodel
Definition: camera.h:27
void set_rotation_velocity(angles *in_rotation_rate, float in_acceleration_time=0.0f)
Definition: camera.cpp:248
void do_frame(float in_frametime)
Definition: camera.cpp:253
avd_movement pos_y
Definition: camera.h:37
Definition: camera.h:18
void cam_init()
Definition: camera.cpp:866
object * get_object_target()
Definition: camera.cpp:271
camid cam_create(char *n_name=NULL, vec3d *n_pos=NULL, matrix *n_ori=NULL, object *n_object=NULL, int n_submodel_parent=-1)
Definition: camera.cpp:895
void subtitles_close()
Definition: camera.cpp:1013
void do_frame(float in_frametime)
Definition: camera.cpp:492
void subtitles_do_frame(float frametime)
Definition: camera.cpp:1018
void cam_reset_camera()
Definition: camera.cpp:1002
void(* func_custom_orientation)(camera *cam, matrix *ori)
Definition: camera.h:33
void cam_delete(camid cid)
Definition: camera.cpp:926
vec3d c_pos
Definition: camera.h:43
void set_rotation_facing(vec3d *in_target, float in_rotation_time=0.0f, float in_rotation_acceleration_time=0.0f, float in_rotation_deceleration_time=0.0f)
Definition: camera.cpp:225
int y
Definition: camera.h:120
int h
Definition: camera.h:130