50 Warning(
LOCATION,
"Spelling error in table file. Please change \"inital\" to \"initial\".");
58 }
else if ( !
strnicmp(p,
"primary_bank", 12) || !
strnicmp(p,
"\"primary_bank\"", 14) ) {
61 }
else if ( !
strnicmp(p,
"secondary_bank", 14) || !
strnicmp(p,
"\"secondary_bank\"", 16) ) {
67 }
else if ( !
strnicmp(p,
"turret firing", 13) || !
strnicmp(p,
"\"turret firing\"", 15) ) {
75 strcpy(quoted_name,
"\"");
77 strcat(quoted_name,
"\"");
79 if ( !
strnicmp(p, quoted_name, strlen(quoted_name)) ) {
80 mprintf((
"Old usage warning: Please remove quotes from animation type %s.\n", quoted_name));
106 for (
int axis = 0; axis < 3; axis++) {
125 nprintf((
"ModelAnim",
"Dir=[%f, %f, %f], End=[%f, %f, %f], Vel=[%f, %f, %f], Accel=[%f, %f, %f], Slow=[%f, %f, %f]\n",
direction.
a1d[0],
direction.
a1d[1],
direction.
a1d[2],
140 if (submodel_angles->
p >=
PI2)
141 submodel_angles->
p -=
PI2;
142 else if (submodel_angles->
p < 0.0f)
143 submodel_angles->
p +=
PI2;
145 if (submodel_angles->
h >=
PI2)
146 submodel_angles->
h -=
PI2;
147 else if (submodel_angles->
h < 0.0f)
148 submodel_angles->
h +=
PI2;
150 if (submodel_angles->
b >=
PI2)
151 submodel_angles->
b -=
PI2;
152 else if (submodel_angles->
b < 0.0f)
153 submodel_angles->
b +=
PI2;
158 for (
int axis = 0; axis < 3; axis++)
166 for (
int axis = 0; axis < 3; axis++)
201 current_snd_index = -1;
236 if ( i < (MAX_TRIGGERED_ANIMATIONS-1) )
237 memmove( &queue_tmp[i], &queue_tmp[i+1],
sizeof(
queued_animation) * (MAX_TRIGGERED_ANIMATIONS-(i+1)) );
246 if (new_queue.
start == 0) {
286 for (i = 0; (i < n_queue) && (i < MAX_TRIGGERED_ANIMATIONS) && (new_queue.
start_time > queue_tmp[
i].
start_time); i++);
288 if (i >= MAX_TRIGGERED_ANIMATIONS)
297 if ( (n_queue >= (i+1)) && (i < (MAX_TRIGGERED_ANIMATIONS - 1)) ) {
298 if (n_queue >= MAX_TRIGGERED_ANIMATIONS) {
300 memcpy(&queue[i + 1], &queue_tmp[i],
sizeof(
queued_animation) * (MAX_TRIGGERED_ANIMATIONS - i - 1));
302 memcpy( &queue[i+1], &queue_tmp[i],
sizeof(
queued_animation) * (n_queue - i) );
307 queue[
i] = new_queue;
309 queue[0] = new_queue;
374 for (
int i = 0;
i < 3;
i++) {
412 int not_moving_count = 0;
432 for (
int i = 0;
i < 3;
i++) {
499 if (not_moving_count == 3) {
517 else if (sii->
angs.
p < 0.0f)
522 else if (sii->
angs.
h < 0.0f)
527 else if (sii->
angs.
b < 0.0f)
547 int anim_subtype = anim_q->
subtype -1;
549 if (anim_subtype < 0) {
550 if (abs(anim_subtype) != subtype) {
554 if (anim_subtype == subtype) {
559 if ( anim_q->
subtype == subtype )
638 for (
int a = 0;
a < 3;
a++) {
640 / (2.0f * properties->
accel.
a1d[a] * properties->
vel.
a1d[a]) * 1000.0f )
726 mprintf((
"WARNING: Animation trigger #%i on subsystem '%s', for ship '%s', has a negative reverse_start value! Capping it at 0!\n", j, psub->
subobj_name, sip->
name));
767 for (
int a = 0;
a < 3;
a++) {
773 if (ani_time < a_time)
778 if (ani_time < a_time)
810 int ani_time = 0, ret = 0;
923 Animation_map[stack_unique_id].push_back(item);
#define TRIGGER_TYPE_NONE
bool model_anim_start_type(ship_subsys *pss, int animation_type, int subtype, int direction, bool instant)
int timestamp(int delta_ms)
#define TRIGGER_TYPE_DOCKING_STAGE_2
model_subsystem * system_info
#define MAX_SHIP_PRIMARY_BANKS
float vm_vec_mag(const vec3d *v)
void apply_trigger_angles(angles *submodel_angles)
submodel_instance_info submodel_info_1
void set_to_final(queued_animation *q)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
submodel_instance_info submodel_info_2
SCP_vector< triggered_rotation > Triggered_rotations
#define MSS_FLAG_TRIGGERED
struct vec3d::@225::@227 xyz
#define MAX_TRIGGER_ANIMATION_TYPES
int model_anim_get_actual_time_type(ship *shipp, int animation_type, int subtype)
#define Assertion(expr, msg,...)
#define END_OF_LIST(head)
model_subsystem * subsystems
#define MAX_SHIP_SECONDARY_BANKS
void queued_animation_init(queued_animation *qa)
char * Animation_type_names[MAX_TRIGGER_ANIMATION_TYPES]
#define ANIMATION_SUBTYPE_ALL
#define NETINFO_FLAG_AM_MASTER
void model_anim_set_initial_states(ship *shipp)
void model_anim_fix_reverse_times(ship_info *sip)
GLboolean GLboolean GLboolean GLboolean a
#define MAX_TRIGGERED_ANIMATIONS
#define strnicmp(s1, s2, n)
#define TRIGGER_TYPE_DOCK_BAY_DOOR
int primary_animation_done_time[MAX_SHIP_PRIMARY_BANKS]
void set_to_initial(queued_animation *q)
queued_animation * triggers
void model_anim_handle_multiplayer(ship *shipp)
int model_anim_get_time_type(ship_subsys *pss, int animation_type, int subtype)
void ship_primary_changed(ship *sp)
int model_anim_instance_get_actual_time(queued_animation *properties)
Finds the actual amount of time that motion of an animation type will take to stop, not for gameplay purposes but for stuff that is involved in coordinating the animation itself.
for(int idx=0;idx< i;idx++)
bool model_anim_push_and_start_type(int stack_unique_id, ship *shipp, int animation_type, int subtype, int direction, bool instant)
bool subtype_check(model_subsystem *psub, queued_animation *anim_q, int subtype)
GLdouble GLdouble GLdouble GLdouble q
char subobj_name[MAX_NAME_LEN]
void ship_secondary_changed(ship *sp)
void queued_animation_correct(queued_animation *qa)
int secondary_animation_done_time[MAX_SHIP_SECONDARY_BANKS]
int model_anim_match_type(char *p)
#define timestamp_elapsed(stamp)
#define TRIGGER_TYPE_TURRET_FIRING
#define TRIGGER_TYPE_AFTERBURNER
int triggered_rotation_index
void add_queue(queued_animation *new_queue, int dir)
#define TRIGGER_TYPE_PRIMARY_BANK
#define TRIGGER_TYPE_SECONDARY_BANK
void model_anim_submodel_trigger_rotate(model_subsystem *psub, ship_subsys *ss)
SCP_map< int, animation_stack > Animation_map
void start(queued_animation *q)
char ship_name[NAME_LENGTH]
#define TRIGGER_TYPE_INITIAL
bool model_anim_pop_and_start_type(int stack_unique_id)