#ifndef D_A_E_WS_H
#define D_A_E_WS_H

#include "f_op/f_op_actor_mng.h"
#include "m_Do/m_Do_ext.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"

/**
 * @ingroup actors-enemies
 * @class daE_WS_c
 * @brief Wall Skulltula
 * 
 * @details 
 * 
 */
class daE_WS_c : public fopEn_enemy_c {
public:
    enum daE_WS_Action_e {
        ACTION_WAIT_e,
        ACTION_ATTACK_e,
        ACTION_DOWN_e,
        ACTION_WIND_DOWN_e,
    };

    int draw();
    void setBck(int, u8, f32, f32);
    void setFootSound();
    void setActionMode(int);
    f32 calcTargetDist(cXyz, cXyz);
    s16 calcTargetAngle(cXyz, cXyz);
    bool checkInSearchRange(cXyz, cXyz);
    int checkPlayerPos();
    bool checkAttackEnd();
    void executeWait();
    void executeAttack();
    void executeDown();
    void executeWindDown();
    void damage_check();
    void action();
    void mtx_set();
    void cc_set();
    int execute();
    void checkInitialWall();
    bool checkBeforeBg(s16);
    bool checkWall();
    int _delete();
    int CreateHeap();
    int create();

    /* 0x5AC */ request_of_phase_process_class mPhase;
    /* 0x5B4 */ mDoExt_McaMorfSO* mAnm_p;
    /* 0x5B8 */ Z2CreatureEnemy mSound;
    /* 0x65C */ cXyz mHomePos;
    /* 0x668 */ csXyz mTargetWallAngle;
    /* 0x66E */ csXyz mWallAngle;
    /* 0x674 */ f32 mDownColor;
    /* 0x678 */ f32 mBodyScale;
    /* 0x67C */ int mAction;
    /* 0x680 */ int mMode;
    /* 0x684 */ u32 mShadowId;
    /* 0x688 */ s16 mTargetAngle;
    /* 0x68A */ s16 mStepAngle;
    /* 0x68C */ u8 mWaitTimer;
    /* 0x68E */ s16 mInvulnerabilityTimer;
    /* 0x690 */ u8 mIsReturnHome;
    /* 0x691 */ u8 arg0;
    /* 0x692 */ u8 bitSw;
    /* 0x694 */ dBgS_AcchCir mBgc;
    /* 0x6D4 */ dBgS_ObjAcch mAcch;
    /* 0x8AC */ dCcD_Stts mCcStts;
    /* 0x8E8 */ dCcD_Sph mCcSph;
    /* 0xA20 */ dCcD_Sph mCcBokkuriSph;
    /* 0xB58 */ dCcU_AtInfo mAtInfo;
    /* 0xB7C */ u8 mHioSet;
};

STATIC_ASSERT(sizeof(daE_WS_c) == 0xb80);


#endif /* D_A_E_WS_H */
