mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-08-13 17:03:47 -04:00
39cc86c260
subrepo: subdir: "soh" merged: "ba904bbd0" upstream: origin: "https://github.com/HarbourMasters/soh.git" branch: "master" commit: "ba904bbd0" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
130 lines
4.3 KiB
C
130 lines
4.3 KiB
C
/*
|
|
* File: z_bg_jya_amishutter.c
|
|
* Overlay: Bg_Jya_Amishutter
|
|
* Description: Circular metal grate. Lifts up when you get close to it.
|
|
*/
|
|
|
|
#include "z_bg_jya_amishutter.h"
|
|
#include "objects/object_jya_obj/object_jya_obj.h"
|
|
|
|
#define FLAGS 0
|
|
|
|
void BgJyaAmishutter_Init(Actor* thisx, GlobalContext* globalCtx);
|
|
void BgJyaAmishutter_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
|
void BgJyaAmishutter_Update(Actor* thisx, GlobalContext* globalCtx);
|
|
void BgJyaAmishutter_Draw(Actor* thisx, GlobalContext* globalCtx);
|
|
|
|
void BgJyaAmishutter_SetupWaitForPlayer(BgJyaAmishutter* this);
|
|
void BgJyaAmishutter_WaitForPlayer(BgJyaAmishutter* this);
|
|
void func_80893428(BgJyaAmishutter* this);
|
|
void func_80893438(BgJyaAmishutter* this);
|
|
void func_808934B0(BgJyaAmishutter* this);
|
|
void func_808934C0(BgJyaAmishutter* this);
|
|
void func_808934FC(BgJyaAmishutter* this);
|
|
void func_8089350C(BgJyaAmishutter* this);
|
|
|
|
const ActorInit Bg_Jya_Amishutter_InitVars = {
|
|
ACTOR_BG_JYA_AMISHUTTER,
|
|
ACTORCAT_BG,
|
|
FLAGS,
|
|
OBJECT_JYA_OBJ,
|
|
sizeof(BgJyaAmishutter),
|
|
(ActorFunc)BgJyaAmishutter_Init,
|
|
(ActorFunc)BgJyaAmishutter_Destroy,
|
|
(ActorFunc)BgJyaAmishutter_Update,
|
|
(ActorFunc)BgJyaAmishutter_Draw,
|
|
NULL,
|
|
};
|
|
|
|
static InitChainEntry sInitChain[] = {
|
|
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
|
|
ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
|
|
ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
|
|
ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
|
|
};
|
|
|
|
void BgJyaAmishutter_InitDynaPoly(BgJyaAmishutter* this, GlobalContext* globalCtx, CollisionHeader* collision,
|
|
s32 flag) {
|
|
s32 pad1;
|
|
CollisionHeader* colHeader = NULL;
|
|
s32 pad2;
|
|
|
|
DynaPolyActor_Init(&this->dyna, flag);
|
|
CollisionHeader_GetVirtual(collision, &colHeader);
|
|
this->dyna.bgId = DynaPoly_SetBgActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, colHeader);
|
|
if (this->dyna.bgId == BG_ACTOR_MAX) {
|
|
osSyncPrintf("Warning : move BG 登録失敗(%s %d)(name %d)(arg_data 0x%04x)\n", "../z_bg_jya_amishutter.c", 129,
|
|
this->dyna.actor.id, this->dyna.actor.params);
|
|
}
|
|
}
|
|
|
|
void BgJyaAmishutter_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|
BgJyaAmishutter* this = (BgJyaAmishutter*)thisx;
|
|
|
|
BgJyaAmishutter_InitDynaPoly(this, globalCtx, &gAmishutterCol, DPM_UNK);
|
|
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
|
BgJyaAmishutter_SetupWaitForPlayer(this);
|
|
}
|
|
|
|
void BgJyaAmishutter_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
|
BgJyaAmishutter* this = (BgJyaAmishutter*)thisx;
|
|
|
|
DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
|
|
}
|
|
|
|
void BgJyaAmishutter_SetupWaitForPlayer(BgJyaAmishutter* this) {
|
|
this->actionFunc = BgJyaAmishutter_WaitForPlayer;
|
|
}
|
|
|
|
void BgJyaAmishutter_WaitForPlayer(BgJyaAmishutter* this) {
|
|
if ((this->dyna.actor.xzDistToPlayer < 60.0f) && (fabsf(this->dyna.actor.yDistToPlayer) < 30.0f)) {
|
|
func_80893428(this);
|
|
}
|
|
}
|
|
|
|
void func_80893428(BgJyaAmishutter* this) {
|
|
this->actionFunc = func_80893438;
|
|
}
|
|
|
|
void func_80893438(BgJyaAmishutter* this) {
|
|
if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 100.0f, 3.0f)) {
|
|
func_808934B0(this);
|
|
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_METALDOOR_STOP);
|
|
} else {
|
|
func_8002F974(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG);
|
|
}
|
|
}
|
|
|
|
void func_808934B0(BgJyaAmishutter* this) {
|
|
this->actionFunc = func_808934C0;
|
|
}
|
|
|
|
void func_808934C0(BgJyaAmishutter* this) {
|
|
if (this->dyna.actor.xzDistToPlayer > 300.0f) {
|
|
func_808934FC(this);
|
|
}
|
|
}
|
|
|
|
void func_808934FC(BgJyaAmishutter* this) {
|
|
this->actionFunc = func_8089350C;
|
|
}
|
|
|
|
void func_8089350C(BgJyaAmishutter* this) {
|
|
if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, 3.0f)) {
|
|
BgJyaAmishutter_SetupWaitForPlayer(this);
|
|
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_METALDOOR_STOP);
|
|
} else {
|
|
func_8002F974(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG);
|
|
}
|
|
}
|
|
|
|
void BgJyaAmishutter_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|
BgJyaAmishutter* this = (BgJyaAmishutter*)thisx;
|
|
|
|
this->actionFunc(this);
|
|
}
|
|
|
|
void BgJyaAmishutter_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|
Gfx_DrawDListOpa(globalCtx, gAmishutterDL);
|
|
}
|