mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-30 00:16:19 -04:00
dfa8efa97b
* some wii OS fixes * remove old dol2asm comments * remove dol2asm.h * remove function address comments * normalize ATTRIBUTE_ALIGN usage * DECL_WEAK macro * fix gcc attribute weak macro * wrap more mwcc specific things in ifdefs * fixes * fix revo sdk version flags * fixes
708 lines
18 KiB
C++
708 lines
18 KiB
C++
/**
|
|
* @file d_a_obj_geyser.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
|
|
#include "d/actor/d_a_obj_geyser.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_kankyo_rain.h"
|
|
|
|
void daObjGeyser_c::initBaseMtx() {
|
|
setBaseMtx();
|
|
}
|
|
|
|
void daObjGeyser_c::setBaseMtx() {
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
MTXCopy(mDoMtx_stack_c::get(), mMtx);
|
|
}
|
|
|
|
static char* l_arcName = "H_knktsn";
|
|
|
|
static cull_box l_cull_box = {
|
|
{-100.0f, -10.0f, -100.0f},
|
|
{100.0f, 550.0f, 100.0f},
|
|
};
|
|
|
|
static dCcD_SrcCps l_cps_src = {
|
|
{
|
|
{0x0, {{0x100, 0x0, 0x1d}, {0x0, 0x0}, 0x0}}, // mObj
|
|
{dCcD_SE_NONE, 0x0, 0x1, 0x0, 0x2}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x4}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, {0.0f, 500.0f, 0.0f}, 100.0f}, // mCps
|
|
} // mCpsAttr
|
|
};
|
|
|
|
int daObjGeyser_c::Create() {
|
|
if (getType() == 1) {
|
|
shape_angle.x = 0x4000;
|
|
home.angle.x = 0x4000;
|
|
current.angle.x = 0x4000;
|
|
}
|
|
|
|
initBaseMtx();
|
|
fopAcM_SetMtx(this, mMtx);
|
|
|
|
mCcStts.Init(0, 255, this);
|
|
mCcCps.Set(l_cps_src);
|
|
mCcCps.SetStts(&mCcStts);
|
|
|
|
cull_box cullbox;
|
|
cullbox.min.x = l_cull_box.min.x * scale.x;
|
|
cullbox.min.y = l_cull_box.min.y * scale.y;
|
|
cullbox.min.z = l_cull_box.min.z * scale.x;
|
|
cullbox.max.x = l_cull_box.max.x * scale.x;
|
|
cullbox.max.y = l_cull_box.max.y * scale.y;
|
|
cullbox.max.z = l_cull_box.max.z * scale.x;
|
|
fopAcM_setCullSizeBox(this,
|
|
cullbox.min.x, cullbox.min.y, cullbox.min.z,
|
|
cullbox.max.x, cullbox.max.y, cullbox.max.y);
|
|
|
|
switch (getArg0()) {
|
|
case 0xFF:
|
|
case 0:
|
|
actionOffInit();
|
|
break;
|
|
case 1:
|
|
actionOff2Init();
|
|
break;
|
|
default:
|
|
JUT_ASSERT(309, FALSE);
|
|
break;
|
|
}
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
mDoMtx_stack_c::scaleM(scale.x, scale.y, scale.x);
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
if (mpBgW != NULL) {
|
|
mpBgW->Move();
|
|
mpBgW->SetLock();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int daObjGeyser_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4);
|
|
JUT_ASSERT(345, modelData != NULL);
|
|
|
|
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
if (mpModel == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mDoExt_setupStageTexture(modelData);
|
|
return 1;
|
|
}
|
|
|
|
static const int l_dzb[] = {7, 8};
|
|
|
|
int daObjGeyser_c::create1st() {
|
|
int phase_state = dComIfG_resLoad(&mPhase, l_arcName);
|
|
if (phase_state != cPhs_COMPLEATE_e) {
|
|
return phase_state;
|
|
}
|
|
|
|
phase_state = MoveBGCreate(l_arcName, l_dzb[getType()], dBgS_MoveBGProc_TypicalRotY, 0x1540, NULL);
|
|
if (phase_state == cPhs_ERROR_e) {
|
|
return phase_state;
|
|
}
|
|
|
|
if (!mIsPrmInit) {
|
|
field_0x766 = home.angle.x;
|
|
field_0x768 = home.angle.z;
|
|
home.angle.z = 0;
|
|
home.angle.x = 0;
|
|
current.angle = home.angle;
|
|
shape_angle = home.angle;
|
|
mIsPrmInit = TRUE;
|
|
}
|
|
|
|
if (!Create()) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
static const Vec l_scale[] = {
|
|
{0.7f, 1.0f, 1.0f},
|
|
{0.3f, 0.8f, 1.0f},
|
|
};
|
|
|
|
int daObjGeyser_c::Execute(Mtx** param_0) {
|
|
if (dComIfGp_event_runCheck() == 0) {
|
|
f32 range = 5000.0f;
|
|
if (fopAcM_searchPlayerDistance(this) > range) {
|
|
stopEmitterPre00();
|
|
stopEmitterSrc00Sand();
|
|
stopEmitterSrc01Smk();
|
|
stopEmitterClm00();
|
|
stopEmitterSmk01();
|
|
stopEmitterSmk02();
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
action();
|
|
|
|
if (mAction == 2 || mAction == 2) {
|
|
cXyz geyser_size;
|
|
geyser_size = l_scale[getType()];
|
|
|
|
cXyz length(0.0f, 1.0f, 0.0f);
|
|
length.y *= 500.0f * (field_0x730 * geyser_size.y);
|
|
|
|
mDoMtx_stack_c::ZXYrotS(current.angle);
|
|
mDoMtx_stack_c::multVec(&length, &length);
|
|
|
|
mCpsSrc.mStart = current.pos;
|
|
mCpsSrc.mEnd = length + current.pos;
|
|
mCpsSrc.mRadius = 100.0f * geyser_size.x;
|
|
|
|
if (!daPy_getPlayerActorClass()->checkEquipHeavyBoots()) {
|
|
mCcCps.cM3dGCps::Set(mCpsSrc);
|
|
dComIfG_Ccsp()->Set(&mCcCps);
|
|
}
|
|
|
|
movePntWind();
|
|
}
|
|
|
|
*param_0 = &mBgMtx;
|
|
return 1;
|
|
}
|
|
|
|
void daObjGeyser_c::action() {
|
|
static void (daObjGeyser_c::*l_func[])() = {
|
|
&daObjGeyser_c::actionOff,
|
|
&daObjGeyser_c::actionOnWait,
|
|
&daObjGeyser_c::actionOn,
|
|
};
|
|
|
|
static void (daObjGeyser_c::*l_func2[])() = {
|
|
&daObjGeyser_c::actionOff2,
|
|
&daObjGeyser_c::actionOnWait2,
|
|
&daObjGeyser_c::actionOn2,
|
|
&daObjGeyser_c::actionDisappear,
|
|
};
|
|
|
|
switch (getArg0()) {
|
|
case 0xFF:
|
|
case 0:
|
|
(this->*l_func[mAction])();
|
|
break;
|
|
case 1:
|
|
(this->*l_func2[mAction])();
|
|
break;
|
|
default:
|
|
JUT_ASSERT(309, FALSE);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::actionOff2Init() {
|
|
mAction = 0;
|
|
}
|
|
|
|
void daObjGeyser_c::actionOff2() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
if (getType() == 0) {
|
|
f32 range = 1000.0f;
|
|
if (fopAcM_searchPlayerDistance(this) < range) {
|
|
actionOnWait2Init();
|
|
}
|
|
} else {
|
|
f32 temp_f30 = 1200.0f;
|
|
f32 temp_f29 = 1200.0f;
|
|
cXyz start(0.0f, 0.0f, -50.0f);
|
|
cXyz end(0.0f, 0.0f, temp_f30);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&end, &end);
|
|
mDoMtx_stack_c::multVec(&start, &start);
|
|
|
|
cM3dGLin line;
|
|
line.SetStartEnd(start, end);
|
|
|
|
Vec spC;
|
|
f32 sp8;
|
|
bool temp_r3 = cM3d_Len3dSqPntAndSegLine(&line, &player->current.pos, &spC, &sp8);
|
|
if (temp_r3 && std::sqrt(sp8) < temp_f29) {
|
|
actionOnWait2Init();
|
|
}
|
|
}
|
|
|
|
cLib_chaseF(&field_0x730, 0.0f, 0.1f * scale.y);
|
|
}
|
|
|
|
void daObjGeyser_c::actionOnWait2Init() {
|
|
setEmitterPre00();
|
|
setEmitterSrc00Sand();
|
|
setEmitterSrc01Smk();
|
|
mAction = 1;
|
|
}
|
|
|
|
void daObjGeyser_c::actionOnWait2() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
if (getType() == 0) {
|
|
f32 on_range = 500.0f;
|
|
f32 off_range = 1000.0f;
|
|
|
|
f32 pl_dist = fopAcM_searchPlayerDistance(this);
|
|
if (pl_dist < on_range) {
|
|
stopEmitterPre00();
|
|
actionOn2Init();
|
|
} else if (pl_dist > off_range) {
|
|
stopEmitterPre00();
|
|
stopEmitterSrc00Sand();
|
|
stopEmitterSrc01Smk();
|
|
actionOff2Init();
|
|
}
|
|
} else {
|
|
f32 temp_f28 = 1200.0f;
|
|
f32 temp_f27 = 600.0f;
|
|
f32 temp_f26 = 1200.0f;
|
|
cXyz start(0.0f, 0.0f, -50.0f);
|
|
cXyz end(0.0f, 0.0f, temp_f28);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&end, &end);
|
|
mDoMtx_stack_c::multVec(&start, &start);
|
|
|
|
cM3dGLin line;
|
|
line.SetStartEnd(start, end);
|
|
|
|
Vec spC;
|
|
f32 sp8;
|
|
bool temp_r28 = cM3d_Len3dSqPntAndSegLine(&line, &player->current.pos, &spC, &sp8);
|
|
if (temp_r28 && std::sqrt(sp8) < temp_f27) {
|
|
stopEmitterPre00();
|
|
actionOn2Init();
|
|
} else if (!temp_r28 || std::sqrt(sp8) > temp_f26) {
|
|
stopEmitterPre00();
|
|
stopEmitterSrc00Sand();
|
|
stopEmitterSrc01Smk();
|
|
actionOff2Init();
|
|
}
|
|
}
|
|
|
|
cLib_chaseF(&field_0x730, 0.0f, 0.1f * scale.y);
|
|
fopAcM_seStartLevel(this, Z2SE_OBJ_GEYSER_LOW, 0);
|
|
}
|
|
|
|
void daObjGeyser_c::actionOn2Init() {
|
|
setEmitterClm00();
|
|
setEmitterSmk01();
|
|
setEmitterSmk02();
|
|
setPntWind();
|
|
mAction = 2;
|
|
}
|
|
|
|
void daObjGeyser_c::actionOn2() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
if (getType() == 0) {
|
|
f32 temp_f30 = 500.0f;
|
|
f32 temp_f29 = 1000.0f;
|
|
|
|
f32 pl_dist = fopAcM_searchPlayerDistance(this);
|
|
if (pl_dist > temp_f29) {
|
|
cutPntWind();
|
|
actionDisappearInit(0);
|
|
} else if (pl_dist > temp_f30) {
|
|
cutPntWind();
|
|
actionDisappearInit(1);
|
|
}
|
|
} else {
|
|
f32 temp_f27 = 1200.0f;
|
|
f32 temp_f26 = 600.0f;
|
|
f32 temp_f31 = 1200.0f;
|
|
cXyz start(0.0f, 0.0f, -50.0f);
|
|
cXyz end(0.0f, 0.0f, temp_f27);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&end, &end);
|
|
mDoMtx_stack_c::multVec(&start, &start);
|
|
|
|
cM3dGLin line;
|
|
line.SetStartEnd(start, end);
|
|
|
|
Vec spC;
|
|
f32 sp8;
|
|
bool temp_r28 = cM3d_Len3dSqPntAndSegLine(&line, &player->current.pos, &spC, &sp8);
|
|
if (!temp_r28 || std::sqrt(sp8) > temp_f31) {
|
|
cutPntWind();
|
|
actionDisappearInit(0);
|
|
} else if (temp_r28 && std::sqrt(sp8) < temp_f31 && std::sqrt(sp8) > temp_f26) {
|
|
cutPntWind();
|
|
actionDisappearInit(1);
|
|
}
|
|
}
|
|
|
|
cLib_chaseF(&field_0x730, scale.y, 0.05f * scale.y);
|
|
fopAcM_seStartLevel(this, Z2SE_OBJ_GEYSER_HIGH, 0);
|
|
}
|
|
|
|
void daObjGeyser_c::actionDisappearInit(u8 param_0) {
|
|
field_0x784 = 0xFF;
|
|
field_0x760 = 10;
|
|
field_0x763 = param_0;
|
|
mAction = 3;
|
|
}
|
|
|
|
void daObjGeyser_c::actionDisappear() {
|
|
if (field_0x760 == 0) {
|
|
stopEmitterClm00();
|
|
|
|
if (field_0x763 != 1) {
|
|
actionOff2Init();
|
|
} else {
|
|
actionOnWait2Init();
|
|
}
|
|
} else {
|
|
if (field_0x760 == 5) {
|
|
field_0x784 = 0;
|
|
stopEmitterSmk01();
|
|
stopEmitterSmk02();
|
|
|
|
if (field_0x763 != 1) {
|
|
stopEmitterSrc00Sand();
|
|
stopEmitterSrc01Smk();
|
|
}
|
|
}
|
|
field_0x760--;
|
|
}
|
|
|
|
cLib_chaseUC(&field_0x785, field_0x784, 51);
|
|
if (mpEmitterClm00 != NULL) {
|
|
mpEmitterClm00->setGlobalAlpha(field_0x785);
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::actionOffInit() {
|
|
u8 var_r31 = getArg1();
|
|
if (var_r31 == 0xFF) {
|
|
var_r31 = 10;
|
|
}
|
|
|
|
field_0x760 = var_r31 * 15;
|
|
mAction = 0;
|
|
}
|
|
|
|
void daObjGeyser_c::actionOff() {
|
|
cLib_chaseF(&field_0x730, 0.0f, 0.1f * scale.y);
|
|
|
|
if (field_0x760 == 0) {
|
|
actionOnWaitInit();
|
|
return;
|
|
}
|
|
|
|
if (getSwNo() != 0xFF) {
|
|
if (fopAcM_isSwitch(this, getSwNo())) {
|
|
field_0x760--;
|
|
}
|
|
} else {
|
|
field_0x760--;
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::actionOnWaitInit() {
|
|
u8 var_r30 = getArg2();
|
|
if (var_r30 == 0xFF) {
|
|
var_r30 = 4;
|
|
}
|
|
|
|
setEmitterPre00();
|
|
setEmitterSrc00Sand();
|
|
setEmitterSrc01Smk();
|
|
field_0x760 = var_r30 * 15;
|
|
mAction = 1;
|
|
}
|
|
|
|
void daObjGeyser_c::actionOnWait() {
|
|
if (field_0x760 == 0) {
|
|
stopEmitterPre00();
|
|
actionOnInit();
|
|
} else if (getSwNo() != 0xFF) {
|
|
if (fopAcM_isSwitch(this, getSwNo())) {
|
|
field_0x760--;
|
|
} else {
|
|
stopEmitterPre00();
|
|
stopEmitterSrc00Sand();
|
|
stopEmitterSrc01Smk();
|
|
actionOffInit();
|
|
}
|
|
} else {
|
|
field_0x760--;
|
|
}
|
|
|
|
fopAcM_seStartLevel(this, Z2SE_OBJ_GEYSER_LOW, 0);
|
|
}
|
|
|
|
void daObjGeyser_c::actionOnInit() {
|
|
u8 var_r30 = getArg3();
|
|
if (var_r30 == 0xFF) {
|
|
var_r30 = 6;
|
|
}
|
|
|
|
field_0x785 = 0xFF;
|
|
field_0x784 = 0xFF;
|
|
|
|
setEmitterClm00();
|
|
setEmitterSmk01();
|
|
setEmitterSmk02();
|
|
setPntWind();
|
|
|
|
field_0x760 = var_r30 * 15;
|
|
mAction = 2;
|
|
}
|
|
|
|
void daObjGeyser_c::actionOn() {
|
|
if (field_0x760 == 0) {
|
|
cutPntWind();
|
|
stopEmitterClm00();
|
|
actionOffInit();
|
|
} else {
|
|
if (field_0x760 == 5) {
|
|
field_0x784 = 0;
|
|
stopEmitterSmk01();
|
|
stopEmitterSmk02();
|
|
stopEmitterSrc00Sand();
|
|
stopEmitterSrc01Smk();
|
|
}
|
|
|
|
if (getSwNo() != 0xFF) {
|
|
if (fopAcM_isSwitch(this, getSwNo())) {
|
|
field_0x760--;
|
|
} else {
|
|
field_0x760 = 0;
|
|
}
|
|
} else {
|
|
field_0x760--;
|
|
}
|
|
}
|
|
|
|
cLib_chaseUC(&field_0x785, field_0x784, 51);
|
|
if (mpEmitterClm00 != NULL) {
|
|
mpEmitterClm00->setGlobalAlpha(field_0x785);
|
|
}
|
|
|
|
cLib_chaseF(&field_0x730, scale.y, 0.05f * scale.y);
|
|
fopAcM_seStartLevel(this, Z2SE_OBJ_GEYSER_HIGH, 0);
|
|
}
|
|
|
|
void daObjGeyser_c::setPntWind() {
|
|
cXyz direction(0.0f, 1.0f, 0.0f);
|
|
mDoMtx_stack_c::ZXYrotS(current.angle);
|
|
mDoMtx_stack_c::multVec(&direction, &direction);
|
|
|
|
mWind.position = current.pos;
|
|
mWind.mDirection.x = direction.x;
|
|
mWind.mDirection.y = direction.y;
|
|
mWind.mDirection.z = direction.z;
|
|
mWind.mRadius = 100.0f;
|
|
mWind.field_0x20 = 0.0f;
|
|
mWind.mStrength = 0.2f;
|
|
|
|
dKyw_pntwind_set(&mWind);
|
|
}
|
|
|
|
void daObjGeyser_c::cutPntWind() {
|
|
dKyw_pntwind_cut(&mWind);
|
|
}
|
|
|
|
void daObjGeyser_c::movePntWind() {
|
|
cXyz start;
|
|
cXyz end;
|
|
cXyz direction;
|
|
|
|
start = mCpsSrc.mStart;
|
|
end = mCpsSrc.mEnd;
|
|
dKyr_get_vectle_calc(&start, &end, &direction);
|
|
|
|
mWind.mDirection = direction;
|
|
mWind.mRadius = 2.0f * mCpsSrc.mRadius;
|
|
mWind.field_0x20 = 0.0f;
|
|
|
|
cLib_addCalc(&mWind.position.x, mCpsSrc.mEnd.x, 0.1f, mWind.mRadius, 0.5f * mWind.mRadius);
|
|
cLib_addCalc(&mWind.position.y, mCpsSrc.mEnd.y, 0.1f, mWind.mRadius, 0.5f * mWind.mRadius);
|
|
cLib_addCalc(&mWind.position.z, mCpsSrc.mEnd.z, 0.1f, mWind.mRadius, 0.5f * mWind.mRadius);
|
|
|
|
if (mWind.position.abs(mCpsSrc.mEnd) < mWind.mRadius) {
|
|
mWind.position = mCpsSrc.mStart;
|
|
}
|
|
}
|
|
|
|
int daObjGeyser_c::Draw() {
|
|
g_env_light.settingTevStruct(16, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
|
|
|
|
dComIfGd_setListBG();
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
dComIfGd_setList();
|
|
|
|
return 1;
|
|
}
|
|
|
|
void daObjGeyser_c::setEmitterPre00() {
|
|
mParticleScale.set(scale.x, scale.y, scale.z);
|
|
|
|
mpEmitterPre00 = dComIfGp_particle_set(dPa_RM(ID_ZF_S_GEYSERPRE00), ¤t.pos, ¤t.angle, &mParticleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
|
if (mpEmitterPre00 == NULL) {
|
|
// "Geyser: Pre state Effect set failure ID_ZF_S_GEYSERPRE00\n"
|
|
OS_REPORT("\x1B[43;30m間欠泉:予兆状態エフェクトセット失敗 ID_ZF_S_GEYSERPRE00\n\x1B[m");
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::setEmitterSrc00Sand() {}
|
|
|
|
void daObjGeyser_c::setEmitterSrc01Smk() {
|
|
mParticleScale.set(scale.x, scale.y, scale.z);
|
|
|
|
if (mpEmitterSrc01Smk == NULL) {
|
|
mpEmitterSrc01Smk = dComIfGp_particle_set(dPa_RM(ID_ZF_S_GEYSERSRC01SMK), ¤t.pos, ¤t.angle, &mParticleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
|
}
|
|
|
|
if (mpEmitterSrc01Smk == NULL) {
|
|
// "Geyser: Pre state Effect set failure ID_ZF_S_GEYSERSRC01SMK\n"
|
|
OS_REPORT("\x1B[43;30m間欠泉:予兆状態エフェクトセット失敗 ID_ZF_S_GEYSERSRC01SMK\n\x1B[m");
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::stopEmitterPre00() {
|
|
if (mpEmitterPre00 != NULL) {
|
|
mpEmitterPre00->becomeInvalidEmitter();
|
|
mpEmitterPre00 = NULL;
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::stopEmitterSrc00Sand() {
|
|
if (mpEmitterSrc00Sand != NULL) {
|
|
mpEmitterSrc00Sand->becomeInvalidEmitter();
|
|
mpEmitterSrc00Sand = NULL;
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::stopEmitterSrc01Smk() {
|
|
if (mpEmitterSrc01Smk != NULL) {
|
|
mpEmitterSrc01Smk->becomeInvalidEmitter();
|
|
mpEmitterSrc01Smk = NULL;
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::setEmitterClm00() {
|
|
mParticleScale.set(scale.x, scale.y, scale.z);
|
|
|
|
mpEmitterClm00 = dComIfGp_particle_set(dPa_RM(ID_ZF_S_GEYSER00CLM), ¤t.pos, ¤t.angle, &mParticleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
|
if (mpEmitterClm00 == NULL) {
|
|
// "Geyser: Effect set failure ID_ZF_S_GEYSER00CLM\n"
|
|
OS_REPORT("\x1B[43;30m間欠泉:エフェクトセット失敗 ID_ZF_S_GEYSER00CLM\n\x1B[m");
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::setEmitterSmk01() {
|
|
mParticleScale.set(scale.x, scale.y, scale.z);
|
|
|
|
mpEmitterSmk01 = dComIfGp_particle_set(dPa_RM(ID_ZF_S_GEYSER01SMK), ¤t.pos, ¤t.angle, &mParticleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
|
if (mpEmitterSmk01 == NULL) {
|
|
// "Geyser: Effect set failure ID_ZF_S_GEYSER01SMK\n"
|
|
OS_REPORT("\x1B[43;30m間欠泉:エフェクトセット失敗 ID_ZF_S_GEYSER01SMK\n\x1B[m");
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::setEmitterSmk02() {
|
|
mParticleScale.set(scale.x, scale.y, scale.z);
|
|
|
|
mpEmitterSmk02 = dComIfGp_particle_set(dPa_RM(ID_ZF_S_GEYSER02SMK), ¤t.pos, ¤t.angle, &mParticleScale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
|
if (mpEmitterSmk02 == NULL) {
|
|
// "Geyser: Effect set failure ID_ZF_S_GEYSER02SMK\n"
|
|
OS_REPORT("\x1B[43;30m間欠泉:エフェクトセット失敗 ID_ZF_S_GEYSER02SMK\n\x1B[m");
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::stopEmitterClm00() {
|
|
if (mpEmitterClm00 != NULL) {
|
|
mpEmitterClm00->becomeInvalidEmitter();
|
|
mpEmitterClm00 = NULL;
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::stopEmitterSmk01() {
|
|
if (mpEmitterSmk01 != NULL) {
|
|
mpEmitterSmk01->becomeInvalidEmitter();
|
|
mpEmitterSmk01 = NULL;
|
|
}
|
|
}
|
|
|
|
void daObjGeyser_c::stopEmitterSmk02() {
|
|
if (mpEmitterSmk02 != NULL) {
|
|
mpEmitterSmk02->becomeInvalidEmitter();
|
|
mpEmitterSmk02 = NULL;
|
|
}
|
|
}
|
|
|
|
int daObjGeyser_c::Delete() {
|
|
stopEmitterPre00();
|
|
stopEmitterSrc00Sand();
|
|
stopEmitterSrc01Smk();
|
|
stopEmitterClm00();
|
|
stopEmitterSmk01();
|
|
stopEmitterSmk02();
|
|
|
|
cutPntWind();
|
|
dComIfG_resDelete(&mPhase, l_arcName);
|
|
return 1;
|
|
}
|
|
|
|
static int daObjGeyser_create1st(daObjGeyser_c* i_this) {
|
|
fopAcM_ct(i_this, daObjGeyser_c);
|
|
return i_this->create1st();
|
|
}
|
|
|
|
static int daObjGeyser_MoveBGDelete(daObjGeyser_c* i_this) {
|
|
return i_this->MoveBGDelete();
|
|
}
|
|
|
|
static int daObjGeyser_MoveBGExecute(daObjGeyser_c* i_this) {
|
|
return i_this->MoveBGExecute();
|
|
}
|
|
|
|
static int daObjGeyser_MoveBGDraw(daObjGeyser_c* i_this) {
|
|
return i_this->MoveBGDraw();
|
|
}
|
|
|
|
static actor_method_class daObjGeyser_METHODS = {
|
|
(process_method_func)daObjGeyser_create1st,
|
|
(process_method_func)daObjGeyser_MoveBGDelete,
|
|
(process_method_func)daObjGeyser_MoveBGExecute,
|
|
0,
|
|
(process_method_func)daObjGeyser_MoveBGDraw,
|
|
};
|
|
|
|
extern actor_process_profile_definition g_profile_Obj_Geyser = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
7, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_Obj_Geyser, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daObjGeyser_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
596, // mPriority
|
|
&daObjGeyser_METHODS, // sub_method
|
|
0x00040100, // mStatus
|
|
fopAc_ACTOR_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|