#ifndef D_A_OBJ_TOMBO_H
#define D_A_OBJ_TOMBO_H

#include "JSystem/JHostIO/JORReflexible.h"
#include "d/actor/d_a_player.h"
#include "d/d_cc_d.h"
#include "d/d_insect.h"

/**
 * @ingroup actors-objects
 * @class daObjTOMBO_c
 * @brief Insect - Dragonfly (Tonbo)
 *
 * @details
 *
 */
class daObjTOMBO_c : public dInsect_c {
public:
    enum Action {
        ACTION_WAIT,
        ACTION_MOVE,
        ACTION_LINK,
    };

    void InitCcSph();
    void SetCcSph();
    int CreateHeap();
    void WaitAction();
    void SpeedSet();
    bool CheckWater();
    void CheckGround();
    void CheckWall();
    void SearchLink();
    void LinkAction();
    void MoveAction();
    void Action();
    void ShopAction();
    void Insect_Release();
    void ParticleSet();
    void BoomChk();
    int Execute();
    void ObjHit();
    void Z_BufferChk();
    int Delete();
    void setBaseMtx();
    bool CreateChk();
    int create();

    inline int Draw();

private:
    /* 0x590 */ dCcD_Stts mStts;
    /* 0x5CC */ dCcD_Sph mSph;
    /* 0x704 */ daPy_boomerangMove_c mBoomerangMove;
    /* 0x710 */ bool mIsHitByBoomerang;
    /* 0x711 */ u8 mAction;
    /* 0x712 */ u8 field_0x712;
    /* 0x714 */ s16 field_0x714[3];
    /* 0x71C */ f32 field_0x71c;
    /* 0x720 */ f32 field_0x720;
    /* 0x724 */ s16 field_0x724;
    /* 0x726 */ u8 field_0x726[0x73c - 0x726];
    /* 0x73C */ cXyz field_0x73c;
    /* 0x748 */ mDoExt_brkAnm* mBrk;
    /* 0x74C */ mDoExt_btkAnm* mBtk;
    /* 0x750 */ f32 field_0x750;
    /* 0x754 */ u32 field_0x754;
    /* 0x758 */ f32 mParticleScale;
    /* 0x75C */ u8 field_0x75c;
    /* 0x760 */ Z2Creature mCreature;
    /* 0x7F0 */ dBgS_AcchCir mAcchCir;
    /* 0x830 */ mDoExt_McaMorfSO* mpMorf;
    /* 0x834 */ dBgS_ObjAcch mAcch;
    /* 0xA0C */ request_of_phase_process_class mPhase;
    /* 0xA14 */ bool mIsHIOOwner;
};

STATIC_ASSERT(sizeof(daObjTOMBO_c) == 0xa18);

#endif /* D_A_OBJ_TOMBO_H */
