#pragma once #include #include #include #include namespace blitz { class World; class PlayerController; 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); godot::Vector3 GetPosition() const; void SetPosition(const godot::Vector3& a_Position); godot::Vector3 GetVelocity() const; void SetVelocity(const godot::Vector3& a_Velocity); 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; void SetModelVisible(bool visible); void UpdateAnimation(float delta); void BlendAnimation(const godot::String& a_AnimationName, float a_Goal, float a_Delta); friend class World; friend class PlayerController; }; } // namespace blitz