mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Amiibo: Implement HelpAmiiboYoshi (#215)
This commit is contained in:
parent
769899d634
commit
8f3de4c9d5
|
|
@ -167,12 +167,12 @@ Address,Quality,Size,Name
|
|||
0x0000007100004804,U,000008,_ZN26HelpAmiiboPlayerInvincible11isEnableUseEv
|
||||
0x000000710000480c,U,000080,_ZN26HelpAmiiboPlayerInvincible7executeEv
|
||||
0x000000710000485c,U,000008,_ZNK26HelpAmiiboPlayerInvincible7getTypeEv
|
||||
0x0000007100004864,U,000060,_ZN15HelpAmiiboYoshiC2EP18HelpAmiiboDirectorPN2al9LiveActorE
|
||||
0x00000071000048a0,U,000096,_ZN15HelpAmiiboYoshi18initAfterPlacementERKN2al13ActorInitInfoE
|
||||
0x0000007100004900,U,000008,_ZNK15HelpAmiiboYoshi14isTriggerTouchERKN2al7NfpInfoE
|
||||
0x0000007100004908,U,000112,_ZN15HelpAmiiboYoshi8activateEv
|
||||
0x0000007100004978,U,000032,_ZN15HelpAmiiboYoshi7executeEv
|
||||
0x0000007100004998,U,000008,_ZNK15HelpAmiiboYoshi7getTypeEv
|
||||
0x0000007100004864,O,000060,_ZN15HelpAmiiboYoshiC2EP18HelpAmiiboDirectorPN2al9LiveActorE
|
||||
0x00000071000048a0,O,000096,_ZN15HelpAmiiboYoshi18initAfterPlacementERKN2al13ActorInitInfoE
|
||||
0x0000007100004900,O,000008,_ZNK15HelpAmiiboYoshi14isTriggerTouchERKN2al7NfpInfoE
|
||||
0x0000007100004908,O,000112,_ZN15HelpAmiiboYoshi8activateEv
|
||||
0x0000007100004978,O,000032,_ZN15HelpAmiiboYoshi7executeEv
|
||||
0x0000007100004998,O,000008,_ZNK15HelpAmiiboYoshi7getTypeEv
|
||||
0x00000071000049a0,O,000120,_ZN15ItemAmiiboKoopaC2EPKc
|
||||
0x0000007100004a18,O,000132,_ZN15ItemAmiiboKoopaC1EPKc
|
||||
0x0000007100004a9c,O,000112,_ZN15ItemAmiiboKoopa4initERKN2al13ActorInitInfoE
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
8
lib/al/Library/Nfp/NfpFunction.h
Normal file
8
lib/al/Library/Nfp/NfpFunction.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
namespace al {
|
||||
class NfpInfo;
|
||||
|
||||
bool isCharacterIdBaseYoshi(const NfpInfo& nfpInfo);
|
||||
|
||||
} // namespace al
|
||||
|
|
@ -8,25 +8,40 @@ namespace al {
|
|||
class NfpInfo;
|
||||
class LiveActor;
|
||||
class ActorInitInfo;
|
||||
} // namespace al
|
||||
} // namespace al
|
||||
|
||||
class HelpAmiiboDirector;
|
||||
|
||||
enum class HelpAmiiboType : s32 {
|
||||
PlayerInvincible = 0,
|
||||
FallCoin = 1,
|
||||
LifeMaxUpItem = 1,
|
||||
CoinCollect = 2,
|
||||
InvincibleAttack = 2,
|
||||
NavigateCoinCollect = 2,
|
||||
Yoshi = 3,
|
||||
CountUpCoin = 4,
|
||||
};
|
||||
|
||||
class HelpAmiiboExecutor : public al::IUseHioNode {
|
||||
public:
|
||||
HelpAmiiboExecutor(HelpAmiiboDirector*, al::LiveActor*, const char*);
|
||||
|
||||
virtual void initAfterPlacement(const al::ActorInitInfo&);
|
||||
virtual bool isTriggerTouch(const al::NfpInfo&) = 0;
|
||||
virtual bool isTriggerTouch(const al::NfpInfo&) const = 0;
|
||||
virtual bool isEnableUse() = 0;
|
||||
virtual bool execute() = 0;
|
||||
virtual void activate();
|
||||
virtual void deactivate();
|
||||
virtual s32 getType() = 0;
|
||||
virtual HelpAmiiboType getType() const = 0;
|
||||
|
||||
bool tryTouch(const al::NfpInfo&);
|
||||
void tryExecute();
|
||||
|
||||
al::LiveActor* getActor() const {
|
||||
return mHelpAmiiboActor;
|
||||
}
|
||||
|
||||
private:
|
||||
HelpAmiiboDirector* mHelpAmiiboDirector = nullptr;
|
||||
bool mIsActivated = false;
|
||||
|
|
|
|||
42
src/Amiibo/HelpAmiiboYoshi.cpp
Normal file
42
src/Amiibo/HelpAmiiboYoshi.cpp
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
#include "Amiibo/HelpAmiiboYoshi.h"
|
||||
|
||||
#include <math/seadVector.h>
|
||||
|
||||
#include "Library/LiveActor/ActorDrawFunction.h"
|
||||
#include "Library/LiveActor/ActorInitInfo.h"
|
||||
#include "Library/LiveActor/ActorMovementFunction.h"
|
||||
#include "Library/Nfp/NfpFunction.h"
|
||||
|
||||
#include "Player/Yoshi.h"
|
||||
#include "Util/PlayerUtil.h"
|
||||
|
||||
HelpAmiiboYoshi::HelpAmiiboYoshi(HelpAmiiboDirector* director, al::LiveActor* amiiboActor)
|
||||
: HelpAmiiboExecutor(director, amiiboActor, "ヨッシーお助け") {}
|
||||
|
||||
void HelpAmiiboYoshi::initAfterPlacement(const al::ActorInitInfo& actorInitInfo) {
|
||||
HelpAmiiboExecutor::initAfterPlacement(actorInitInfo);
|
||||
|
||||
mYoshi = new Yoshi("amiiboヨッシー");
|
||||
al::initCreateActorNoPlacementInfo(mYoshi, actorInitInfo);
|
||||
mYoshi->makeActorDead();
|
||||
}
|
||||
|
||||
bool HelpAmiiboYoshi::isTriggerTouch(const al::NfpInfo& nfpInfo) const {
|
||||
return al::isCharacterIdBaseYoshi(nfpInfo);
|
||||
}
|
||||
|
||||
bool HelpAmiiboYoshi::execute() {
|
||||
return !al::isAlive(mYoshi);
|
||||
}
|
||||
|
||||
void HelpAmiiboYoshi::activate() {
|
||||
HelpAmiiboExecutor::activate();
|
||||
|
||||
const sead::Vector3f& playerPos = rs::getPlayerPos(getActor());
|
||||
al::resetPosition(mYoshi, playerPos + sead::Vector3f(0, 1000.0f, 0));
|
||||
mYoshi->appearEgg();
|
||||
}
|
||||
|
||||
HelpAmiiboType HelpAmiiboYoshi::getType() const {
|
||||
return HelpAmiiboType::Yoshi;
|
||||
}
|
||||
26
src/Amiibo/HelpAmiiboYoshi.h
Normal file
26
src/Amiibo/HelpAmiiboYoshi.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include "Amiibo/HelpAmiiboExecutor.h"
|
||||
|
||||
namespace al {
|
||||
class NfpInfo;
|
||||
class LiveActor;
|
||||
class ActorInitInfo;
|
||||
} // namespace al
|
||||
|
||||
class HelpAmiiboDirector;
|
||||
class Yoshi;
|
||||
|
||||
class HelpAmiiboYoshi : public HelpAmiiboExecutor {
|
||||
public:
|
||||
HelpAmiiboYoshi(HelpAmiiboDirector* director, al::LiveActor* amiiboActor);
|
||||
|
||||
void initAfterPlacement(const al::ActorInitInfo& actorInitInfo) override;
|
||||
bool isTriggerTouch(const al::NfpInfo& nfpInfo) const override;
|
||||
bool execute() override;
|
||||
void activate() override;
|
||||
HelpAmiiboType getType() const override;
|
||||
|
||||
private:
|
||||
Yoshi* mYoshi = nullptr;
|
||||
};
|
||||
67
src/Player/Yoshi.h
Normal file
67
src/Player/Yoshi.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
#pragma once
|
||||
|
||||
#include <math/seadMatrix.h>
|
||||
|
||||
#include "Library/LiveActor/LiveActor.h"
|
||||
|
||||
namespace al {
|
||||
class HitSensor;
|
||||
class SensorMsg;
|
||||
class WaterSurfaceFinder;
|
||||
} // namespace al
|
||||
|
||||
class CapTargetInfo;
|
||||
class PlayerAnimator;
|
||||
class PlayerColliderYoshi;
|
||||
class PlayerConst;
|
||||
class PlayerEffect;
|
||||
class PlayerJumpMessageRequest;
|
||||
class PlayerModelHolder;
|
||||
class PlayerModelChangerYoshi;
|
||||
class PlayerPushReceiver;
|
||||
class PlayerTrigger;
|
||||
class YoshiJointControlKeeper;
|
||||
class YoshiStateEgg;
|
||||
class YoshiStateHack;
|
||||
class YoshiStateNpc;
|
||||
|
||||
class Yoshi : public al::LiveActor {
|
||||
public:
|
||||
Yoshi(const char* actorName);
|
||||
|
||||
void init(const al::ActorInitInfo& info) override;
|
||||
void initAfterPlacement() override;
|
||||
void movement() override;
|
||||
void attackSensor(al::HitSensor*, al::HitSensor*) override;
|
||||
bool receiveMsg(const al::SensorMsg*, al::HitSensor*, al::HitSensor*) override;
|
||||
|
||||
void control() override;
|
||||
void updateCollider() override;
|
||||
|
||||
void updateCollisionShape();
|
||||
void sendCollisionMsg();
|
||||
void appearEgg();
|
||||
void startFruitShineGetDemo();
|
||||
void exeEgg();
|
||||
void exeNpc();
|
||||
void exeHack();
|
||||
|
||||
private:
|
||||
PlayerConst* mPlayerConst = nullptr;
|
||||
PlayerModelHolder* mModelHolder = nullptr;
|
||||
PlayerModelChangerYoshi* mModelChanger = nullptr;
|
||||
PlayerAnimator* mAnimator = nullptr;
|
||||
PlayerColliderYoshi* mCollider = nullptr;
|
||||
PlayerEffect* mEffect = nullptr;
|
||||
PlayerTrigger* mTrigger = nullptr;
|
||||
PlayerJumpMessageRequest* mJumpMessageRequest = nullptr;
|
||||
PlayerPushReceiver* mPushReceiver = nullptr;
|
||||
al::WaterSurfaceFinder* mWaterSurfaceFinder = nullptr;
|
||||
YoshiJointControlKeeper* mJointControlKeeper = nullptr;
|
||||
CapTargetInfo* mCapTargetInfo = nullptr;
|
||||
YoshiStateEgg* mStateEgg = nullptr;
|
||||
YoshiStateNpc* mStateNpc = nullptr;
|
||||
YoshiStateHack* mStateHack = nullptr;
|
||||
al::HitSensor* mHitSensor = nullptr;
|
||||
sead::Matrix34f mLocalMtx = sead::Matrix34f::ident;
|
||||
};
|
||||
Loading…
Reference in a new issue