MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / SetNormalizedTimeObjTimed

Function SetNormalizedTimeObjTimed

model/polymodel.cpp:2258–2323  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2256}
2257
2258void SetNormalizedTimeObjTimed(object *obj, float *normalized_time) {
2259 int i, j;
2260 poly_model *pm = &Poly_models[obj->rtype.pobj_info.model_num];
2261 object_info *obj_info = &Object_info[obj->id];
2262
2263 if (obj->type == OBJ_PLAYER || obj->type == OBJ_WEAPON)
2264 return;
2265
2266 // Setup all the subobjects for the keyframe
2267 float frame = obj->rtype.pobj_info.anim_frame;
2268
2269 for (i = 0; i < pm->n_models; i++) {
2270 bsp_info *sm = &pm->submodel[i];
2271 int x = (sm->flags & SOF_WB_MASKS) >> WB_INDEX_SHIFT;
2272
2273 if (!(sm->flags & SOF_TURRET) &&
2274 !((sm->flags & SOF_WB) && ((obj_info->static_wb[x].flags & WBF_ANIM_MASKS) == WBF_ANIM_LOCAL))) {
2275 if (frame <= sm->rot_track_min)
2276 normalized_time[i] = 0.0;
2277 else if (frame >= sm->rot_track_max)
2278 normalized_time[i] = 1.0;
2279 else {
2280 float total_time = sm->rot_track_max - sm->rot_track_min;
2281 normalized_time[i] = (frame - sm->rot_track_min) / total_time;
2282 }
2283 } else if ((sm->flags & SOF_WB) && !(sm->flags & SOF_TURRET)) {
2284 static float w_frame;
2285 ASSERT(x >= 0 && x < MAX_WBS_PER_OBJ);
2286
2287 if (obj->dynamic_wb)
2288 w_frame = obj->dynamic_wb[x].wb_anim_frame;
2289 else
2290 w_frame = 0;
2291
2292 if (w_frame <= sm->rot_track_min)
2293 normalized_time[i] = 0.0;
2294 else if (w_frame >= sm->rot_track_max)
2295 normalized_time[i] = 1.0;
2296 else {
2297 float total_time = sm->rot_track_max - sm->rot_track_min;
2298 normalized_time[i] = (w_frame - sm->rot_track_min) / total_time;
2299 }
2300 }
2301 }
2302
2303 // Now, override angles of weapon bank turrets
2304 if (obj->dynamic_wb) {
2305 for (i = 0; i < pm->num_wbs; i++) {
2306 for (j = 0; j < pm->poly_wb[i].num_turrets; j++) {
2307 int sobj_index;
2308
2309 sobj_index = pm->poly_wb[i].turret_index[j];
2310 normalized_time[sobj_index] = obj->dynamic_wb[i].norm_turret_angle[j];
2311 }
2312 }
2313 } else {
2314 for (i = 0; i < pm->num_wbs; i++) {
2315 for (j = 0; j < pm->poly_wb[i].num_turrets; j++) {

Callers 1

SetNormalizedTimeObjFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected