mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-26 18:44:33 +00:00
54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
#include "Library/MapObj/BackHideParts.h"
|
|
|
|
#include "Library/Camera/CameraUtil.h"
|
|
#include "Library/LiveActor/ActorInitFunction.h"
|
|
#include "Library/LiveActor/ActorInitUtil.h"
|
|
#include "Library/LiveActor/ActorModelFunction.h"
|
|
#include "Library/LiveActor/ActorPoseUtil.h"
|
|
#include "Library/Math/MathUtil.h"
|
|
#include "Library/Model/ModelKeeper.h"
|
|
#include "Library/Placement/PlacementFunction.h"
|
|
|
|
namespace al {
|
|
BackHideDitherAnimator::BackHideDitherAnimator(LiveActor* actor)
|
|
: DitherAnimator("背面ディザアニメーター"), mActor(actor) {}
|
|
|
|
void BackHideDitherAnimator::update() {
|
|
sead::Vector3f cameraFront;
|
|
calcCameraFront(&cameraFront, mActor, 0);
|
|
|
|
f32 cameraOffset = (getCameraPos(mActor, 0) - getTrans(mActor)).length();
|
|
|
|
sead::Vector3f actorFront;
|
|
calcFrontDir(&actorFront, mActor);
|
|
|
|
f32 angleDegree = normalize(calcAngleDegree(cameraFront, actorFront), 60.0f, 90.0f);
|
|
cameraOffset = normalize(cameraOffset, 10000.0f, 12000.0f);
|
|
|
|
f32 actorAlpha = sead::Mathf::clamp(lerpValue(angleDegree, 1.0f, cameraOffset), 0.0f, 1.0f);
|
|
setModelAlphaMask(mActor, actorAlpha);
|
|
|
|
if (isNearZero(actorAlpha, 0.001)) {
|
|
hideModelIfShow(mActor);
|
|
|
|
return;
|
|
}
|
|
|
|
showModelIfHide(mActor);
|
|
}
|
|
|
|
BackHideParts::BackHideParts(const char* name) : LiveActor(name) {}
|
|
|
|
// NON_MATCHING: regswap (https://decomp.me/scratch/j5tRy)
|
|
void BackHideParts::init(const ActorInitInfo& info) {
|
|
const char* suffix = nullptr;
|
|
tryGetStringArg(&suffix, info, "Suffix");
|
|
initMapPartsActor(this, info, suffix);
|
|
|
|
mBackHideDitherAnimator = new BackHideDitherAnimator(this);
|
|
getModelKeeper()->setDitherAnimator(mBackHideDitherAnimator);
|
|
|
|
trySyncStageSwitchAppearAndKill(this);
|
|
}
|
|
} // namespace al
|