Boss/BossKnuckle: Implement BossKnuckleAnimCtrl

This commit is contained in:
guymakinggames 2026-04-22 19:06:59 +01:00
parent b6f947c559
commit ddb965dc60
4 changed files with 519 additions and 62 deletions

View file

@ -5180,271 +5180,271 @@ Boss/BossKnuckle/BossKnuckleAnimCtrl.o:
label:
- _ZN19BossKnuckleAnimCtrlC1EP11BossKnuckle
- _ZN19BossKnuckleAnimCtrlC2EP11BossKnuckle
status: NotDecompiled
status: Matching
- offset: 0x0273e4
size: 4
label: _ZN19BossKnuckleAnimCtrl6updateEv
status: NotDecompiled
status: Matching
- offset: 0x0273e8
size: 12
label: _ZN19BossKnuckleAnimCtrl9startWaitEv
status: NotDecompiled
status: Matching
- offset: 0x0273f4
size: 116
label: _ZN19BossKnuckleAnimCtrl20startAttackGraspSignEv
status: NotDecompiled
status: Matching
- offset: 0x027468
size: 16
label: _ZN19BossKnuckleAnimCtrl14isPlayerDamageEv
status: NotDecompiled
status: Matching
- offset: 0x027478
size: 88
label: _ZN19BossKnuckleAnimCtrl10isNumbnessEv
status: NotDecompiled
status: Matching
- offset: 0x0274d0
size: 116
label: _ZN19BossKnuckleAnimCtrl9startSandEv
status: NotDecompiled
status: Matching
- offset: 0x027544
size: 12
label: _ZN19BossKnuckleAnimCtrl17startGraspMoveHitEv
status: NotDecompiled
status: Matching
- offset: 0x027550
size: 116
label: _ZN19BossKnuckleAnimCtrl25startNumbnessIfNotPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x0275c4
size: 132
label: _ZN19BossKnuckleAnimCtrl22startAngryIfNotPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x027648
size: 120
label: _ZN19BossKnuckleAnimCtrl7isAngryEv
status: NotDecompiled
status: Matching
- offset: 0x0276c0
size: 72
label: _ZN19BossKnuckleAnimCtrl30startAngryHighLoopIfNotPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x027708
size: 72
label: _ZN19BossKnuckleAnimCtrl33startAngryHighOneTimeIfNotPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x027750
size: 100
label: _ZN19BossKnuckleAnimCtrl26startMoveFrontIfNotPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x0277b4
size: 100
label: _ZN19BossKnuckleAnimCtrl21startFearIfNotPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x027818
size: 88
label: _ZN19BossKnuckleAnimCtrl6isFearEv
status: NotDecompiled
status: Matching
- offset: 0x027870
size: 68
label: _ZN19BossKnuckleAnimCtrl20endNumbnessIfPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x0278b4
size: 100
label: _ZN19BossKnuckleAnimCtrl17endAngryIfPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x027918
size: 68
label: _ZN19BossKnuckleAnimCtrl16endFearIfPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x02795c
size: 68
label: _ZN19BossKnuckleAnimCtrl21endMoveFrontIfPlayingEv
status: NotDecompiled
status: Matching
- offset: 0x0279a0
size: 276
label: _ZN19BossKnuckleAnimCtrl17startPlayerDamageEv
status: NotDecompiled
status: Matching
- offset: 0x027ab4
size: 4
label: _ZN19BossKnuckleAnimCtrl14exeBeforeStartEv
status: NotDecompiled
status: Matching
- offset: 0x027ab8
size: 60
label: _ZN19BossKnuckleAnimCtrl7exeWaitEv
status: NotDecompiled
status: Matching
- offset: 0x027af4
size: 60
label: _ZN19BossKnuckleAnimCtrl18exeAttackGraspSignEv
status: NotDecompiled
status: Matching
- offset: 0x027b30
size: 88
label: _ZN19BossKnuckleAnimCtrl7exeSandEv
status: NotDecompiled
status: Matching
- offset: 0x027b88
size: 92
label: _ZN19BossKnuckleAnimCtrl16exeNumbnessStartEv
status: NotDecompiled
status: Matching
- offset: 0x027be4
size: 60
label: _ZN19BossKnuckleAnimCtrl11exeNumbnessEv
status: NotDecompiled
status: Matching
- offset: 0x027c20
size: 88
label: _ZN19BossKnuckleAnimCtrl14exeNumbnessEndEv
status: NotDecompiled
status: Matching
- offset: 0x027c78
size: 60
label: _ZN19BossKnuckleAnimCtrl15exeGraspMoveHitEv
status: NotDecompiled
status: Matching
- offset: 0x027cb4
size: 92
label: _ZN19BossKnuckleAnimCtrl13exeAngryStartEv
status: NotDecompiled
status: Matching
- offset: 0x027d10
size: 60
label: _ZN19BossKnuckleAnimCtrl8exeAngryEv
status: NotDecompiled
status: Matching
- offset: 0x027d4c
size: 88
label: _ZN19BossKnuckleAnimCtrl11exeAngryEndEv
status: NotDecompiled
status: Matching
- offset: 0x027da4
size: 60
label: _ZN19BossKnuckleAnimCtrl16exeAngryHighLoopEv
status: NotDecompiled
status: Matching
- offset: 0x027de0
size: 92
label: _ZN19BossKnuckleAnimCtrl19exeAngryHighOneTimeEv
status: NotDecompiled
status: Matching
- offset: 0x027e3c
size: 92
label: _ZN19BossKnuckleAnimCtrl12exeFearStartEv
status: NotDecompiled
status: Matching
- offset: 0x027e98
size: 60
label: _ZN19BossKnuckleAnimCtrl7exeFearEv
status: NotDecompiled
status: Matching
- offset: 0x027ed4
size: 88
label: _ZN19BossKnuckleAnimCtrl10exeFearEndEv
status: NotDecompiled
status: Matching
- offset: 0x027f2c
size: 92
label: _ZN19BossKnuckleAnimCtrl17exeMoveFrontStartEv
status: NotDecompiled
status: Matching
- offset: 0x027f88
size: 60
label: _ZN19BossKnuckleAnimCtrl12exeMoveFrontEv
status: NotDecompiled
status: Matching
- offset: 0x027fc4
size: 88
label: _ZN19BossKnuckleAnimCtrl15exeMoveFrontEndEv
status: NotDecompiled
status: Matching
- offset: 0x02801c
size: 84
label: _ZN19BossKnuckleAnimCtrl15exePlayerDamageEv
status: NotDecompiled
status: Matching
- offset: 0x028070
size: 36
label: _ZN19BossKnuckleAnimCtrlD0Ev
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x028094
size: 4
label: _ZNK12_GLOBAL__N_133BossKnuckleAnimCtrlNrvBeforeStart7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028098
size: 64
label: _ZNK12_GLOBAL__N_126BossKnuckleAnimCtrlNrvWait7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0280d8
size: 64
label: _ZNK12_GLOBAL__N_137BossKnuckleAnimCtrlNrvAttackGraspSign7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028118
size: 92
label: _ZNK12_GLOBAL__N_126BossKnuckleAnimCtrlNrvSand7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028174
size: 64
label: _ZNK12_GLOBAL__N_134BossKnuckleAnimCtrlNrvGraspMoveHit7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0281b4
size: 96
label: _ZNK12_GLOBAL__N_135BossKnuckleAnimCtrlNrvNumbnessStart7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028214
size: 96
label: _ZNK12_GLOBAL__N_132BossKnuckleAnimCtrlNrvAngryStart7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028274
size: 64
label: _ZNK12_GLOBAL__N_135BossKnuckleAnimCtrlNrvAngryHighLoop7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0282b4
size: 96
label: _ZNK12_GLOBAL__N_138BossKnuckleAnimCtrlNrvAngryHighOneTime7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028314
size: 96
label: _ZNK12_GLOBAL__N_136BossKnuckleAnimCtrlNrvMoveFrontStart7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028374
size: 64
label: _ZNK12_GLOBAL__N_131BossKnuckleAnimCtrlNrvMoveFront7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0283b4
size: 92
label: _ZNK12_GLOBAL__N_134BossKnuckleAnimCtrlNrvMoveFrontEnd7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028410
size: 96
label: _ZNK12_GLOBAL__N_131BossKnuckleAnimCtrlNrvFearStart7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028470
size: 64
label: _ZNK12_GLOBAL__N_130BossKnuckleAnimCtrlNrvNumbness7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0284b0
size: 92
label: _ZNK12_GLOBAL__N_133BossKnuckleAnimCtrlNrvNumbnessEnd7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x02850c
size: 64
label: _ZNK12_GLOBAL__N_127BossKnuckleAnimCtrlNrvAngry7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x02854c
size: 92
label: _ZNK12_GLOBAL__N_130BossKnuckleAnimCtrlNrvAngryEnd7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0285a8
size: 64
label: _ZNK12_GLOBAL__N_126BossKnuckleAnimCtrlNrvFear7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x0285e8
size: 92
label: _ZNK12_GLOBAL__N_129BossKnuckleAnimCtrlNrvFearEnd7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x028644
size: 88
label: _ZNK12_GLOBAL__N_134BossKnuckleAnimCtrlNrvPlayerDamage7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
Boss/BossKnuckle/BossKnuckleCounterGround.o:
'.text':

View file

@ -0,0 +1,61 @@
#pragma once
#include "Library/LiveActor/LiveActor.h"
#include "Demo/IUseDemoSkip.h"
namespace al {
struct ActorInitInfo;
class HitSensor;
class Nerve;
class SensorMsg;
} // namespace al
class BossKnuckle : public al::LiveActor, public IUseDemoSkip {
public:
BossKnuckle(const char* name);
void init(const al::ActorInitInfo& initInfo) override;
void initAfterPlacement() override;
void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
bool receiveMsg(const al::SensorMsg* msg, al::HitSensor* other, al::HitSensor* self) override;
void control() override;
void appear() override;
bool isFirstDemo() const override;
bool isEnableSkipDemo() const override;
void skipDemo() override;
void finishStartDemo(bool isSkip);
void exeWait();
void turnToPlayer();
void updateBodySyncPos();
void syncHandIfWaiting();
void checkHackAndSetNerve();
void exeRelay();
void updatePlayerDemo();
void exeAttackBeatStart();
void exeAttackBeat();
void genMummyAgainstPlayer(s32 mummyCount);
void relayNextNerve(const al::Nerve* nerve, s32 step, bool isImmediate);
void exeAttackHandFall();
s32 countAliveIce();
void exeAttackHandFallFirstPainDemo();
void exeAttackSideStamp();
void exeRunAwayStart();
void exeRunAway();
void breakAirIce();
void startPlayerDemo();
void exeDamage();
void exeRestoreHand();
void exeAttackRocketPunch();
void genMummy(const al::LiveActor* actor, s32 mummyCount);
void exeReturn();
void exeBeforeBattleStart();
void exeBeforeDemoBattleStartWait();
void exeDemoBattleStart();
void addDemoActorAll();
void exeDemoBattleEnd();
void exeAfterBattleEnd();
void breakAllIce();
};

View file

@ -0,0 +1,338 @@
#include "Boss/BossKnuckle/BossKnuckleAnimCtrl.h"
#include "Library/LiveActor/ActorActionFunction.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Nerve/NerveUtil.h"
#include "Boss/BossKnuckle/BossKnuckle.h"
namespace {
NERVE_IMPL(BossKnuckleAnimCtrl, BeforeStart)
NERVE_IMPL(BossKnuckleAnimCtrl, GraspMoveHit)
NERVES_MAKE_NOSTRUCT(BossKnuckleAnimCtrl, BeforeStart, GraspMoveHit)
NERVE_IMPL(BossKnuckleAnimCtrl, Wait)
NERVE_IMPL(BossKnuckleAnimCtrl, AttackGraspSign)
NERVE_IMPL(BossKnuckleAnimCtrl, Sand)
NERVE_IMPL(BossKnuckleAnimCtrl, NumbnessStart)
NERVE_IMPL(BossKnuckleAnimCtrl, AngryStart)
NERVE_IMPL(BossKnuckleAnimCtrl, AngryHighLoop)
NERVE_IMPL(BossKnuckleAnimCtrl, AngryHighOneTime)
NERVE_IMPL(BossKnuckleAnimCtrl, MoveFrontStart)
NERVE_IMPL(BossKnuckleAnimCtrl, MoveFront)
NERVE_IMPL(BossKnuckleAnimCtrl, MoveFrontEnd)
NERVE_IMPL(BossKnuckleAnimCtrl, FearStart)
NERVE_IMPL(BossKnuckleAnimCtrl, Numbness)
NERVE_IMPL(BossKnuckleAnimCtrl, NumbnessEnd)
NERVE_IMPL(BossKnuckleAnimCtrl, Angry)
NERVE_IMPL(BossKnuckleAnimCtrl, AngryEnd)
NERVE_IMPL(BossKnuckleAnimCtrl, Fear)
NERVE_IMPL(BossKnuckleAnimCtrl, FearEnd)
NERVE_IMPL(BossKnuckleAnimCtrl, PlayerDamage)
NERVES_MAKE_NOSTRUCT(BossKnuckleAnimCtrl, Wait, AttackGraspSign, Sand, NumbnessStart, AngryStart,
AngryHighLoop, AngryHighOneTime, MoveFrontStart, MoveFront, MoveFrontEnd,
FearStart, Numbness, NumbnessEnd, Angry, AngryEnd, Fear, FearEnd, PlayerDamage)
} // namespace
BossKnuckleAnimCtrl::BossKnuckleAnimCtrl(BossKnuckle* bossKnuckle)
: al::NerveExecutor("ボスナックルアニメコントロール"), mBossKnuckle(bossKnuckle) {
initNerve(&BeforeStart, 0);
}
void BossKnuckleAnimCtrl::update() {
updateNerve();
}
void BossKnuckleAnimCtrl::startWait() {
al::setNerve(this, &Wait);
}
void BossKnuckleAnimCtrl::startAttackGraspSign() {
if (isPlayerDamage())
return;
if (isNumbness())
return;
al::setNerve(this, &AttackGraspSign);
}
void BossKnuckleAnimCtrl::startSand() {
if (isPlayerDamage())
return;
if (isNumbness())
return;
al::setNerve(this, &Sand);
}
void BossKnuckleAnimCtrl::startGraspMoveHit() {
al::setNerve(this, &GraspMoveHit);
}
void BossKnuckleAnimCtrl::startNumbnessIfNotPlaying() {
if (isPlayerDamage())
return;
if (isNumbness())
return;
al::setNerve(this, &NumbnessStart);
}
void BossKnuckleAnimCtrl::startAngryIfNotPlaying() {
if (isAngry())
return;
al::setNerve(this, &AngryStart);
}
void BossKnuckleAnimCtrl::startAngryHighLoopIfNotPlaying() {
if (al::isNerve(this, &AngryHighLoop))
return;
al::setNerve(this, &AngryHighLoop);
}
void BossKnuckleAnimCtrl::startAngryHighOneTimeIfNotPlaying() {
if (al::isNerve(this, &AngryHighOneTime))
return;
al::setNerve(this, &AngryHighOneTime);
}
void BossKnuckleAnimCtrl::startMoveFrontIfNotPlaying() {
if (al::isNerve(this, &MoveFrontStart))
return;
if (al::isNerve(this, &MoveFront))
return;
if (al::isNerve(this, &MoveFrontEnd))
return;
al::setNerve(this, &MoveFrontStart);
}
void BossKnuckleAnimCtrl::startFearIfNotPlaying() {
if (isFear())
return;
al::setNerve(this, &FearStart);
}
void BossKnuckleAnimCtrl::endMoveFrontIfPlaying() {
if (!al::isNerve(this, &MoveFront))
return;
al::setNerve(this, &MoveFrontEnd);
}
void BossKnuckleAnimCtrl::exeNumbnessStart() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "AttackGraspNumbnessStart");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Numbness);
}
void BossKnuckleAnimCtrl::endNumbnessIfPlaying() {
if (!al::isNerve(this, &Numbness))
return;
al::setNerve(this, &NumbnessEnd);
}
void BossKnuckleAnimCtrl::exeAngryStart() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "AngryStart");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Angry);
}
void BossKnuckleAnimCtrl::endAngryIfPlaying() {
if (al::isNerve(this, &Angry)) {
al::setNerve(this, &AngryEnd);
return;
}
if (al::isNerve(this, &AngryHighLoop)) {
al::setNerve(this, &AngryEnd);
return;
}
if (!al::isNerve(this, &AngryHighOneTime))
return;
al::setNerve(this, &AngryEnd);
}
void BossKnuckleAnimCtrl::exeFearStart() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "FearStart");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Fear);
}
void BossKnuckleAnimCtrl::endFearIfPlaying() {
if (!al::isNerve(this, &Fear))
return;
al::setNerve(this, &FearEnd);
}
void BossKnuckleAnimCtrl::startPlayerDamage() {
if (al::isNerve(this, &PlayerDamage))
return;
if (al::isNerve(this, &AngryStart) || al::isNerve(this, &Angry) ||
al::isNerve(this, &AngryEnd) || al::isNerve(this, &AngryHighLoop) ||
al::isNerve(this, &AngryHighOneTime)) {
mPlayerDamageReturnNerve = &Angry;
} else if (al::isNerve(this, &NumbnessStart) || al::isNerve(this, &Numbness) ||
al::isNerve(this, &NumbnessEnd)) {
mPlayerDamageReturnNerve = &Numbness;
} else {
if (!al::isNerve(this, &FearStart) && !al::isNerve(this, &Fear) &&
!al::isNerve(this, &FearEnd)) {
mPlayerDamageReturnNerve = &Wait;
al::setNerve(this, &PlayerDamage);
return;
}
mPlayerDamageReturnNerve = &Fear;
}
al::setNerve(this, &PlayerDamage);
}
bool BossKnuckleAnimCtrl::isPlayerDamage() {
return al::isNerve(this, &PlayerDamage);
}
bool BossKnuckleAnimCtrl::isNumbness() {
return al::isNerve(this, &NumbnessStart) || al::isNerve(this, &Numbness) ||
al::isNerve(this, &NumbnessEnd);
}
bool BossKnuckleAnimCtrl::isAngry() {
return al::isNerve(this, &AngryStart) || al::isNerve(this, &Angry) ||
al::isNerve(this, &AngryEnd) || al::isNerve(this, &AngryHighLoop) ||
al::isNerve(this, &AngryHighOneTime);
}
bool BossKnuckleAnimCtrl::isFear() {
return al::isNerve(this, &FearStart) || al::isNerve(this, &Fear) || al::isNerve(this, &FearEnd);
}
void BossKnuckleAnimCtrl::exeBeforeStart() {}
void BossKnuckleAnimCtrl::exeWait() {
if (al::isFirstStep(this)) {
al::startAction(mBossKnuckle, "Wait");
return;
}
}
void BossKnuckleAnimCtrl::exeAttackGraspSign() {
if (al::isFirstStep(this)) {
al::tryStartActionIfNotPlaying(mBossKnuckle, "AttackGraspSign");
return;
}
}
void BossKnuckleAnimCtrl::exeSand() {
if (al::isFirstStep(this))
al::tryStartActionIfNotPlaying(mBossKnuckle, "AttackGraspSand");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Wait);
}
void BossKnuckleAnimCtrl::exeNumbness() {
if (al::isFirstStep(this)) {
al::tryStartActionIfNotPlaying(mBossKnuckle, "AttackGraspNumbness");
return;
}
}
void BossKnuckleAnimCtrl::exeNumbnessEnd() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "AttackGraspNumbnessEnd");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Wait);
}
void BossKnuckleAnimCtrl::exeGraspMoveHit() {
if (al::isFirstStep(this)) {
al::startAction(mBossKnuckle, "GraspMoveHit");
return;
}
}
void BossKnuckleAnimCtrl::exeAngry() {
if (al::isFirstStep(this)) {
al::startAction(mBossKnuckle, "Angry");
return;
}
}
void BossKnuckleAnimCtrl::exeAngryEnd() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "AngryEnd");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Wait);
}
void BossKnuckleAnimCtrl::exeAngryHighLoop() {
if (al::isFirstStep(this)) {
al::startAction(mBossKnuckle, "AngryHigh1");
return;
}
}
void BossKnuckleAnimCtrl::exeAngryHighOneTime() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "AngryHigh2");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Angry);
}
void BossKnuckleAnimCtrl::exeFear() {
if (al::isFirstStep(this)) {
al::startAction(mBossKnuckle, "Fear");
return;
}
}
void BossKnuckleAnimCtrl::exeFearEnd() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "FearEnd");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Wait);
}
void BossKnuckleAnimCtrl::exeMoveFrontStart() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "MoveFrontStart");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &MoveFront);
}
void BossKnuckleAnimCtrl::exeMoveFront() {
if (al::isFirstStep(this)) {
al::startAction(mBossKnuckle, "MoveFront");
return;
}
}
void BossKnuckleAnimCtrl::exeMoveFrontEnd() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "MoveFrontEnd");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, &Wait);
}
void BossKnuckleAnimCtrl::exePlayerDamage() {
if (al::isFirstStep(this))
al::startAction(mBossKnuckle, "PlayerDamage");
if (al::isActionEnd(mBossKnuckle))
al::setNerve(this, mPlayerDamageReturnNerve);
}
BossKnuckleAnimCtrl::~BossKnuckleAnimCtrl() = default;

View file

@ -0,0 +1,58 @@
#pragma once
#include "Library/Nerve/NerveExecutor.h"
class BossKnuckle;
class BossKnuckleAnimCtrl : public al::NerveExecutor {
public:
BossKnuckleAnimCtrl(BossKnuckle* bossKnuckle);
void update();
void startWait();
void startAttackGraspSign();
bool isPlayerDamage();
bool isNumbness();
void startSand();
void startGraspMoveHit();
void startNumbnessIfNotPlaying();
void startAngryIfNotPlaying();
bool isAngry();
void startAngryHighLoopIfNotPlaying();
void startAngryHighOneTimeIfNotPlaying();
void startMoveFrontIfNotPlaying();
void startFearIfNotPlaying();
bool isFear();
void endNumbnessIfPlaying();
void endAngryIfPlaying();
void endFearIfPlaying();
void endMoveFrontIfPlaying();
void startPlayerDamage();
void exeBeforeStart();
void exeWait();
void exeAttackGraspSign();
void exeSand();
void exeNumbnessStart();
void exeNumbness();
void exeNumbnessEnd();
void exeGraspMoveHit();
void exeAngryStart();
void exeAngry();
void exeAngryEnd();
void exeAngryHighLoop();
void exeAngryHighOneTime();
void exeFearStart();
void exeFear();
void exeFearEnd();
void exeMoveFrontStart();
void exeMoveFront();
void exeMoveFrontEnd();
void exePlayerDamage();
~BossKnuckleAnimCtrl();
private:
BossKnuckle* mBossKnuckle = nullptr;
const al::Nerve* mPlayerDamageReturnNerve = nullptr;
};
static_assert(sizeof(BossKnuckleAnimCtrl) == 0x20);