summaryrefslogtreecommitdiff
path: root/src/manager/cloudStaircaseTransitionManager.c
blob: 3926f1eda2b5dcf00ce3c45b3b7d3b5fb1bb7777 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
 * @file cloudStaircaseTransitionManager.c
 * @ingroup Managers
 *
 * @brief Manages the transition on top of a cloud staircase.
 */
#include "manager/cloudStaircaseTransitionManager.h"
#include "asm.h"
#include "common.h"
#include "room.h"
#include "player.h"

void CloudStaircaseTransitionManager_Main(CloudStaircaseTransitionManager* this) {
    if (super->action == 0) {
        super->action = 1;
        this->y = 0;
    }
    if (((CheckPlayerInRegion(this->x, this->y, 0x14, 0x40) != 0) &&
         (((gPlayerEntity.base.y.HALF.HI - gRoomControls.origin_y) + gPlayerEntity.base.z.HALF.HI) < 0)) &&
        (gRoomControls.scroll_y == gRoomControls.origin_y)) {
        MemClear(&gRoomTransition.player_status, sizeof(PlayerRoomStatus));
        gRoomTransition.transitioningOut = 1;
        gRoomTransition.type = TRANSITION_DEFAULT;
        gRoomTransition.player_status.spawn_type = PL_SPAWN_PARACHUTE_UP;
        gRoomTransition.player_status.area_next = super->type2;
        gRoomTransition.player_status.room_next = super->timer;
        gRoomTransition.player_status.start_anim = this->field_0x37;
        gRoomTransition.player_status.start_pos_x = this->field_0x3c;
        gRoomTransition.player_status.start_pos_y = this->field_0x3e;
        gRoomTransition.player_status.layer = this->field_0x36;
    }
}