#pragma once #include #include namespace blitz { class Player; class NetworkInterface; class World : public godot::Node3D, public protocol::PacketHandler { GDCLASS(World, godot::Node3D) protected: static void _bind_methods(); World(); ~World(); public: // Godot overrides void _ready() override; Player* GetPlayerById(PlayerID a_PlayerId); void HandlePacket(const protocol::packets::PlayerJoin&) override; void HandlePacket(const protocol::packets::PlayerLeave&) override; protected: NetworkInterface* m_NetworkInterface; godot::Node* m_Players; float m_PassedTime; virtual void AddPlayer(PlayerID a_PlayerId, godot::String a_PlayerName); virtual void RemovePlayer(PlayerID a_PlayerId); virtual void SetPlayerPositionAndRotation( PlayerID a_PlayerId, const godot::Vector3& a_Position, const godot::Vector3& a_Rotation, const godot::Vector3& a_Velocity); }; } // namespace blitz