mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 05:25:14 +00:00
fix bugs caused by interpolating the frame an object spawns (#36)
This commit is contained in:
parent
8845b3ef0c
commit
1e4e1f8e75
7 changed files with 18 additions and 3 deletions
|
@ -794,6 +794,7 @@
|
||||||
--- @field public areaIndex integer
|
--- @field public areaIndex integer
|
||||||
--- @field public cameraToObject Vec3f
|
--- @field public cameraToObject Vec3f
|
||||||
--- @field public disableAutomaticShadowPos boolean
|
--- @field public disableAutomaticShadowPos boolean
|
||||||
|
--- @field public inited boolean
|
||||||
--- @field public node GraphNode
|
--- @field public node GraphNode
|
||||||
--- @field public pos Vec3f
|
--- @field public pos Vec3f
|
||||||
--- @field public prevAngle Vec3s
|
--- @field public prevAngle Vec3s
|
||||||
|
|
|
@ -1085,6 +1085,7 @@
|
||||||
| areaIndex | `integer` | |
|
| areaIndex | `integer` | |
|
||||||
| cameraToObject | [Vec3f](structs.md#Vec3f) | read-only |
|
| cameraToObject | [Vec3f](structs.md#Vec3f) | read-only |
|
||||||
| disableAutomaticShadowPos | `boolean` | |
|
| disableAutomaticShadowPos | `boolean` | |
|
||||||
|
| inited | `boolean` | |
|
||||||
| node | [GraphNode](structs.md#GraphNode) | read-only |
|
| node | [GraphNode](structs.md#GraphNode) | read-only |
|
||||||
| pos | [Vec3f](structs.md#Vec3f) | read-only |
|
| pos | [Vec3f](structs.md#Vec3f) | read-only |
|
||||||
| prevAngle | [Vec3s](structs.md#Vec3s) | read-only |
|
| prevAngle | [Vec3s](structs.md#Vec3s) | read-only |
|
||||||
|
|
|
@ -176,6 +176,8 @@ struct GraphNodeObject
|
||||||
/*0x54*/ Vec3f cameraToObject;
|
/*0x54*/ Vec3f cameraToObject;
|
||||||
u32 skipInterpolationTimestamp;
|
u32 skipInterpolationTimestamp;
|
||||||
bool skipInViewCheck;
|
bool skipInViewCheck;
|
||||||
|
|
||||||
|
bool inited;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ObjectNode
|
struct ObjectNode
|
||||||
|
|
|
@ -27,6 +27,8 @@ void stub_behavior_script_2(void);
|
||||||
|
|
||||||
void cur_obj_update(void);
|
void cur_obj_update(void);
|
||||||
|
|
||||||
|
void obj_update_gfx_pos_and_angle(struct Object *obj);
|
||||||
|
|
||||||
u16 position_based_random_u16(void);
|
u16 position_based_random_u16(void);
|
||||||
f32 position_based_random_float_position(void);
|
f32 position_based_random_float_position(void);
|
||||||
u8 cur_obj_is_last_nat_update_per_frame(void);
|
u8 cur_obj_is_last_nat_update_per_frame(void);
|
||||||
|
|
|
@ -1212,6 +1212,13 @@ static void geo_process_object(struct Object *node) {
|
||||||
// Sanity check our stack index, If we above or equal to our stack size. Return to prevent OOB\.
|
// Sanity check our stack index, If we above or equal to our stack size. Return to prevent OOB\.
|
||||||
if ((gMatStackIndex + 1) >= MATRIX_STACK_SIZE) { LOG_ERROR("Preventing attempt to exceed the maximum size %i for our matrix stack with size of %i.", MATRIX_STACK_SIZE - 1, gMatStackIndex); return; }
|
if ((gMatStackIndex + 1) >= MATRIX_STACK_SIZE) { LOG_ERROR("Preventing attempt to exceed the maximum size %i for our matrix stack with size of %i.", MATRIX_STACK_SIZE - 1, gMatStackIndex); return; }
|
||||||
|
|
||||||
|
if (!node->header.gfx.inited) {
|
||||||
|
node->header.gfx.inited = true;
|
||||||
|
obj_update_gfx_pos_and_angle(node);
|
||||||
|
vec3f_copy(node->header.gfx.prevPos, node->header.gfx.pos);
|
||||||
|
vec3s_copy(node->header.gfx.prevAngle, node->header.gfx.angle);
|
||||||
|
}
|
||||||
|
|
||||||
if (node->hookRender) {
|
if (node->hookRender) {
|
||||||
smlua_call_event_hooks_object_param(HOOK_ON_OBJECT_RENDER, node);
|
smlua_call_event_hooks_object_param(HOOK_ON_OBJECT_RENDER, node);
|
||||||
}
|
}
|
||||||
|
@ -1335,7 +1342,7 @@ static void geo_process_object(struct Object *node) {
|
||||||
if (node->header.gfx.animInfo.curAnim != NULL) {
|
if (node->header.gfx.animInfo.curAnim != NULL) {
|
||||||
dynos_gfx_swap_animations(node);
|
dynos_gfx_swap_animations(node);
|
||||||
geo_set_animation_globals(&node->header.gfx.animInfo, hasAnimation);
|
geo_set_animation_globals(&node->header.gfx.animInfo, hasAnimation);
|
||||||
smlua_call_event_hooks_object_param(HOOK_ON_OBJECT_ANIM_UPDATE, node);
|
if (node->hookRender) smlua_call_event_hooks_object_param(HOOK_ON_OBJECT_ANIM_UPDATE, node);
|
||||||
dynos_gfx_swap_animations(node);
|
dynos_gfx_swap_animations(node);
|
||||||
}
|
}
|
||||||
if (obj_is_in_view(&node->header.gfx, gMatStack[gMatStackIndex])) {
|
if (obj_is_in_view(&node->header.gfx, gMatStack[gMatStackIndex])) {
|
||||||
|
@ -1458,7 +1465,7 @@ void geo_process_held_object(struct GraphNodeHeldObject *node) {
|
||||||
if (node->objNode->header.gfx.animInfo.curAnim != NULL) {
|
if (node->objNode->header.gfx.animInfo.curAnim != NULL) {
|
||||||
dynos_gfx_swap_animations(node->objNode);
|
dynos_gfx_swap_animations(node->objNode);
|
||||||
geo_set_animation_globals(&node->objNode->header.gfx.animInfo, hasAnimation);
|
geo_set_animation_globals(&node->objNode->header.gfx.animInfo, hasAnimation);
|
||||||
smlua_call_event_hooks_object_param(HOOK_ON_OBJECT_ANIM_UPDATE, node->objNode);
|
if (node->objNode->hookRender) smlua_call_event_hooks_object_param(HOOK_ON_OBJECT_ANIM_UPDATE, node->objNode);
|
||||||
dynos_gfx_swap_animations(node->objNode);
|
dynos_gfx_swap_animations(node->objNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -324,6 +324,7 @@ struct Object *allocate_object(struct ObjectNode *objList) {
|
||||||
obj->header.gfx.angle[0] = 0;
|
obj->header.gfx.angle[0] = 0;
|
||||||
obj->header.gfx.angle[1] = 0;
|
obj->header.gfx.angle[1] = 0;
|
||||||
obj->header.gfx.angle[2] = 0;
|
obj->header.gfx.angle[2] = 0;
|
||||||
|
obj->header.gfx.inited = false;
|
||||||
|
|
||||||
obj->coopFlags = 0;
|
obj->coopFlags = 0;
|
||||||
obj->hookRender = 0;
|
obj->hookRender = 0;
|
||||||
|
|
|
@ -883,7 +883,7 @@ static struct LuaObjectField sGraphNodeFields[LUA_GRAPH_NODE_FIELD_COUNT] = {
|
||||||
{ "type", LVT_S16, offsetof(struct GraphNode, type), true, LOT_NONE },
|
{ "type", LVT_S16, offsetof(struct GraphNode, type), true, LOT_NONE },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LUA_GRAPH_NODE_OBJECT_FIELD_COUNT 26
|
#define LUA_GRAPH_NODE_OBJECT_FIELD_COUNT 27
|
||||||
static struct LuaObjectField sGraphNodeObjectFields[LUA_GRAPH_NODE_OBJECT_FIELD_COUNT] = {
|
static struct LuaObjectField sGraphNodeObjectFields[LUA_GRAPH_NODE_OBJECT_FIELD_COUNT] = {
|
||||||
{ "activeAreaIndex", LVT_S8, offsetof(struct GraphNodeObject, activeAreaIndex), false, LOT_NONE },
|
{ "activeAreaIndex", LVT_S8, offsetof(struct GraphNodeObject, activeAreaIndex), false, LOT_NONE },
|
||||||
{ "angle", LVT_COBJECT, offsetof(struct GraphNodeObject, angle), true, LOT_VEC3S },
|
{ "angle", LVT_COBJECT, offsetof(struct GraphNodeObject, angle), true, LOT_VEC3S },
|
||||||
|
@ -891,6 +891,7 @@ static struct LuaObjectField sGraphNodeObjectFields[LUA_GRAPH_NODE_OBJECT_FIELD_
|
||||||
{ "areaIndex", LVT_S8, offsetof(struct GraphNodeObject, areaIndex), false, LOT_NONE },
|
{ "areaIndex", LVT_S8, offsetof(struct GraphNodeObject, areaIndex), false, LOT_NONE },
|
||||||
{ "cameraToObject", LVT_COBJECT, offsetof(struct GraphNodeObject, cameraToObject), true, LOT_VEC3F },
|
{ "cameraToObject", LVT_COBJECT, offsetof(struct GraphNodeObject, cameraToObject), true, LOT_VEC3F },
|
||||||
{ "disableAutomaticShadowPos", LVT_BOOL, offsetof(struct GraphNodeObject, disableAutomaticShadowPos), false, LOT_NONE },
|
{ "disableAutomaticShadowPos", LVT_BOOL, offsetof(struct GraphNodeObject, disableAutomaticShadowPos), false, LOT_NONE },
|
||||||
|
{ "inited", LVT_BOOL, offsetof(struct GraphNodeObject, inited), false, LOT_NONE },
|
||||||
{ "node", LVT_COBJECT, offsetof(struct GraphNodeObject, node), true, LOT_GRAPHNODE },
|
{ "node", LVT_COBJECT, offsetof(struct GraphNodeObject, node), true, LOT_GRAPHNODE },
|
||||||
{ "pos", LVT_COBJECT, offsetof(struct GraphNodeObject, pos), true, LOT_VEC3F },
|
{ "pos", LVT_COBJECT, offsetof(struct GraphNodeObject, pos), true, LOT_VEC3F },
|
||||||
{ "prevAngle", LVT_COBJECT, offsetof(struct GraphNodeObject, prevAngle), true, LOT_VEC3S },
|
{ "prevAngle", LVT_COBJECT, offsetof(struct GraphNodeObject, prevAngle), true, LOT_VEC3S },
|
||||||
|
|
Loading…
Reference in a new issue