sm64coopdx/src/game/behaviors/sliding_platform.inc.c

71 lines
2.1 KiB
C
Raw Normal View History

2019-08-25 04:46:40 +00:00
// sliding_platform.c.inc
void bhv_wf_sliding_platform_init(void) {
o->oFaceAngleYaw -= 0x4000;
o->oPosX += 2.0f;
o->oHomeX = o->oPosX;
switch (o->oBehParams2ndByte) {
case WF_SLID_BRICK_PTFM_BP_MOV_VEL_10:
o->oWFSlidBrickPtfmMovVel = 10.0f;
break;
case WF_SLID_BRICK_PTFM_BP_MOV_VEL_15:
o->oWFSlidBrickPtfmMovVel = 15.0f;
break;
case WF_SLID_BRICK_PTFM_BP_MOV_VEL_20:
o->oWFSlidBrickPtfmMovVel = 20.0f;
break;
}
2020-04-03 18:57:26 +00:00
o->oTimer = random_float() * 100.0f;
if (o->oSyncID == 0) {
network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
network_init_object_field(o, &o->oAction);
network_init_object_field(o, &o->oMoveAngleYaw);
network_init_object_field(o, &o->oPosX);
network_init_object_field(o, &o->oForwardVel);
network_init_object_field(o, &o->oTimer);
}
2019-08-25 04:46:40 +00:00
}
void bhv_wf_sliding_platform_loop(void) {
switch (o->oAction) {
case WF_SLID_BRICK_PTFM_ACT_WAIT:
if (o->oTimer >= 101) {
o->oAction = WF_SLID_BRICK_PTFM_ACT_EXTEND;
o->oForwardVel = o->oWFSlidBrickPtfmMovVel;
}
break;
case WF_SLID_BRICK_PTFM_ACT_EXTEND:
if (o->oTimer >= 500.0f / o->oWFSlidBrickPtfmMovVel) {
o->oForwardVel = 0;
o->oPosX = o->oHomeX + 510.0f;
}
if (o->oTimer == 60) {
o->oAction = WF_SLID_BRICK_PTFM_ACT_RETRACT;
o->oForwardVel = o->oWFSlidBrickPtfmMovVel;
o->oMoveAngleYaw -= 0x8000;
}
break;
case WF_SLID_BRICK_PTFM_ACT_RETRACT:
if (o->oTimer >= 500.0f / o->oWFSlidBrickPtfmMovVel) {
o->oForwardVel = 0;
o->oPosX = o->oHomeX;
}
if (o->oTimer >= 90 && network_owns_object(o)) {
2019-08-25 04:46:40 +00:00
o->oAction = WF_SLID_BRICK_PTFM_ACT_EXTEND;
o->oForwardVel = o->oWFSlidBrickPtfmMovVel;
o->oMoveAngleYaw -= 0x8000;
network_send_object(o);
2019-08-25 04:46:40 +00:00
}
break;
}
}