42 Current_camera =
camid();
74 for(
int i = 0;
i < 9;
i++)
87 void camera::set_fov(
float in_fov,
float in_fov_time,
float in_fov_acceleration_time,
float in_fov_deceleration_time)
89 if(in_fov_time == 0.0
f && in_fov_acceleration_time == 0.0
f && in_fov_deceleration_time == 0.0
f)
99 fov.
setVD(in_fov_time, in_fov_acceleration_time, 0.0
f);
102 fov.
setAVD(in_fov, in_fov_time, in_fov_acceleration_time, in_fov_deceleration_time, 0.0
f);
114 if(n_object_host_submodel > 0)
162 void camera::set_position(
vec3d *in_position,
float in_translation_time,
float in_translation_acceleration_time,
float in_translation_deceleration_time,
float in_end_velocity)
164 if(in_position != NULL && in_translation_time == 0.0
f && in_translation_acceleration_time == 0.0
f && in_translation_deceleration_time == 0.0
f)
166 c_pos = *in_position;
175 if(in_position == NULL)
177 pos_x.
setVD(in_translation_time, in_translation_acceleration_time, in_end_velocity);
178 pos_y.
setVD(in_translation_time, in_translation_acceleration_time, in_end_velocity);
179 pos_z.
setVD(in_translation_time, in_translation_acceleration_time, in_end_velocity);
183 pos_x.
setAVD(in_position->
xyz.x, in_translation_time, in_translation_acceleration_time, in_translation_deceleration_time, in_end_velocity);
184 pos_y.
setAVD(in_position->
xyz.y, in_translation_time, in_translation_acceleration_time, in_translation_deceleration_time, in_end_velocity);
185 pos_z.
setAVD(in_position->
xyz.z, in_translation_time, in_translation_acceleration_time, in_translation_deceleration_time, in_end_velocity);
190 pos_x.
setVD(in_acceleration_time, in_acceleration_time, in_velocity->
xyz.x);
191 pos_y.
setVD(in_acceleration_time, in_acceleration_time, in_velocity->
xyz.y);
192 pos_z.
setVD(in_acceleration_time, in_acceleration_time, in_velocity->
xyz.z);
195 void camera::set_rotation(
matrix *in_orientation,
float in_rotation_time,
float in_rotation_acceleration_time,
float in_rotation_deceleration_time)
197 if(in_orientation != NULL && in_rotation_time == 0.0
f && in_rotation_acceleration_time == 0.0
f && in_rotation_deceleration_time == 0.0
f)
199 c_ori = *in_orientation;
200 for(
int i = 0;
i < 9;
i++)
207 if(in_orientation == NULL)
209 for(
int i = 0;
i < 9;
i++)
210 ori[
i].setVD(in_rotation_time, in_rotation_acceleration_time, 0.0
f);
214 for(
int i = 0;
i < 9;
i++)
215 ori[
i].setAVD(in_orientation->
a1d[
i], in_rotation_time, in_rotation_acceleration_time, in_rotation_deceleration_time, 0.0f);
218 void camera::set_rotation(
angles *in_angles,
float in_rotation_time,
float in_rotation_acceleration_time,
float in_rotation_deceleration_time)
222 this->
set_rotation(&mtx, in_rotation_time, in_rotation_acceleration_time, in_rotation_deceleration_time);
229 if(in_target != NULL)
234 if(in_target->
xyz.x == position.
xyz.x && in_target->
xyz.y == position.
xyz.y && in_target->
xyz.z == position.
xyz.z)
245 set_rotation(&temp_matrix, in_rotation_time, in_rotation_acceleration_time, in_rotation_deceleration_time);
250 Error(
LOCATION,
"This function is disabled until further notice.");
297 if(position == NULL && orientation == NULL)
362 if(orientation != NULL)
364 bool target_set =
false;
384 target_pos = objp->
pos;
416 for(
int i = 0;
i < 9;
i++)
430 *orientation =
c_ori;
451 vec3d tmp_vel = { { { 0.0f, 5.1919f, 14.7f } } };
478 c_desired_vel.
xyz.x = 0.0f;
479 c_desired_vel.
xyz.y = 0.0f;
480 c_desired_vel.
xyz.z = 0.0f;
486 if ( instantaneous ) {
487 c_vel = c_desired_vel;
494 vec3d new_vel, delta_pos;
504 float ot = c_time+0.0f;
506 c_time += in_frametime;
508 if ( (ot < 0.667
f) && ( c_time >= 0.667
f ) ) {
518 tmp.
xyz.x = 22.0f * sinf(tmp_angle);
519 tmp.
xyz.y = -22.0f * cosf(tmp_angle);
524 if ( (ot < 3.0
f ) && ( c_time >= 3.0
f ) ) {
536 if(orientation != NULL)
537 *orientation = c_ori;
542 #define MAX_SUBTITLE_LINES 64
543 subtitle::subtitle(
int in_x_pos,
int in_y_pos,
const char* in_text,
const char* in_imageanim,
float in_display_time,
544 float in_fade_time,
const color *in_text_color,
int in_text_fontnum,
bool center_x,
bool center_y,
int in_width,
545 int in_height,
bool in_post_shaded)
546 :display_time(-1.0
f), fade_time(-1.0
f), text_fontnum(-1), time_displayed(-1.0
f), time_displayed_end(-1.0
f),
555 memset( imageanim, 0,
sizeof(imageanim) );
556 memset( &text_pos, 0, 2*
sizeof(
int) );
557 memset( &image_pos, 0, 4*
sizeof(
int) );
560 if ( ((in_text != NULL) && (strlen(in_text) <= 0)) && ((in_imageanim != NULL) && (strlen(in_imageanim) <= 0)) )
563 if (in_text != NULL && in_text[0] !=
'\0')
567 in_text = text_buf.c_str();
571 int num_text_lines = 0;
576 if ( (in_text != NULL) && (in_text[0] !=
'\0') ) {
577 int split_width = (in_width > 0) ? in_width : 200;
580 for(
int i = 0;
i < num_text_lines;
i++)
582 text_buf.assign(text_line_ptrs[
i], text_line_lens[i]);
583 text_lines.push_back(text_buf);
588 if(in_text_color != NULL)
589 text_color = *in_text_color;
592 text_fontnum = in_text_fontnum;
595 display_time =
fl_abs(in_display_time);
596 fade_time =
fl_abs(in_fade_time);
599 if ( (in_imageanim != NULL) && (in_imageanim[0] !=
'\0') )
601 image_id =
bm_load(in_imageanim);
604 strncpy(imageanim, in_imageanim,
sizeof(imageanim) - 1);
608 int w=0,
h=0, tw=0, th=0;
609 if(center_x || center_y)
613 if (text_fontnum >= 0)
624 for(
int i = 0;
i < num_text_lines;
i++)
635 if (old_fontnum >= 0)
661 if(in_x_pos < 0 && !center_x)
666 if(in_y_pos < 0 && !center_y)
671 image_pos.w = in_width;
672 image_pos.h = in_height;
675 text_pos.x = image_pos.x +
w;
677 text_pos.x = image_pos.x;
678 text_pos.y = image_pos.y;
680 time_displayed = 0.0f;
681 time_displayed_end = 2.0f*fade_time + display_time;
683 post_shaded = in_post_shaded;
689 if(time_displayed < fade_time)
693 else if(time_displayed > time_displayed_end)
698 else if((time_displayed - fade_time) > display_time)
700 text_color.
alpha = (
ubyte)
fl2i(255.0
f*(1-(time_displayed - fade_time - display_time)/fade_time));
704 text_color.
alpha = 255;
711 if (text_fontnum >= 0)
733 if (old_fontnum >= 0)
743 if (image_pos.w > 0 || image_pos.h > 0)
749 scale.
xyz.x = (image_pos.w > 0) ? (image_pos.w / (
float) orig_w) : 1.0
f;
750 scale.
xyz.y = (image_pos.h > 0) ? (image_pos.h / (
float) orig_h) : 1.0
f;
764 time_displayed += frametime;
769 if (image_id != -1) {
776 void subtitle::clone(
const subtitle &sub)
779 text_lines = sub.text_lines;
780 text_fontnum = sub.text_fontnum;
783 text_pos = sub.text_pos;
784 image_pos = sub.image_pos;
786 display_time = sub.display_time;
787 fade_time = sub.fade_time;
788 memcpy( &text_color, &sub.text_color,
sizeof(
color) );
790 if ( strlen(sub.imageanim) ) {
799 time_displayed = sub.time_displayed;
800 time_displayed_end = sub.time_displayed_end;
802 post_shaded = sub.post_shaded;
808 if (image_id != -1) {
853 if(idx >= Cameras.size())
856 if(Cameras[idx] == NULL)
859 if(Cameras[idx]->get_signature() != this->sig)
875 Current_camera =
camid();
876 for (
auto ii = Cameras.begin(); ii != Cameras.end(); ++ii) {
884 static int next_sig = 0;
892 return cam_create(n_name, n_pos, &ori, n_object, n_object_host_submodel);
911 cam =
new camera(buf, sig);
912 cid =
camid(Cameras.size(), sig);
913 Cameras.push_back(cam);
936 size_t i,
size=Cameras.size();
937 for(i = 0; i <
size; i++)
939 if(Cameras[i] != NULL)
940 Cameras[
i]->do_frame(frametime);
946 if(idx >= Cameras.size())
949 return camid(idx, Cameras[idx]->get_signature());
959 return Cameras.size();
967 size_t i,
size=Cameras.size();
968 for(i = 0; i <
size; i++)
970 if(Cameras[i] != NULL && !
stricmp(Cameras[i]->get_name(), name))
971 return camid(i, Cameras[i]->get_signature());
977 static bool Camera_hud_draw_saved =
false;
978 static int Camera_hud_draw_value = 0;
988 Current_camera = cid;
992 if(!Camera_hud_draw_saved)
995 Camera_hud_draw_saved =
true;
1009 Camera_hud_draw_saved =
false;
1021 for(sub = Subtitles.begin(); sub != Subtitles.end(); ++sub)
1023 if ( !sub->is_post_shaded( ) )
1024 sub->do_frame(frametime);
1031 for(sub = Subtitles.begin(); sub != Subtitles.end(); ++sub)
1033 if ( sub->is_post_shaded( ) )
1034 sub->do_frame(frametime);
1053 offset.
xyz.x = 0.0001f;
SCP_vector< camera * > Cameras
camid cam_get_camera(uint idx)
int gr_get_current_fontnum()
camid cam_create(char *n_name, vec3d *n_pos, vec3d *n_norm, object *n_object, int n_object_host_submodel)
int get_object_host_submodel()
model_subsystem * system_info
void model_find_world_point(vec3d *outpnt, vec3d *mpnt, int model_num, int submodel_num, const matrix *objorient, const vec3d *objpos)
void setVD(float total_movement_time, float ending_acceleration_time, float final_velocity)
matrix * vm_matrix_x_matrix(matrix *dest, const matrix *src0, const matrix *src1)
GLfloat GLfloat GLfloat GLfloat h
void set_object_host(object *objp, int n_object_host_submodel=-1)
camera(char *in_name=NULL, int in_signature=-1)
#define gr_pop_scale_matrix
polymodel * model_get(int model_num)
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)
void vm_rotate_matrix_by_angles(matrix *orient, const angles *tangles)
matrix * vm_vector_2_matrix_norm(matrix *m, const vec3d *fvec, const vec3d *uvec, const vec3d *rvec)
void ship_get_global_turret_gun_info(object *objp, ship_subsys *ssp, vec3d *gpos, vec3d *gvec, int use_angles, vec3d *targetp)
const subtitle & operator=(const subtitle &sub)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void gr_init_alphacolor(color *clr, int r, int g, int b, int alpha, int type)
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)
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
int bm_get_info(int handle, int *w, int *h, ubyte *flags, int *nframes, int *fps)
Gets info on the bitmap indexed by handle.
void get(float Time, float *Position, float *Velocity)
struct vec3d::@225::@227 xyz
bool cam_set_camera(camid cid)
#define CAM_STATIONARY_POS
void set_rotation(matrix *in_ori)
#define Assertion(expr, msg,...)
#define END_OF_LIST(head)
void set_position(vec3d *in_pos)
void vm_vec_scale_add2(vec3d *dest, const vec3d *src, float k)
void cam_do_frame(float frametime)
void gr_set_color_fast(color *dst)
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
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)
void find_submodel_instance_point_normal(vec3d *outpnt, vec3d *outnorm, int model_instance_num, int submodel_num, const vec3d *submodel_pnt, const vec3d *submodel_norm)
GLenum GLenum GLenum GLenum GLenum scale
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
void apply_physics(float damping, float desired_vel, float initial_vel, float t, float *new_vel, float *delta_pos)
GLenum GLuint GLenum GLsizei const GLchar * buf
void get_info(vec3d *position, matrix *orientation)
int bm_release(int handle, int clear_render_targets)
Frees both a bitmap's data and it's associated slot.
int object_get_model(object *objp)
void ship_get_eye(vec3d *eye_pos, matrix *eye_orient, object *obj, bool do_slew, bool from_origin)
void get_info(vec3d *position, matrix *orientation)
void get_turret_cam_pos(camera *cam, vec3d *pos)
void set_translation_velocity(vec3d *in_velocity, float in_acceleration_time=0.0f)
void set_object_target(object *objp, int n_object_target_submodel=-1)
matrix * vm_vector_2_matrix(matrix *m, const vec3d *fvec, const vec3d *uvec, const vec3d *rvec)
void vm_vec_add2(vec3d *dest, const vec3d *src)
#define GR_ALPHABLEND_FILTER
void set_custom_position_function(void(*n_func_custom_position)(camera *cam, vec3d *pos))
struct matrix::@228::@230 vec
#define CAM_STATIONARY_FOV
#define CAM_DEFAULT_FLAGS
void do_frame(float frametime)
void vm_orthogonalize_matrix(matrix *m_src)
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
void set_custom_orientation_function(void(*n_func_custom_orientation)(camera *cam, matrix *ori))
float vm_vec_normalized_dir(vec3d *dest, const vec3d *end, const vec3d *start)
int split_str(const char *src, int max_pixel_w, int *n_chars, const char **p_str, int max_lines, char ignore_char)
void setAVD(float final_position, float total_movement_time, float starting_accleration_time, float ending_acceleration_time, float final_velocity)
vec3d * vm_vec_unrotate(vec3d *dest, const vec3d *src, const matrix *m)
void(* func_custom_position)(camera *cam, vec3d *pos)
GLint GLint GLint GLint GLint x
void hud_set_draw(int draw)
#define gr_push_scale_matrix
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
SCP_vector< subtitle > Subtitles
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)
eye * get_submodel_eye(polymodel *pm, int submodel_num)
GLuint const GLchar * name
int object_target_submodel
bool sexp_replace_variable_names_with_values(char *text, int max_len)
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
int vm_vec_same(const vec3d *v1, const vec3d *v2)
void set_velocity(vec3d *in_vel, bool instantaneous)
float frand()
Return random value in range 0.0..1.0- (1.0- means the closest number less than 1.0)
GLubyte GLubyte GLubyte GLubyte w
camid cam_lookup(char *name)
void subtitles_do_frame(float frametime)
class camera * getCamera()
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
#define CAM_STATIONARY_ORI
void set_name(char *in_name)
int get_object_target_submodel()
object * get_object_host()
GLsizei GLsizei GLuint * obj
void set_rotation_velocity(angles *in_rotation_rate, float in_acceleration_time=0.0f)
#define MAX_SUBTITLE_LINES
void gr_bitmap(int _x, int _y, int resize_mode)
#define GR_BITBLT_MODE_NORMAL
eye view_positions[MAX_EYES]
void do_frame(float in_frametime)
void subtitles_do_frame_post_shaded(float frametime)
bool Cutscene_camera_displays_hud
object * get_object_target()
void do_frame(float in_frametime)
void gr_set_font(int fontnum)
void(* func_custom_orientation)(camera *cam, matrix *ori)
void cam_delete(camid cid)
void gr_init_color(color *c, int r, int g, int b)
matrix vmd_identity_matrix
void get_turret_cam_orient(camera *cam, matrix *ori)
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)
float VIEWER_ZOOM_DEFAULT