#ifndef D_A_OBJ_NAMEPLATE_H
#define D_A_OBJ_NAMEPLATE_H

#include "d/d_cc_d.h"
#include "d/d_com_inf_game.h"
#include "d/d_msg_flow.h"

/**
 * @ingroup actors-objects
 * @class daObjNameplate_c
 * @brief Ordon Village Nameplate
 *
 * @details
 *
 */
class daObjNameplate_c : public fopAc_ac_c {
public:
    void create_init();
    void initBaseMtx();
    void setBaseMtx();
    void initCcSphere();
    void setCcSphere();
    void calcAngle();
    void calcSpring();
    int checkHitAngle();
    void messageProc();

    struct M_attrs {
        /* 0x00 */ f32 radius1;
        /* 0x04 */ f32 field_0x04;
        /* 0x08 */ f32 field_0x08;
        /* 0x0C */ f32 field_0x0C;
        /* 0x10 */ f32 field_0x10;
        /* 0x14 */ f32 field_0x14;
        /* 0x18 */ s16 field_0x18;
        /* 0x1A */ s16 field_0x1A;
        /* 0x1C */ s16 field_0x1C;
        // unknown types
        /* 0x1E */ u8 field_0x1E;
        /* 0x1F */ u8 field_0x1F;
    };

    static M_attrs const M_attr;
    static M_attrs const& attr() { return M_attr; }

    static char DUSK_CONST* DUSK_CONST l_arcName;

    ~daObjNameplate_c() { dComIfG_resDelete(&this->mPhase, l_arcName); }

    inline int create();
    inline int draw();
    inline int createHeap();

private:
    /* 0x568 */ J3DModel* model;
    /* 0x56C */ request_of_phase_process_class mPhase;
    /* 0x574 */ Mtx mMtx;
    /* 0x5A4 */ dCcD_Stts mCcDStts;
    /* 0x5E0 */ dCcD_Sph mCcDSph;
    /* 0x718 */ f32 field_0x718;
    /* 0x71C */ f32 field_0x71C;
    /* 0x720 */ s16 field_0x720;
    /* 0x722 */ s16 field_0x722;
    /* 0x724 */ s16 field_0x724;
    /* 0x726 */ u16 field_0x726;
    /* 0x728 */ dMsgFlow_c mMsgFlow;
    /* 0x774 */ s16 mShowMessage;
    /* 0x776 */ s16 mMessageFlowId;
    /* 0x778 */ s16 field_0x778;
    /* 0x77A */ s16 field_0x77A;
    /* 0x77C */ s16 field_0x77C;
    /* 0x77E */ s16 field_0x77E;
};

STATIC_ASSERT(sizeof(daObjNameplate_c) == 0x780);

#endif /* D_A_OBJ_NAMEPLATE_H */
