diff --git a/assets/models/props/round_elevator.blend b/assets/models/props/round_elevator.blend index 9f2c567..133b998 100644 Binary files a/assets/models/props/round_elevator.blend and b/assets/models/props/round_elevator.blend differ diff --git a/assets/models/props/round_elevator_interior.blend b/assets/models/props/round_elevator_interior.blend index 3cc33bb..e9083ad 100644 Binary files a/assets/models/props/round_elevator_interior.blend and b/assets/models/props/round_elevator_interior.blend differ diff --git a/skelatool64/src/ExtendedMesh.cpp b/skelatool64/src/ExtendedMesh.cpp index 303ab5a..d0601db 100644 --- a/skelatool64/src/ExtendedMesh.cpp +++ b/skelatool64/src/ExtendedMesh.cpp @@ -42,10 +42,9 @@ ExtendedMesh::ExtendedMesh(const ExtendedMesh& other): mPointInverseTransform(other.mPointInverseTransform), mNormalInverseTransform(other.mNormalInverseTransform), mVertexBones(other.mVertexBones), - mFacesForBone(other.mFacesForBone), bbMin(other.bbMin), bbMax(other.bbMax) { - for (auto& it : mFacesForBone) { + for (auto& it : other.mFacesForBone) { std::vector faces; for (auto face : it.second) { @@ -55,7 +54,7 @@ ExtendedMesh::ExtendedMesh(const ExtendedMesh& other): mFacesForBone[it.first] = faces; } - for (auto& it : mBoneSpanningFaces) { + for (auto& it : other.mBoneSpanningFaces) { std::vector faces; for (auto face : it.second) { diff --git a/src/scene/elevator.c b/src/scene/elevator.c index e57c802..2806d63 100644 --- a/src/scene/elevator.c +++ b/src/scene/elevator.c @@ -22,10 +22,16 @@ struct ColliderTypeData gElevatorColliderType = { int gElevatorCollisionLayers = COLLISION_LAYERS_STATIC | COLLISION_LAYERS_TANGIBLE; -struct Vector3 gOpenPosition = { - -0.275674, - 0.0f, - -0.653916, +struct Vector3 gClosedPosition[] = { + [PROPS_ROUND_ELEVATOR_ELEVATOR_BONE] = {0, 0, 0}, + [PROPS_ROUND_ELEVATOR_DOORLEFT_BONE] = {1.46439, 0, 0}, + [PROPS_ROUND_ELEVATOR_DOORRIGHT_BONE] = {1.46439, 0, 0}, +}; + +struct Vector3 gOpenPosition[] = { + [PROPS_ROUND_ELEVATOR_ELEVATOR_BONE] = {0, 0, 0}, + [PROPS_ROUND_ELEVATOR_DOORLEFT_BONE] = {-0.275674 * SCENE_SCALE, 0.653916 * SCENE_SCALE, 0.0f}, + [PROPS_ROUND_ELEVATOR_DOORRIGHT_BONE] = {-0.275674 * SCENE_SCALE, -0.653916 * SCENE_SCALE, 0.0f}, }; void elevatorRender(void* data, struct RenderScene* renderScene) { @@ -36,6 +42,12 @@ void elevatorRender(void* data, struct RenderScene* renderScene) { Mtx* armature = renderStateRequestMatrices(renderScene->renderState, PROPS_ROUND_ELEVATOR_DEFAULT_BONES_COUNT); for (int i = 0; i < PROPS_ROUND_ELEVATOR_DEFAULT_BONES_COUNT; ++i) { + if (elevator->flags & ElevatorFlagsIsOpen) { + props_round_elevator_default_bones[i].position = gOpenPosition[i]; + } else { + props_round_elevator_default_bones[i].position = gClosedPosition[i]; + } + transformToMatrixL(&props_round_elevator_default_bones[i], &armature[i], 1.0f); }