#ifndef _Z_BG_HAKA_TRAP_H_
#define _Z_BG_HAKA_TRAP_H_

#include "ultra64.h"
#include "global.h"

typedef enum {
    /* 0x00 */ HAKA_TRAP_GUILLOTINE_SLOW,
    /* 0x01 */ HAKA_TRAP_SPIKED_BOX,
    /* 0x02 */ HAKA_TRAP_SPIKED_WALL,
    /* 0x03 */ HAKA_TRAP_SPIKED_WALL_2,
    /* 0x04 */ HAKA_TRAP_PROPELLER,
    /* 0x05 */ HAKA_TRAP_GUILLOTINE_FAST,
} HakaTrapType;

struct BgHakaTrap;

typedef void (*BgHakaTrapActionFunc)(struct BgHakaTrap*, GlobalContext*);

typedef struct BgHakaTrap {
    /* 0x0000 */ DynaPolyActor dyna;
    /* 0x0164 */ BgHakaTrapActionFunc actionFunc;
    /* 0x0168 */ u8 timer;
    /* 0x0169 */ u8 unk_169;
    /* 0x016A */ s16 unk_16A; // used as boolean for HAKA_TRAP_GUILLOTINE_SLOW/FAST, s16 for HAKA_TRAP_SPIKED_BOX
    /* 0x016C */ Vec3f unk_16C;
    /* 0x0178 */ ColliderCylinder colliderCylinder;
    /* 0x01C4 */ ColliderTris colliderSpikes;
    /* 0x01E4 */ ColliderTrisItem colliderSpikesItem[2];
} BgHakaTrap; // size = 0x029C

extern const ActorInit Bg_Haka_Trap_InitVars;

#endif
