| 2256 | } |
| 2257 | |
| 2258 | void 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++) { |
no outgoing calls
no test coverage detected