#pragma once

#include <math/seadVector.h>

#include "Library/Camera/CameraTargetBase.h"

namespace al {
class LiveActor;

class ActorCameraTarget : public CameraTargetBase {
public:
    ActorCameraTarget(const LiveActor* actor, f32 yOffset, const sead::Vector3f* localOffset);

    const char* getTargetName() const override;
    void calcTrans(sead::Vector3f* trans) const override;
    void calcSide(sead::Vector3f* side) const override;
    void calcUp(sead::Vector3f* up) const override;
    void calcFront(sead::Vector3f* front) const override;
    void calcGravity(sead::Vector3f* gravity) const override;
    void calcVelocity(sead::Vector3f* velocity) const override;
    bool isCollideGround() const override;
    bool isInWater() const override;

    const LiveActor* getActor() const { return mActor; }

private:
    const LiveActor* mActor;
    const sead::Vector3f* mLocalOffset;
    f32 mYOffset;
};

static_assert(sizeof(ActorCameraTarget) == 0x28);

}  // namespace al
