Make obj_set_opacity_from_cam_dist its own function

This commit is contained in:
Arceveti
2021-09-28 12:17:53 -07:00
parent 5b198635ad
commit c89858ebd2

View File

@@ -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