diff --git a/data/file_list.yml b/data/file_list.yml index 64c53263..7208a11d 100644 --- a/data/file_list.yml +++ b/data/file_list.yml @@ -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': diff --git a/src/Boss/BossKnuckle/BossKnuckle.h b/src/Boss/BossKnuckle/BossKnuckle.h new file mode 100644 index 00000000..018077a1 --- /dev/null +++ b/src/Boss/BossKnuckle/BossKnuckle.h @@ -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(); +}; diff --git a/src/Boss/BossKnuckle/BossKnuckleAnimCtrl.cpp b/src/Boss/BossKnuckle/BossKnuckleAnimCtrl.cpp new file mode 100644 index 00000000..94034d16 --- /dev/null +++ b/src/Boss/BossKnuckle/BossKnuckleAnimCtrl.cpp @@ -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; diff --git a/src/Boss/BossKnuckle/BossKnuckleAnimCtrl.h b/src/Boss/BossKnuckle/BossKnuckleAnimCtrl.h new file mode 100644 index 00000000..5a0a3c85 --- /dev/null +++ b/src/Boss/BossKnuckle/BossKnuckleAnimCtrl.h @@ -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);