#pragma once

#include <godot_cpp/classes/animation_tree.hpp>
#include <godot_cpp/classes/character_body3d.hpp>
#include <godot_cpp/classes/node3d.hpp>
#include <blitz/common/Types.h>

namespace blitz {

class World;

class Player : public godot::CharacterBody3D {

	GDCLASS(Player, godot::CharacterBody3D);

  protected:
	static void _bind_methods();

  public:
	Player();
	~Player();

	void _ready() override;
	virtual void _physics_process(float delta);
	void animate(float delta);

	godot::Vector3 GetCameraRotation() const;
	void SetCameraRotation(const godot::Vector3& a_Rotation);

	PlayerID GetId() const {
		return m_PeerId;
	}

  protected:
	godot::Node3D* m_Mesh;
	godot::AnimationTree* m_AnimationTree;

	godot::Vector3 m_SnapVector;
	PeerID m_PeerId;

	friend class World;
};
}  // namespace blitz
