mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
MapObj: Implement EchoEmitterMapParts
This commit is contained in:
parent
b6f947c559
commit
6933303e97
|
|
@ -67377,37 +67377,37 @@ MapObj/EchoBlockMapParts.o:
|
|||
- offset: 0x264a54
|
||||
size: 120
|
||||
label: _ZN17EchoBlockMapPartsC2EPKc
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x264acc
|
||||
size: 132
|
||||
label: _ZN17EchoBlockMapPartsC1EPKc
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x264b50
|
||||
size: 132
|
||||
label: _ZN17EchoBlockMapParts4initERKN2al13ActorInitInfoE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x264bd4
|
||||
size: 12
|
||||
label: _ZN17EchoBlockMapParts5beginEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x264be0
|
||||
size: 8
|
||||
label: _ZN17EchoBlockMapParts10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x264be8
|
||||
size: 28
|
||||
label: _ZNK2al10FunctorV0MIP17EchoBlockMapPartsMS1_FvvEEclEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0x264c04
|
||||
size: 76
|
||||
label: _ZNK2al10FunctorV0MIP17EchoBlockMapPartsMS1_FvvEE5cloneEv
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0x264c50
|
||||
size: 4
|
||||
label: _ZN2al10FunctorV0MIP17EchoBlockMapPartsMS1_FvvEED0Ev
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
MapObj/EchoEmitter.o:
|
||||
'.text':
|
||||
|
|
@ -134216,7 +134216,7 @@ Scene/ProjectActorFactory.o:
|
|||
- offset: 0x4b7e8c
|
||||
size: 52
|
||||
label: _ZN2al19createActorFunctionI17EchoBlockMapPartsEEPNS_9LiveActorEPKc
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
lazy: true
|
||||
- offset: 0x4b7ec0
|
||||
size: 52
|
||||
|
|
|
|||
32
src/MapObj/EchoBlockMapParts.cpp
Normal file
32
src/MapObj/EchoBlockMapParts.cpp
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#include "MapObj/EchoBlockMapParts.h"
|
||||
|
||||
#include "Library/LiveActor/ActorInitUtil.h"
|
||||
#include "Library/Stage/StageSwitchUtil.h"
|
||||
#include "Library/Thread/FunctorV0M.h"
|
||||
|
||||
#include "MapObj/EchoEmitterHolder.h"
|
||||
|
||||
EchoBlockMapParts::EchoBlockMapParts(const char* name) : al::LiveActor(name) {}
|
||||
|
||||
void EchoBlockMapParts::init(const al::ActorInitInfo& info) {
|
||||
using EchoBlockMapPartsFunctor =
|
||||
al::FunctorV0M<EchoBlockMapParts*, void (EchoBlockMapParts::*)()>;
|
||||
|
||||
al::initMapPartsActor(this, info, nullptr);
|
||||
rs::initEchoEmitterHolder(this);
|
||||
al::trySyncStageSwitchAppear(this);
|
||||
al::tryListenStageSwitchKill(this);
|
||||
|
||||
if (al::listenStageSwitchOnAppear(this,
|
||||
EchoBlockMapPartsFunctor(this, &EchoBlockMapParts::begin)))
|
||||
makeActorDead();
|
||||
}
|
||||
|
||||
void EchoBlockMapParts::begin() {
|
||||
makeActorAlive();
|
||||
}
|
||||
|
||||
bool EchoBlockMapParts::receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||
al::HitSensor* self) {
|
||||
return false;
|
||||
}
|
||||
22
src/MapObj/EchoBlockMapParts.h
Normal file
22
src/MapObj/EchoBlockMapParts.h
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include "Library/LiveActor/LiveActor.h"
|
||||
|
||||
namespace al {
|
||||
struct ActorInitInfo;
|
||||
class HitSensor;
|
||||
class SensorMsg;
|
||||
} // namespace al
|
||||
|
||||
class EchoBlockMapParts : public al::LiveActor {
|
||||
public:
|
||||
EchoBlockMapParts(const char* name);
|
||||
|
||||
void init(const al::ActorInitInfo& info) override;
|
||||
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||
al::HitSensor* self) override;
|
||||
|
||||
void begin();
|
||||
};
|
||||
|
||||
static_assert(sizeof(EchoBlockMapParts) == 0x108);
|
||||
55
src/MapObj/EchoEmitterHolder.h
Normal file
55
src/MapObj/EchoEmitterHolder.h
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadMatrix.h>
|
||||
#include <math/seadVector.h>
|
||||
|
||||
#include "Library/Execute/IUseExecutor.h"
|
||||
#include "Library/HostIO/HioNode.h"
|
||||
#include "Library/Scene/ISceneObj.h"
|
||||
|
||||
#include "Scene/SceneObjFactory.h"
|
||||
|
||||
namespace agl {
|
||||
class DrawContext;
|
||||
} // namespace agl
|
||||
|
||||
namespace al {
|
||||
struct ActorInitInfo;
|
||||
class IUseSceneObjHolder;
|
||||
class LiveActor;
|
||||
} // namespace al
|
||||
|
||||
class EchoEmitter;
|
||||
class EchoEmitterHolder;
|
||||
|
||||
class EchoEmitterHolder : public al::HioNode, public al::IUseExecutor, public al::ISceneObj {
|
||||
public:
|
||||
static constexpr s32 sSceneObjId = SceneObjID_EchoEmitterHolder;
|
||||
|
||||
EchoEmitterHolder();
|
||||
|
||||
void initAfterPlacementSceneObj(const al::ActorInitInfo& info) override;
|
||||
void execute() override;
|
||||
|
||||
void emit(const sead::Vector3f& trans, f32 scale, s32 life);
|
||||
void emitKeep(const void* keeper, const sead::Vector3f& trans, f32 scale, s32 life);
|
||||
void setToUbo(agl::DrawContext* context, s32 index, const sead::Matrix34f& viewMtx,
|
||||
const sead::Matrix44f& projMtx) const;
|
||||
EchoEmitter* tryGetUnUseEmitter() const;
|
||||
void* tryGetUnUseEmitterKeeper(const void* keeper) const;
|
||||
|
||||
const char* getSceneObjName() const override;
|
||||
|
||||
private:
|
||||
char _10[0x58];
|
||||
};
|
||||
|
||||
static_assert(sizeof(EchoEmitterHolder) == 0x68);
|
||||
|
||||
namespace rs {
|
||||
EchoEmitterHolder* tryGetEmitterHolder(const al::IUseSceneObjHolder*);
|
||||
void initEchoEmitterHolder(const al::LiveActor*);
|
||||
void emitEcho(const al::LiveActor*, const sead::Vector3f&, f32, s32);
|
||||
void emitKeepEcho(const al::LiveActor*, const sead::Vector3f&, f32, s32);
|
||||
} // namespace rs
|
||||
|
|
@ -77,6 +77,7 @@
|
|||
#include "MapObj/CitySignal.h"
|
||||
#include "MapObj/CoinCollectHintObj.h"
|
||||
#include "MapObj/Doshi.h"
|
||||
#include "MapObj/EchoBlockMapParts.h"
|
||||
#include "MapObj/ElectricWire/ElectricWire.h"
|
||||
#include "MapObj/FireDrum2D.h"
|
||||
#include "MapObj/FixMapPartsBgmChangeAction.h"
|
||||
|
|
@ -279,7 +280,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
|
|||
{"DoorSnow", nullptr},
|
||||
{"DoorWarp", nullptr},
|
||||
{"DoorWarpStageChange", nullptr},
|
||||
{"EchoBlockMapParts", nullptr},
|
||||
{"EchoBlockMapParts", al::createActorFunction<EchoBlockMapParts>},
|
||||
{"EffectObj", al::createActorFunction<al::EffectObj>},
|
||||
{"EffectObjScale", nullptr},
|
||||
{"EffectObjAlpha", nullptr},
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#include "Item/CoinCollectHolder.h"
|
||||
#include "Item/CoinCollectWatcher.h"
|
||||
#include "Layout/KidsModeLayoutAccessor.h"
|
||||
#include "MapObj/EchoEmitterHolder.h"
|
||||
#include "MapObj/RouteGuideDirector.h"
|
||||
#include "Scene/HintPhotoLayoutHolder.h"
|
||||
|
||||
|
|
@ -39,7 +40,7 @@ static al::ISceneObj* sceneObjCreator(s32 id) {
|
|||
return nullptr;
|
||||
|
||||
case SceneObjID_EchoEmitterHolder:
|
||||
return nullptr;
|
||||
return new EchoEmitterHolder();
|
||||
|
||||
case SceneObjID_ElectricWireCameraTicketHolder:
|
||||
return nullptr;
|
||||
|
|
|
|||
Loading…
Reference in a new issue