#pragma once

#include "global.h"
#include "types.h"

#include "Item/Item.hpp"
#include "Physics/Cylinder.hpp"
#include "System/SysNew.hpp"

class EquipItem : public SysObject {
public:
    /* 0 (vtable) */
    /* 4 */ s16 mUnk_04;
    /* 6 */ u16 mUnk_06;
    /* 8 */ bool mInUse;
    /* 9 */

    EquipItem();

    /* 00 */ virtual void vfunc_00();
    /* 04 */ virtual ~EquipItem();
    /* 0c */ virtual ItemFlag GetId() const = 0;
    /* 10 */ virtual void vfunc_10();
    /* 14 */ virtual bool IsUsable(unk32 param1) const;
    /* 18 */ virtual void vfunc_18() = 0;
    /* 1c */ virtual void vfunc_1c();
    /* 20 */ virtual void GiveAmmo(u32 amount);
    /* 24 */ virtual bool IsInUse() const;
    /* 28 */ virtual bool UpdateInUse(unk32 param1);
    /* 2c */ virtual u32 vfunc_2c();
    /* 30 */ virtual void vfunc_30() = 0;
    /* 34 */ virtual void vfunc_34(unk16 *param1);
    /* 38 */ virtual void vfunc_38(unk32 param1) = 0;
    /* 3c */ virtual bool GetHitbox(Cylinder *hitbox) const;
    /* 40 */ virtual unk32 vfunc_40() const;
    /* 44 */ virtual unk32 vfunc_44(unk32 param1) const;
    /* 48 */ virtual unk32 vfunc_48(unk32 param1) const;
    /* 4c */ virtual s32 vfunc_4c() const;
    /* 50 */

    Vec3p *GetPlayerPos();
    void func_ov000_020be99c(Vec3p *param1);
    void func_ov000_020be9e4(Vec3p param3, s16 param4);
    s16 GetAmmo() const;
};
