mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-12-02 04:07:01 -05:00
51adf75b9b
* Use more forward declarations * Use more forward declarations * Add more forward declarations * Fix
146 lines
3 KiB
C++
146 lines
3 KiB
C++
#include "legoactor.h"
|
|
|
|
#include "define.h"
|
|
#include "legocachesoundmanager.h"
|
|
#include "legosoundmanager.h"
|
|
#include "misc.h"
|
|
#include "mxutilities.h"
|
|
#include "roi/legoroi.h"
|
|
|
|
DECOMP_SIZE_ASSERT(LegoActor, 0x78)
|
|
|
|
// GLOBAL: LEGO1 0x100f32d0
|
|
const char* g_actorNames[] = {"none", "pepper", "mama", "papa", "nick", "laura", "The_Brickster!"};
|
|
|
|
// FUNCTION: LEGO1 0x1002d110
|
|
LegoActor::LegoActor()
|
|
{
|
|
m_unk0x68 = 0.0f;
|
|
m_sound = NULL;
|
|
m_unk0x70 = 0.0f;
|
|
m_unk0x10 = 0;
|
|
m_actorId = 0;
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x1002d320
|
|
LegoActor::~LegoActor()
|
|
{
|
|
if (m_sound) {
|
|
m_sound->FUN_10006b80();
|
|
}
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x1002d390
|
|
void LegoActor::ParseAction(char* p_extra)
|
|
{
|
|
MxFloat speed = 0.0F;
|
|
char value[256];
|
|
value[0] = '\0';
|
|
|
|
if (KeyValueStringParse(value, g_strATTACH_CAMERA, p_extra)) {
|
|
GetROI()->SetVisibility(FALSE);
|
|
|
|
if (value[0]) {
|
|
Mx3DPointFloat location(0.0F, 0.0F, 0.0F);
|
|
Mx3DPointFloat direction(0.0F, 0.0F, 1.0F);
|
|
Mx3DPointFloat up(0.0F, 1.0F, 0.0F);
|
|
|
|
char* token = strtok(value, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
location[0] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
location[1] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
location[2] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
direction[0] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
direction[1] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
direction[2] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
up[0] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
up[1] = atof(token);
|
|
}
|
|
|
|
token = strtok(NULL, g_parseExtraTokens);
|
|
if (token != NULL) {
|
|
up[2] = atof(token);
|
|
}
|
|
|
|
SetWorldTransform(location, direction, up);
|
|
}
|
|
else {
|
|
ResetWorldTransform(TRUE);
|
|
}
|
|
}
|
|
|
|
if (KeyValueStringParse(value, g_strSPEED, p_extra)) {
|
|
speed = atof(value);
|
|
SetWorldSpeed(speed);
|
|
}
|
|
|
|
if (KeyValueStringParse(value, g_strSOUND, p_extra)) {
|
|
m_sound = SoundManager()->GetCacheSoundManager()->FUN_1003dae0(value, GetROI()->GetName(), TRUE);
|
|
}
|
|
|
|
if (KeyValueStringParse(value, g_strMUTE, p_extra)) {
|
|
FUN_1002d6e0(TRUE);
|
|
}
|
|
|
|
if (KeyValueStringParse(value, g_strVISIBILITY, p_extra)) {
|
|
GetROI()->SetVisibility(strcmpi(value, "FALSE") != 0);
|
|
}
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x1002d660
|
|
const char* LegoActor::GetActorName(MxU8 p_id)
|
|
{
|
|
return g_actorNames[p_id];
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x1002d670
|
|
void LegoActor::SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2)
|
|
{
|
|
if (p_roi) {
|
|
const char* name = p_roi->GetName();
|
|
|
|
for (MxU32 i = 1; i <= _countof(g_actorNames) - 1; i++) {
|
|
if (!strcmpi(name, g_actorNames[i])) {
|
|
m_type = e_character;
|
|
m_actorId = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
LegoEntity::SetROI(p_roi, p_bool1, p_bool2);
|
|
}
|
|
|
|
// STUB: LEGO1 0x1002d6e0
|
|
void LegoActor::FUN_1002d6e0(MxBool)
|
|
{
|
|
// TODO
|
|
}
|