mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-12-18 11:52:23 -05:00
Implement/match Act2Brick (#1169)
* Implement/match Act2Brick * Rename functions * Naming
This commit is contained in:
parent
816bfe842d
commit
b9a1da6a7a
7 changed files with 132 additions and 30 deletions
|
@ -26,18 +26,22 @@ class Act2Brick : public LegoPathActor {
|
||||||
return !strcmp(p_name, Act2Brick::ClassName()) || LegoEntity::IsA(p_name);
|
return !strcmp(p_name, Act2Brick::ClassName()) || LegoEntity::IsA(p_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
MxResult VTable0x94(LegoPathActor* p_actor, MxBool) override; // vtable+0x94
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x1007a450
|
// SYNTHETIC: LEGO1 0x1007a450
|
||||||
// Act2Brick::`scalar deleting destructor'
|
// Act2Brick::`scalar deleting destructor'
|
||||||
|
|
||||||
|
void StopSound();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
undefined4 m_unk0x154; // 0x154
|
static MxLong g_lastHitActorTime;
|
||||||
undefined m_unk0x158[0x0c]; // 0x158
|
|
||||||
undefined4 m_unk0x164; // 0x164
|
LegoCacheSound* m_whistleSound; // 0x154
|
||||||
Mx3DPointFloat m_unk0x168; // 0x168
|
undefined m_unk0x158[0x0c]; // 0x158
|
||||||
Mx3DPointFloat m_unk0x17c; // 0x17c
|
undefined4 m_unk0x164; // 0x164
|
||||||
undefined4 m_unk0x190; // 0x190
|
Mx3DPointFloat m_unk0x168; // 0x168
|
||||||
|
Mx3DPointFloat m_unk0x17c; // 0x17c
|
||||||
|
MxS32 m_unk0x190; // 0x190
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ACT2BRICK_H
|
#endif // ACT2BRICK_H
|
||||||
|
|
|
@ -58,6 +58,7 @@ class LegoCacheSoundManager {
|
||||||
LegoCacheSound* ManageSoundEntry(LegoCacheSound* p_sound);
|
LegoCacheSound* ManageSoundEntry(LegoCacheSound* p_sound);
|
||||||
LegoCacheSound* Play(const char* p_key, const char* p_name, MxBool p_looping);
|
LegoCacheSound* Play(const char* p_key, const char* p_name, MxBool p_looping);
|
||||||
LegoCacheSound* Play(LegoCacheSound* p_sound, const char* p_name, MxBool p_looping);
|
LegoCacheSound* Play(LegoCacheSound* p_sound, const char* p_name, MxBool p_looping);
|
||||||
|
void Stop(LegoCacheSound*& p_sound);
|
||||||
void Destroy(LegoCacheSound*& p_sound);
|
void Destroy(LegoCacheSound*& p_sound);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -41,7 +41,7 @@ class LegoCacheSound : public MxCore {
|
||||||
|
|
||||||
LegoCacheSound* Clone();
|
LegoCacheSound* Clone();
|
||||||
MxResult Play(const char* p_name, MxBool p_looping);
|
MxResult Play(const char* p_name, MxBool p_looping);
|
||||||
void FUN_10006b80();
|
void Stop();
|
||||||
void FUN_10006be0();
|
void FUN_10006be0();
|
||||||
void SetDistance(MxS32 p_min, MxS32 p_max);
|
void SetDistance(MxS32 p_min, MxS32 p_max);
|
||||||
void Mute(MxBool p_mute);
|
void Mute(MxBool p_mute);
|
||||||
|
|
|
@ -14,14 +14,14 @@ LegoCacheSoundManager::~LegoCacheSoundManager()
|
||||||
while (!m_set.empty()) {
|
while (!m_set.empty()) {
|
||||||
sound = (*m_set.begin()).GetSound();
|
sound = (*m_set.begin()).GetSound();
|
||||||
m_set.erase(m_set.begin());
|
m_set.erase(m_set.begin());
|
||||||
sound->FUN_10006b80();
|
sound->Stop();
|
||||||
delete sound;
|
delete sound;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!m_list.empty()) {
|
while (!m_list.empty()) {
|
||||||
sound = (*m_list.begin()).GetSound();
|
sound = (*m_list.begin()).GetSound();
|
||||||
m_list.erase(m_list.begin());
|
m_list.erase(m_list.begin());
|
||||||
sound->FUN_10006b80();
|
sound->Stop();
|
||||||
// DECOMP: delete should not be inlined here
|
// DECOMP: delete should not be inlined here
|
||||||
delete sound;
|
delete sound;
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ MxResult LegoCacheSoundManager::Tickle()
|
||||||
listIter++;
|
listIter++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sound->FUN_10006b80();
|
sound->Stop();
|
||||||
m_list.erase(listIter++);
|
m_list.erase(listIter++);
|
||||||
delete sound;
|
delete sound;
|
||||||
}
|
}
|
||||||
|
@ -132,6 +132,40 @@ LegoCacheSound* LegoCacheSoundManager::Play(LegoCacheSound* p_sound, const char*
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1003db80
|
||||||
|
// FUNCTION: BETA10 0x100656a7
|
||||||
|
void LegoCacheSoundManager::Stop(LegoCacheSound*& p_sound)
|
||||||
|
{
|
||||||
|
#ifdef COMPAT_MODE
|
||||||
|
Set100d6b4c::iterator setIter;
|
||||||
|
for (setIter = m_set.begin(); setIter != m_set.end(); setIter++) {
|
||||||
|
#else
|
||||||
|
for (Set100d6b4c::iterator setIter = m_set.begin(); setIter != m_set.end(); setIter++) {
|
||||||
|
#endif
|
||||||
|
if ((*setIter).GetSound() == p_sound) {
|
||||||
|
p_sound->Stop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef COMPAT_MODE
|
||||||
|
List100d6b4c::iterator listIter;
|
||||||
|
for (listIter = m_list.begin();; listIter++) {
|
||||||
|
#else
|
||||||
|
for (List100d6b4c::iterator listIter = m_list.begin();; listIter++) {
|
||||||
|
#endif
|
||||||
|
if (listIter == m_list.end()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LegoCacheSound* sound = (*listIter).GetSound();
|
||||||
|
if (sound == p_sound) {
|
||||||
|
p_sound->Stop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003dc40
|
// FUNCTION: LEGO1 0x1003dc40
|
||||||
void LegoCacheSoundManager::Destroy(LegoCacheSound*& p_sound)
|
void LegoCacheSoundManager::Destroy(LegoCacheSound*& p_sound)
|
||||||
{
|
{
|
||||||
|
@ -142,7 +176,7 @@ void LegoCacheSoundManager::Destroy(LegoCacheSound*& p_sound)
|
||||||
for (Set100d6b4c::iterator setIter = m_set.begin(); setIter != m_set.end(); setIter++) {
|
for (Set100d6b4c::iterator setIter = m_set.begin(); setIter != m_set.end(); setIter++) {
|
||||||
#endif
|
#endif
|
||||||
if ((*setIter).GetSound() == p_sound) {
|
if ((*setIter).GetSound() == p_sound) {
|
||||||
p_sound->FUN_10006b80();
|
p_sound->Stop();
|
||||||
|
|
||||||
delete p_sound;
|
delete p_sound;
|
||||||
m_set.erase(setIter);
|
m_set.erase(setIter);
|
||||||
|
@ -162,7 +196,7 @@ void LegoCacheSoundManager::Destroy(LegoCacheSound*& p_sound)
|
||||||
|
|
||||||
LegoCacheSound* sound = (*listIter).GetSound();
|
LegoCacheSound* sound = (*listIter).GetSound();
|
||||||
if (sound == p_sound) {
|
if (sound == p_sound) {
|
||||||
p_sound->FUN_10006b80();
|
p_sound->Stop();
|
||||||
|
|
||||||
delete sound;
|
delete sound;
|
||||||
m_list.erase(listIter);
|
m_list.erase(listIter);
|
||||||
|
|
|
@ -181,7 +181,7 @@ MxResult LegoCacheSound::Play(const char* p_name, MxBool p_looping)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10006b80
|
// FUNCTION: LEGO1 0x10006b80
|
||||||
void LegoCacheSound::FUN_10006b80()
|
void LegoCacheSound::Stop()
|
||||||
{
|
{
|
||||||
DWORD dwStatus;
|
DWORD dwStatus;
|
||||||
m_dsBuffer->GetStatus(&dwStatus);
|
m_dsBuffer->GetStatus(&dwStatus);
|
||||||
|
|
|
@ -1,38 +1,101 @@
|
||||||
#include "act2brick.h"
|
#include "act2brick.h"
|
||||||
|
|
||||||
|
#include "legocachesoundmanager.h"
|
||||||
|
#include "legosoundmanager.h"
|
||||||
|
#include "legoworld.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include "mxmisc.h"
|
||||||
|
#include "mxnotificationmanager.h"
|
||||||
|
#include "mxnotificationparam.h"
|
||||||
|
#include "mxticklemanager.h"
|
||||||
|
#include "mxtimer.h"
|
||||||
|
#include "roi/legoroi.h"
|
||||||
|
|
||||||
|
#include <vec.h>
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(Act2Brick, 0x194)
|
DECOMP_SIZE_ASSERT(Act2Brick, 0x194)
|
||||||
|
|
||||||
// STUB: LEGO1 0x1007a2b0
|
// GLOBAL: LEGO1 0x100f7a60
|
||||||
|
MxLong Act2Brick::g_lastHitActorTime = 0;
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1007a2b0
|
||||||
|
// FUNCTION: BETA10 0x10012a30
|
||||||
Act2Brick::Act2Brick()
|
Act2Brick::Act2Brick()
|
||||||
{
|
{
|
||||||
// TODO
|
m_whistleSound = NULL;
|
||||||
|
m_unk0x164 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1007a470
|
// FUNCTION: LEGO1 0x1007a470
|
||||||
Act2Brick::~Act2Brick()
|
Act2Brick::~Act2Brick()
|
||||||
{
|
{
|
||||||
// TODO
|
TickleManager()->UnregisterClient(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1007a750
|
// FUNCTION: LEGO1 0x1007a750
|
||||||
MxResult Act2Brick::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
|
MxResult Act2Brick::VTable0x94(LegoPathActor* p_actor, MxBool)
|
||||||
{
|
{
|
||||||
// TODO
|
MxLong time = Timer()->GetTime();
|
||||||
return 0;
|
MxLong diff = time - g_lastHitActorTime;
|
||||||
}
|
|
||||||
|
|
||||||
// STUB: LEGO1 0x1007a7f0
|
if (strcmp(p_actor->GetROI()->GetName(), "pepper")) {
|
||||||
MxResult Act2Brick::Tickle()
|
return SUCCESS;
|
||||||
{
|
}
|
||||||
// TODO
|
|
||||||
|
g_lastHitActorTime = time;
|
||||||
|
if (diff > 1000) {
|
||||||
|
SoundManager()->GetCacheSoundManager()->Play("hitactor", NULL, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1007a8c0
|
// FUNCTION: LEGO1 0x1007a7f0
|
||||||
|
// FUNCTION: BETA10 0x10012d46
|
||||||
|
MxResult Act2Brick::Tickle()
|
||||||
|
{
|
||||||
|
MxMatrix local2world(m_roi->GetLocal2World());
|
||||||
|
m_unk0x190++;
|
||||||
|
|
||||||
|
if (m_unk0x190 >= 8) {
|
||||||
|
local2world.SetTranslation(m_unk0x17c[0], m_unk0x17c[1], m_unk0x17c[2]);
|
||||||
|
m_unk0x164 = 3;
|
||||||
|
TickleManager()->UnregisterClient(this);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
VPV3(local2world[3], local2world[3], m_unk0x168);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_roi->FUN_100a58f0(local2world);
|
||||||
|
m_roi->VTable0x14();
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1007a8c0
|
||||||
|
// FUNCTION: BETA10 0x10012ec4
|
||||||
MxLong Act2Brick::Notify(MxParam& p_param)
|
MxLong Act2Brick::Notify(MxParam& p_param)
|
||||||
{
|
{
|
||||||
// TODO
|
if (((MxNotificationParam&) p_param).GetNotification() == c_notificationClick && m_roi->GetVisibility()) {
|
||||||
|
m_roi->SetVisibility(FALSE);
|
||||||
|
|
||||||
|
if (m_whistleSound != NULL) {
|
||||||
|
StopSound();
|
||||||
|
}
|
||||||
|
|
||||||
|
MxNotificationParam param(c_notificationType22, this);
|
||||||
|
NotificationManager()->Send(CurrentWorld(), param);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1007a9d0
|
||||||
|
// FUNCTION: BETA10 0x1001300f
|
||||||
|
void Act2Brick::StopSound()
|
||||||
|
{
|
||||||
|
if (m_whistleSound != NULL) {
|
||||||
|
SoundManager()->GetCacheSoundManager()->Stop(m_whistleSound);
|
||||||
|
m_whistleSound = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ LegoActor::LegoActor()
|
||||||
LegoActor::~LegoActor()
|
LegoActor::~LegoActor()
|
||||||
{
|
{
|
||||||
if (m_sound) {
|
if (m_sound) {
|
||||||
m_sound->FUN_10006b80();
|
m_sound->Stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue