mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-29 20:14:41 +00:00
60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#include "Project/Collision/ActorCollisionController.h"
|
|
|
|
#include "Library/LiveActor/ActorCollisionFunction.h"
|
|
|
|
namespace al {
|
|
|
|
ActorCollisionController::ActorCollisionController(LiveActor* actor) : mActor(actor) {
|
|
mRadius = getColliderRadius(mActor);
|
|
mOffsetY = getColliderOffsetY(mActor);
|
|
}
|
|
|
|
void ActorCollisionController::setColliderRadius(f32 radius) {
|
|
mDelay = -1;
|
|
al::setColliderRadius(mActor, radius);
|
|
}
|
|
|
|
void ActorCollisionController::setColliderRadiusScale(f32 scale) {
|
|
setColliderRadius(mRadius * scale);
|
|
setColliderOffsetY(mOffsetY * scale);
|
|
}
|
|
|
|
void ActorCollisionController::setColliderOffsetY(f32 offsetY) {
|
|
mDelay = -1;
|
|
al::setColliderOffsetY(mActor, offsetY);
|
|
}
|
|
|
|
void ActorCollisionController::update() {
|
|
if (mDelay <= 0)
|
|
return;
|
|
|
|
if (mDelay == 1) {
|
|
resetToOrigin(mDelay);
|
|
return;
|
|
}
|
|
|
|
f32 radius = getColliderRadius(mActor);
|
|
f32 offsetY = getColliderOffsetY(mActor);
|
|
f32 rate = 1.0f / mDelay;
|
|
|
|
radius += (mRadius - radius) * rate;
|
|
offsetY += (mOffsetY - offsetY) * rate;
|
|
al::setColliderRadius(mActor, radius);
|
|
al::setColliderOffsetY(mActor, offsetY);
|
|
|
|
mDelay--;
|
|
}
|
|
|
|
void ActorCollisionController::resetToOrigin(s32 delay) {
|
|
if (delay >= 2) {
|
|
mDelay = delay;
|
|
return;
|
|
}
|
|
|
|
al::setColliderRadius(mActor, mRadius);
|
|
al::setColliderOffsetY(mActor, mOffsetY);
|
|
mDelay = 0;
|
|
}
|
|
|
|
} // namespace al
|