mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
make security_camera serialization object oriented again
This commit is contained in:
parent
b23e22bb34
commit
d5418db73d
|
@ -463,7 +463,7 @@ void securityCameraSerialize(struct Serializer* serializer, SerializeAction acti
|
|||
|
||||
for (int i = 0; i < scene->securityCameraCount; ++i) {
|
||||
struct SecurityCamera* cam = &scene->securityCameras[i];
|
||||
if (!(cam->rigidBody.flags & RigidBodyIsKinematic)) {
|
||||
if (securityCameraIsDetached(cam)) {
|
||||
u8 index = i;
|
||||
action(serializer, &index, sizeof(u8));
|
||||
|
||||
|
@ -492,7 +492,7 @@ void securityCameraDeserialize(struct Serializer* serializer, struct Scene* scen
|
|||
|
||||
struct SecurityCamera* cam = &scene->securityCameras[index];
|
||||
|
||||
rigidBodyUnmarkKinematic(&cam->rigidBody, SECURITY_CAMERA_RIGID_BODY_MASS, securityCameraMofI());
|
||||
securityCameraDetach(cam);
|
||||
|
||||
serializeRead(serializer, &cam->rigidBody.transform, sizeof(struct PartialTransform));
|
||||
serializeRead(serializer, &cam->rigidBody.velocity, sizeof(struct Vector3));
|
||||
|
|
|
@ -28,6 +28,7 @@ struct ColliderTypeData gSecurityCameraCollider = {
|
|||
};
|
||||
|
||||
#define CAMERA_RANGE 10.0f
|
||||
#define CAMERA_RIGID_BODY_MASS 1.0f
|
||||
|
||||
struct Quaternion gBarBoneRelative = {1.0f, 0.0f, 0.0f, 0.0f};
|
||||
|
||||
|
@ -168,9 +169,7 @@ void securityCamerasCheckPortal(struct SecurityCamera* securityCameras, int came
|
|||
continue;
|
||||
}
|
||||
if (box3DHasOverlap(&camera->collisionObject.boundingBox, portalBox)) {
|
||||
rigidBodyUnmarkKinematic(&camera->rigidBody, SECURITY_CAMERA_RIGID_BODY_MASS, securityCameraMofI());
|
||||
camera->collisionObject.collisionLayers |= COLLISION_LAYERS_GRABBABLE;
|
||||
camera->rigidBody.flags |= RigidBodyFlagsGrabbable;
|
||||
securityCameraDetach(camera);
|
||||
|
||||
if (!cutsceneRunnerIsChannelPlaying(CH_GLADOS)) {
|
||||
short clipIndex = randomInRange(0, sizeof(gCameraDestroyClips) / sizeof(*gCameraDestroyClips));
|
||||
|
@ -180,6 +179,12 @@ void securityCamerasCheckPortal(struct SecurityCamera* securityCameras, int came
|
|||
}
|
||||
}
|
||||
|
||||
float securityCameraMofI() {
|
||||
return collisionBoxSolidMofI(&gSecurityCameraCollider, SECURITY_CAMERA_RIGID_BODY_MASS);
|
||||
void securityCameraDetach(struct SecurityCamera* securityCamera) {
|
||||
rigidBodyUnmarkKinematic(&securityCamera->rigidBody, CAMERA_RIGID_BODY_MASS, collisionBoxSolidMofI(&gSecurityCameraCollider, CAMERA_RIGID_BODY_MASS));
|
||||
securityCamera->collisionObject.collisionLayers |= COLLISION_LAYERS_GRABBABLE;
|
||||
securityCamera->rigidBody.flags |= RigidBodyFlagsGrabbable;
|
||||
}
|
||||
|
||||
int securityCameraIsDetached(struct SecurityCamera* securityCamera) {
|
||||
return !(securityCamera->rigidBody.flags & RigidBodyIsKinematic);
|
||||
}
|
|
@ -5,8 +5,6 @@
|
|||
#include "../levels/level_definition.h"
|
||||
#include "../sk64/skelatool_armature.h"
|
||||
|
||||
#define SECURITY_CAMERA_RIGID_BODY_MASS 1.0f
|
||||
|
||||
struct SecurityCamera {
|
||||
struct CollisionObject collisionObject;
|
||||
struct RigidBody rigidBody;
|
||||
|
@ -20,6 +18,7 @@ void securityCameraUpdate(struct SecurityCamera* securityCamera);
|
|||
|
||||
void securityCamerasCheckPortal(struct SecurityCamera* securityCameras, int cameraCount, struct Box3D* portalBox);
|
||||
|
||||
float securityCameraMofI(); // utility for serialization
|
||||
void securityCameraDetach();
|
||||
int securityCameraIsDetached();
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue