mirror of https://github.com/PrimeDecomp/prime.git
parent
75e1e3f144
commit
b7c315e2f4
|
@ -22514,7 +22514,7 @@ lbl_800D99B8:
|
|||
/* 800D9A08 000D6968 38 81 00 1C */ addi r4, r1, 0x1c
|
||||
/* 800D9A0C 000D696C 38 C1 00 D0 */ addi r6, r1, 0xd0
|
||||
/* 800D9A10 000D6970 39 01 00 60 */ addi r8, r1, 0x60
|
||||
/* 800D9A14 000D6974 48 17 1C D5 */ bl "__ct__24CScriptCameraHintTriggerF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC12CTransform4fbb"
|
||||
/* 800D9A14 000D6974 48 17 1C D5 */ bl "__ct__24CScriptCameraHintTriggerF9TUniqueIdbRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC12CTransform4fbb"
|
||||
/* 800D9A18 000D6978 7C 7A 1B 78 */ mr r26, r3
|
||||
lbl_800D9A1C:
|
||||
/* 800D9A1C 000D697C 38 61 00 D0 */ addi r3, r1, 0xd0
|
||||
|
|
|
@ -3,15 +3,15 @@
|
|||
.section .data
|
||||
.balign 8
|
||||
|
||||
.global lbl_803E8C40
|
||||
lbl_803E8C40:
|
||||
.global __vt__24CScriptCameraHintTrigger
|
||||
__vt__24CScriptCameraHintTrigger:
|
||||
# ROM: 0x3E5C40
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte __dt__24CScriptCameraHintTriggerFv
|
||||
.4byte Accept__24CScriptCameraHintTriggerFR8IVisitor
|
||||
.4byte PreThink__7CEntityFfR13CStateManager
|
||||
.4byte AcceptScriptMsg__24CScriptCameraHintTriggerF20EScriptObjectMessage9TUniqueIdR13CStateManager
|
||||
.4byte Think__24CScriptCameraHintTriggerFfR13CStateManager
|
||||
.4byte AcceptScriptMsg__6CActorF20EScriptObjectMessage9TUniqueIdR13CStateManager
|
||||
.4byte SetActive__6CActorFUc
|
||||
.4byte PreRender__6CActorFR13CStateManagerRC14CFrustumPlanes
|
||||
|
@ -56,9 +56,9 @@ __dt__24CScriptCameraHintTriggerFv:
|
|||
/* 8024B3B0 00248310 93 C1 00 08 */ stw r30, 8(r1)
|
||||
/* 8024B3B4 00248314 7C 7E 1B 79 */ or. r30, r3, r3
|
||||
/* 8024B3B8 00248318 41 82 00 28 */ beq lbl_8024B3E0
|
||||
/* 8024B3BC 0024831C 3C A0 80 3F */ lis r5, lbl_803E8C40@ha
|
||||
/* 8024B3BC 0024831C 3C A0 80 3F */ lis r5, __vt__24CScriptCameraHintTrigger@ha
|
||||
/* 8024B3C0 00248320 38 80 00 00 */ li r4, 0
|
||||
/* 8024B3C4 00248324 38 05 8C 40 */ addi r0, r5, lbl_803E8C40@l
|
||||
/* 8024B3C4 00248324 38 05 8C 40 */ addi r0, r5, __vt__24CScriptCameraHintTrigger@l
|
||||
/* 8024B3C8 00248328 90 1E 00 00 */ stw r0, 0(r30)
|
||||
/* 8024B3CC 0024832C 4B E0 A3 25 */ bl __dt__6CActorFv
|
||||
/* 8024B3D0 00248330 7F E0 07 35 */ extsh. r0, r31
|
||||
|
@ -74,8 +74,8 @@ lbl_8024B3E0:
|
|||
/* 8024B3F4 00248354 38 21 00 10 */ addi r1, r1, 0x10
|
||||
/* 8024B3F8 00248358 4E 80 00 20 */ blr
|
||||
|
||||
.global AcceptScriptMsg__24CScriptCameraHintTriggerF20EScriptObjectMessage9TUniqueIdR13CStateManager
|
||||
AcceptScriptMsg__24CScriptCameraHintTriggerF20EScriptObjectMessage9TUniqueIdR13CStateManager:
|
||||
.global Think__24CScriptCameraHintTriggerFfR13CStateManager
|
||||
Think__24CScriptCameraHintTriggerFfR13CStateManager:
|
||||
/* 8024B3FC 0024835C 94 21 FF E0 */ stwu r1, -0x20(r1)
|
||||
/* 8024B400 00248360 7C 08 02 A6 */ mflr r0
|
||||
/* 8024B404 00248364 90 01 00 24 */ stw r0, 0x24(r1)
|
||||
|
@ -281,8 +281,8 @@ Accept__24CScriptCameraHintTriggerFR8IVisitor:
|
|||
/* 8024B6E0 00248640 38 21 00 10 */ addi r1, r1, 0x10
|
||||
/* 8024B6E4 00248644 4E 80 00 20 */ blr
|
||||
|
||||
.global "__ct__24CScriptCameraHintTriggerF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC12CTransform4fbb"
|
||||
"__ct__24CScriptCameraHintTriggerF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC12CTransform4fbb":
|
||||
.global "__ct__24CScriptCameraHintTriggerF9TUniqueIdbRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC12CTransform4fbb"
|
||||
"__ct__24CScriptCameraHintTriggerF9TUniqueIdbRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC12CTransform4fbb":
|
||||
/* 8024B6E8 00248648 94 21 FF 00 */ stwu r1, -0x100(r1)
|
||||
/* 8024B6EC 0024864C 7C 08 02 A6 */ mflr r0
|
||||
/* 8024B6F0 00248650 90 01 01 04 */ stw r0, 0x104(r1)
|
||||
|
@ -336,9 +336,9 @@ Accept__24CScriptCameraHintTriggerFR8IVisitor:
|
|||
/* 8024B7B0 00248710 38 61 00 88 */ addi r3, r1, 0x88
|
||||
/* 8024B7B4 00248714 38 80 FF FF */ li r4, -1
|
||||
/* 8024B7B8 00248718 4B EC B2 95 */ bl __dt__10CModelDataFv
|
||||
/* 8024B7BC 0024871C 3C 60 80 3F */ lis r3, lbl_803E8C40@ha
|
||||
/* 8024B7BC 0024871C 3C 60 80 3F */ lis r3, __vt__24CScriptCameraHintTrigger@ha
|
||||
/* 8024B7C0 00248720 7F A4 EB 78 */ mr r4, r29
|
||||
/* 8024B7C4 00248724 38 03 8C 40 */ addi r0, r3, lbl_803E8C40@l
|
||||
/* 8024B7C4 00248724 38 03 8C 40 */ addi r0, r3, __vt__24CScriptCameraHintTrigger@l
|
||||
/* 8024B7C8 00248728 7F 85 E3 78 */ mr r5, r28
|
||||
/* 8024B7CC 0024872C 90 18 00 00 */ stw r0, 0(r24)
|
||||
/* 8024B7D0 00248730 38 78 00 E8 */ addi r3, r24, 0xe8
|
||||
|
|
|
@ -347,7 +347,7 @@ LIBS = [
|
|||
"MetroidPrime/CLogBookScreen",
|
||||
["MetroidPrime/CGBASupport", True],
|
||||
"MetroidPrime/Player/CSaveWorld",
|
||||
"MetroidPrime/ScriptObjects/CScriptCameraHintTrigger",
|
||||
["MetroidPrime/ScriptObjects/CScriptCameraHintTrigger", True],
|
||||
["MetroidPrime/Enemies/CAmbientAI", True],
|
||||
["MetroidPrime/CMemoryCardDriver", False],
|
||||
"MetroidPrime/CSaveGameScreen",
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
#ifndef _CSCRIPTCAMERAHINTTRIGGER
|
||||
#define _CSCRIPTCAMERAHINTTRIGGER
|
||||
|
||||
#include "MetroidPrime/CActor.hpp"
|
||||
|
||||
#include "Collision/COBBox.hpp"
|
||||
|
||||
class CScriptCameraHintTrigger : public CActor {
|
||||
COBBox xe8_obb;
|
||||
CVector3f x124_scale;
|
||||
bool x130_24_deactivateOnEnter : 1;
|
||||
bool x130_25_deactivateOnExit : 1;
|
||||
bool x130_26_playerInside : 1;
|
||||
bool x130_27_playerWasInside : 1;
|
||||
|
||||
public:
|
||||
CScriptCameraHintTrigger(TUniqueId uid, bool active, const rstl::string& name,
|
||||
const CEntityInfo& info, const CVector3f& scale, const CTransform4f& xf,
|
||||
bool deactivateOnEnter, bool deactivateOnExit);
|
||||
~CScriptCameraHintTrigger();
|
||||
|
||||
void Accept(IVisitor& visitor) override;
|
||||
void Think(float dt, CStateManager& mgr) override;
|
||||
void Touch(CActor& other, CStateManager& mgr) override;
|
||||
rstl::optional_object< CAABox > GetTouchBounds() const override;
|
||||
};
|
||||
|
||||
#endif // _CSCRIPTCAMERAHINTTRIGGER
|
|
@ -312,7 +312,7 @@ METROIDPRIME :=\
|
|||
$(BUILD_DIR)/asm/MetroidPrime/CLogBookScreen.o\
|
||||
$(BUILD_DIR)/src/MetroidPrime/CGBASupport.o\
|
||||
$(BUILD_DIR)/asm/MetroidPrime/Player/CSaveWorld.o\
|
||||
$(BUILD_DIR)/asm/MetroidPrime/ScriptObjects/CScriptCameraHintTrigger.o\
|
||||
$(BUILD_DIR)/src/MetroidPrime/ScriptObjects/CScriptCameraHintTrigger.o\
|
||||
$(BUILD_DIR)/asm/MetroidPrime/Enemies/CAmbientAI.o\
|
||||
$(BUILD_DIR)/asm/MetroidPrime/CMemoryCardDriver.o\
|
||||
$(BUILD_DIR)/asm/MetroidPrime/CSaveGameScreen.o\
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
#include "MetroidPrime/ScriptObjects/CScriptCameraHintTrigger.hpp"
|
||||
|
||||
#include "MetroidPrime/CActorParameters.hpp"
|
||||
|
||||
CScriptCameraHintTrigger::CScriptCameraHintTrigger(TUniqueId uid, bool active,
|
||||
const rstl::string& name,
|
||||
const CEntityInfo& info, const CVector3f& scale,
|
||||
const CTransform4f& xf, bool deactivateOnEnter,
|
||||
bool deactivateOnExit)
|
||||
: CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(kMT_Trigger),
|
||||
CActorParameters::None(), kInvalidUniqueId)
|
||||
, xe8_obb(xf, scale)
|
||||
, x124_scale(scale)
|
||||
, x130_24_deactivateOnEnter(deactivateOnEnter)
|
||||
, x130_25_deactivateOnExit(deactivateOnExit)
|
||||
, x130_26_playerInside(false)
|
||||
, x130_27_playerWasInside(false)
|
||||
{}
|
||||
|
||||
void CScriptCameraHintTrigger::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
||||
|
||||
rstl::optional_object< CAABox > CScriptCameraHintTrigger::GetTouchBounds() const {
|
||||
return xe8_obb.CalculateAABox(CTransform4f::Identity());
|
||||
}
|
||||
|
||||
void CScriptCameraHintTrigger::Touch(CActor& other, CStateManager& mgr) {
|
||||
if (TCastToConstPtr< CPlayer >(other)) {
|
||||
rstl::optional_object< CAABox > bounds = other.GetTouchBounds();
|
||||
if (bounds.valid()) {
|
||||
COBBox otherObb = COBBox::FromAABox(*bounds, CTransform4f::Identity());
|
||||
x130_26_playerInside = xe8_obb.OBBIntersectsBox(otherObb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CScriptCameraHintTrigger::Think(float dt, CStateManager& mgr) {
|
||||
if (!GetActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (x130_26_playerInside && !x130_27_playerWasInside) {
|
||||
x130_27_playerWasInside = true;
|
||||
SendScriptMsgs(kSS_Entered, mgr, kSM_None);
|
||||
if (x130_24_deactivateOnEnter) {
|
||||
mgr.SendScriptMsg(this, kInvalidUniqueId, kSM_Deactivate);
|
||||
}
|
||||
}
|
||||
|
||||
if (!x130_26_playerInside && x130_27_playerWasInside) {
|
||||
x130_27_playerWasInside = false;
|
||||
SendScriptMsgs(kSS_Exited, mgr, kSM_None);
|
||||
if (x130_25_deactivateOnExit) {
|
||||
mgr.SendScriptMsg(this, kInvalidUniqueId, kSM_Deactivate);
|
||||
}
|
||||
}
|
||||
|
||||
if (x130_26_playerInside) {
|
||||
SendScriptMsgs(kSS_Inside, mgr, kSM_None);
|
||||
}
|
||||
|
||||
x130_26_playerInside = false;
|
||||
}
|
||||
|
||||
CScriptCameraHintTrigger::~CScriptCameraHintTrigger() {}
|
Loading…
Reference in New Issue