From c89858ebd216aa99d298972449ced511869ef330 Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Tue, 28 Sep 2021 12:17:53 -0700 Subject: [PATCH] Make obj_set_opacity_from_cam_dist its own function --- src/engine/behavior_script.c | 44 ++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c index 05631ff5..ee839837 100644 --- a/src/engine/behavior_script.c +++ b/src/engine/behavior_script.c @@ -93,6 +93,30 @@ void obj_update_gfx_pos_and_angle(struct Object *obj) { obj->header.gfx.angle[2] = obj->oFaceAngleRoll & 0xFFFF; } +#ifdef OBJ_OPACITY_BY_CAM_DIST +void obj_set_opacity_from_cam_dist(struct Object *obj) { + f32 dist; + Vec3f d; + if (obj->header.gfx.node.flags & GRAPH_RENDER_BILLBOARD) { + d[0] = (obj->oPosX - gCamera->pos[0]); + d[2] = (obj->oPosZ - gCamera->pos[2]); + dist = (sqr(d[0]) + sqr(d[2])); + } else { + vec3_diff(d, &obj->oPosVec, gCamera->pos); + dist = (sqr(d[0]) + sqr(d[1]) + sqr(d[2])); + } + if (dist > 0.0f) { + obj->header.gfx.node.flags &= ~GRAPH_RENDER_UCODE_REJ; + } +#ifdef PUPPYCAM + s32 opacityDist = ((gPuppyCam.zoom > 0) ? ((dist / sqr(gPuppyCam.zoom)) * 255.0f) : 255); +#else + s32 opacityDist = (dist * (255.0f / sqr(1024.0f))); +#endif + obj->oOpacity = CLAMP(opacityDist, 0x00, 0xFF); +} +#endif + // Push the address of a behavior command to the object's behavior stack. static void cur_obj_bhv_stack_push(uintptr_t bhvAddr) { gCurrentObject->bhvStack[gCurrentObject->bhvStackIndex] = bhvAddr; @@ -976,25 +1000,7 @@ void cur_obj_update(void) { #ifdef OBJ_OPACITY_BY_CAM_DIST if (objFlags & OBJ_FLAG_OPACITY_FROM_CAMERA_DIST) { - f32 dist; - Vec3f d; - if (gCurrentObject->header.gfx.node.flags & GRAPH_RENDER_BILLBOARD) { - d[0] = (gCurrentObject->oPosX - gCamera->pos[0]); - d[2] = (gCurrentObject->oPosZ - gCamera->pos[2]); - dist = (sqr(d[0]) + sqr(d[2])); - } else { - vec3_diff(d, &gCurrentObject->oPosVec, gCamera->pos); - dist = (sqr(d[0]) + sqr(d[1]) + sqr(d[2])); - } - if (dist > 0.0f) { - gCurrentObject->header.gfx.node.flags &= ~GRAPH_RENDER_UCODE_REJ; - } -#ifdef PUPPYCAM - s32 opacityDist = ((gPuppyCam.zoom > 0) ? ((dist / sqr(gPuppyCam.zoom)) * 255.0f) : 255); -#else - s32 opacityDist = (dist * (255.0f / sqr(1024.0f))); -#endif - gCurrentObject->oOpacity = CLAMP(opacityDist, 0x00, 0xFF); + obj_set_opacity_from_cam_dist(gCurrentObject); } #endif