#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(); public: World(); ~World(); // Godot overrides void _ready() override; void _process(float delta); Player* GetPlayerById(PlayerID a_PlayerId); void HandlePacket(const protocol::packets::PlayerJoin&) override; void HandlePacket(const protocol::packets::PlayerLeave&) override; void HandlePacket(const protocol::packets::PlayerPositionAndRotation&) override; private: NetworkInterface* m_NetworkInterface; godot::Node* m_Players; float m_PassedTime; void AddPlayer(PlayerID a_PlayerId, godot::String a_PlayerName); void RemovePlayer(PlayerID a_PlayerId); void SetPlayerPositionAndRotation(PlayerID a_PlayerId, const godot::Vector3& a_Position, const godot::Vector3& a_Rotation); }; } // namespace blitz