#define NENT_DEPRECATED
#include "entity.h"
#include "functions.h"
#include "object.h"

typedef struct {
    Entity base;
    u8 filler[0x8];
    u16 unk70;
} FloatingPlatformEntity;

void sub_080860D8(FloatingPlatformEntity*);
void sub_0808611C(FloatingPlatformEntity*);
bool32 sub_08086168(FloatingPlatformEntity*);

void FloatingPlatform(Entity* this) {
    static void (*const actionFuncs[])(FloatingPlatformEntity*) = {
        sub_080860D8,
        sub_0808611C,
    };

    actionFuncs[this->action]((FloatingPlatformEntity*)this);
}

void sub_080860D8(FloatingPlatformEntity* this) {
    super->action = 1;
    super->speed = 0x100;
    super->spriteSettings.draw = 1;
    super->frameIndex = super->type;
    super->spritePriority.b0 = 7;
    super->child = (Entity*)GetCurrentRoomProperty(super->type2);
    sub_080A2CC0(super, (u16**)&super->child, &this->unk70);
}

void sub_0808611C(FloatingPlatformEntity* this) {
    int iVar2;

    iVar2 = sub_08086168(this);
    if (super->actionDelay != 0 && super->parent->actionDelay == 0) {

        if (iVar2 != 0) {
            super->parent->actionDelay++;
        }

        sub_080A2BE4(super, iVar2);
    } else if (super->actionDelay == 0) {
        sub_080A2BE4(super, iVar2);
    } else {
        sub_080A2BE4(super, 0);
    }

    if (--this->unk70 == 0) {
        sub_080A2CC0(super, (u16**)&super->child, &this->unk70);
    }
}

bool32 sub_08086168(FloatingPlatformEntity* this) {
    static const u8 gUnk_08120658[] = { 0x12, 0xa, 0xa, 0x12, 0x12, 0x12, 0x1a, 0x1a };
    const u8* ptr;

    ptr = gUnk_08120658 + super->type * 2;
    if (((EntityInRectRadius(super, &gPlayerEntity, ptr[0], ptr[1])) && sub_08079F8C())) {
        gPlayerState.field_0x14 = 1;
        if (gPlayerEntity.z.HALF.HI == 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    } else {
        return FALSE;
    }
}
