Add plugin receive loop & remote player state
Add a networking receive loop and in-plugin remote-player storage. Introduces F4TRemotePlayerState (header + implementation) to track assigned playerId and remote player snapshots with thread-safe access. Expands F4TNetworking to start/stop a background receive thread, parse newline-separated JSON packets (welcome, transform, disconnect), validate fields, update remote state, throttle logs, and handle socket/thread synchronization. Add nlohmann_json to xmake and plugin build. Update docs and dev log to reflect the new receive behavior and current prototype scope.
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace F4T::RemotePlayerState
|
||||
{
|
||||
struct RemotePlayerState
|
||||
{
|
||||
std::uint32_t playerId{};
|
||||
float x{};
|
||||
float y{};
|
||||
float z{};
|
||||
float angleZ{};
|
||||
std::string movementType;
|
||||
std::string cellId;
|
||||
std::string worldspaceId;
|
||||
std::optional<double> clientTime;
|
||||
std::optional<double> serverTime;
|
||||
std::chrono::steady_clock::time_point lastReceivedLocalTime{};
|
||||
};
|
||||
|
||||
void SetAssignedPlayerId(std::uint32_t a_playerId);
|
||||
std::optional<std::uint32_t> GetAssignedPlayerId();
|
||||
bool IsAssignedPlayerId(std::uint32_t a_playerId);
|
||||
void ClearAssignedPlayerId();
|
||||
|
||||
void UpdateRemotePlayer(RemotePlayerState a_state);
|
||||
bool RemoveRemotePlayer(std::uint32_t a_playerId);
|
||||
void ClearRemotePlayers();
|
||||
std::vector<RemotePlayerState> GetRemotePlayerSnapshot();
|
||||
}
|
||||
Reference in New Issue
Block a user