This commit is contained in:
guymakinggames 2026-04-23 10:50:13 +02:00 committed by GitHub
commit 8fd8cc1980
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 132 additions and 13 deletions

View file

@ -75869,59 +75869,59 @@ MapObj/MeganePartsState.o:
label:
- _ZN16MeganePartsStateC1EPN2al9LiveActorE
- _ZN16MeganePartsStateC2EPN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x2bcf00
size: 60
label: _ZN16MeganePartsState6appearEv
status: NotDecompiled
status: Matching
- offset: 0x2bcf3c
size: 156
label: _ZN16MeganePartsState6updateEv
status: NotDecompiled
status: Matching
- offset: 0x2bcfd8
size: 84
label: _ZN16MeganePartsState7exeHideEv
status: NotDecompiled
status: Matching
- offset: 0x2bd02c
size: 288
label: _ZN16MeganePartsState5exeOnEv
status: NotDecompiled
status: Matching
- offset: 0x2bd14c
size: 172
label: _ZN16MeganePartsState11updateAlphaEv
status: NotDecompiled
status: Matching
- offset: 0x2bd1f8
size: 68
label: _ZN16MeganePartsState7exeShowEv
status: NotDecompiled
status: Matching
- offset: 0x2bd23c
size: 268
label: _ZN16MeganePartsState6exeOffEv
status: NotDecompiled
status: Matching
- offset: 0x2bd348
size: 36
label: _ZN16MeganePartsStateD0Ev
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x2bd36c
size: 88
label: _ZNK12_GLOBAL__N_123MeganePartsStateNrvHide7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x2bd3c4
size: 8
label: _ZNK12_GLOBAL__N_121MeganePartsStateNrvOn7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x2bd3cc
size: 8
label: _ZNK12_GLOBAL__N_122MeganePartsStateNrvOff7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x2bd3d4
size: 68
label: _ZNK12_GLOBAL__N_123MeganePartsStateNrvShow7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
MapObj/Mirror.o:
'.text':

View file

@ -0,0 +1,91 @@
#include "MapObj/MeganePartsState.h"
#include "Library/LiveActor/ActorModelFunction.h"
#include "Library/LiveActor/ActorPoseUtil.h"
#include "Library/LiveActor/LiveActorFunction.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Nerve/NerveUtil.h"
#include "Util/PlayerUtil.h"
namespace {
NERVE_IMPL(MeganePartsState, Hide);
NERVE_IMPL(MeganePartsState, On);
NERVE_IMPL(MeganePartsState, Off);
NERVE_IMPL(MeganePartsState, Show);
NERVES_MAKE_STRUCT(MeganePartsState, Hide, On, Off, Show);
} // namespace
MeganePartsState::MeganePartsState(al::LiveActor* actor)
: al::ActorStateBase("メガネーパーツ状態", actor) {
initNerve(&NrvMeganePartsState.Hide, 0);
}
void MeganePartsState::appear() {
al::setMaterialProgrammable(mActor);
al::hideModelIfShow(mActor);
al::NerveStateBase::appear();
al::setNerve(this, &NrvMeganePartsState.Hide);
}
bool MeganePartsState::update() {
s32 subActorNum = al::getSubActorNum(mActor);
for (s32 i = 0; i < subActorNum; i++)
al::setTrans(al::getSubActor(mActor, i), al::getTrans(mActor));
al::setModelMaterialParameterF32(mActor, al::getMaterialName(mActor, 0), "const_single0",
mAlpha);
return al::NerveStateBase::update();
}
void MeganePartsState::exeHide() {
if (al::isFirstStep(this))
al::hideModelIfShow(mActor);
if (rs::isPlayerEnableToSeeOddSpace(mActor))
al::setNerve(this, &NrvMeganePartsState.On);
}
void MeganePartsState::exeOn() {
if (al::isFirstStep(this))
al::showModelIfHide(mActor);
mAlpha = sead::Mathf::min(mAlpha + (1.0f / 15.0f), 1.0f);
if (!rs::isPlayerEnableToSeeOddSpace(mActor)) {
al::setNerve(this, &NrvMeganePartsState.Off);
return;
}
updateAlpha();
if (mAlpha == 1.0f)
al::setNerve(this, &NrvMeganePartsState.Show);
}
void MeganePartsState::updateAlpha() {
if (!al::isExistSubActorKeeper(mActor))
return;
f32 alpha = sead::Mathf::clamp((mAlpha - (7.0f / 15.0f)) / (8.0f / 15.0f), 0.0f, 1.0f);
s32 subActorNum = al::getSubActorNum(mActor);
for (s32 i = 0; i < subActorNum; i++)
al::setModelAlphaMask(al::getSubActor(mActor, i), alpha);
}
void MeganePartsState::exeShow() {
if (!rs::isPlayerEnableToSeeOddSpace(mActor))
al::setNerve(this, &NrvMeganePartsState.Off);
}
void MeganePartsState::exeOff() {
mAlpha = sead::Mathf::clampMin(mAlpha - (1.0f / 15.0f), 0.0f);
if (rs::isPlayerEnableToSeeOddSpace(mActor)) {
al::setNerve(this, &NrvMeganePartsState.On);
return;
}
updateAlpha();
if (mAlpha == 0.0f)
al::setNerve(this, &NrvMeganePartsState.Hide);
}

View file

@ -0,0 +1,28 @@
#pragma once
#include <basis/seadTypes.h>
#include "Library/Nerve/NerveStateBase.h"
namespace al {
class LiveActor;
} // namespace al
class MeganePartsState : public al::ActorStateBase {
public:
MeganePartsState(al::LiveActor* actor);
void appear() override;
bool update() override;
void exeHide();
void exeOn();
void updateAlpha();
void exeShow();
void exeOff();
private:
f32 mAlpha = 0.0f;
};
static_assert(sizeof(MeganePartsState) == 0x28);