osb/source/game/StarClientContext.cpp

100 lines
2.4 KiB
C++
Raw Normal View History

2023-06-20 04:33:09 +00:00
#include "StarClientContext.hpp"
#include "StarJsonExtra.hpp"
#include "StarDataStreamExtra.hpp"
namespace Star {
DataStream& operator>>(DataStream& ds, ShipUpgrades& upgrades) {
ds.read(upgrades.shipLevel);
ds.read(upgrades.maxFuel);
ds.read(upgrades.crewSize);
ds.read(upgrades.fuelEfficiency);
ds.read(upgrades.shipSpeed);
ds.read(upgrades.capabilities);
return ds;
}
DataStream& operator<<(DataStream& ds, ShipUpgrades const& upgrades) {
ds.write(upgrades.shipLevel);
ds.write(upgrades.maxFuel);
ds.write(upgrades.crewSize);
ds.write(upgrades.fuelEfficiency);
ds.write(upgrades.shipSpeed);
ds.write(upgrades.capabilities);
return ds;
}
2023-07-22 12:31:04 +00:00
ClientContext::ClientContext(Uuid serverUuid, Uuid playerUuid) {
2023-06-20 04:33:09 +00:00
m_serverUuid = move(serverUuid);
2023-07-22 12:31:04 +00:00
m_playerUuid = move(playerUuid);
2023-06-20 04:33:09 +00:00
m_rpc = make_shared<JsonRpc>();
m_netGroup.addNetElement(&m_orbitWarpActionNetState);
m_netGroup.addNetElement(&m_playerWorldIdNetState);
m_netGroup.addNetElement(&m_isAdminNetState);
m_netGroup.addNetElement(&m_teamNetState);
m_netGroup.addNetElement(&m_shipUpgrades);
m_netGroup.addNetElement(&m_shipCoordinate);
}
Uuid ClientContext::serverUuid() const {
return m_serverUuid;
}
2023-07-22 12:31:04 +00:00
Uuid ClientContext::playerUuid() const {
return m_playerUuid;
}
2023-06-20 04:33:09 +00:00
CelestialCoordinate ClientContext::shipCoordinate() const {
return m_shipCoordinate.get();
}
Maybe<pair<WarpAction, WarpMode>> ClientContext::orbitWarpAction() const {
return m_orbitWarpActionNetState.get();
}
WorldId ClientContext::playerWorldId() const {
return m_playerWorldIdNetState.get();
}
bool ClientContext::isAdmin() const {
return m_isAdminNetState.get();
}
EntityDamageTeam ClientContext::team() const {
return m_teamNetState.get();
}
JsonRpcInterfacePtr ClientContext::rpcInterface() const {
return m_rpc;
}
WorldChunks ClientContext::newShipUpdates() {
return take(m_newShipUpdates);
}
ShipUpgrades ClientContext::shipUpgrades() const {
return m_shipUpgrades.get();
}
void ClientContext::readUpdate(ByteArray data) {
if (data.empty())
return;
DataStreamBuffer ds(move(data));
m_rpc->receive(ds.read<ByteArray>());
auto shipUpdates = ds.read<ByteArray>();
if (!shipUpdates.empty())
m_newShipUpdates.merge(DataStreamBuffer::deserialize<WorldChunks>(move(shipUpdates)), true);
m_netGroup.readNetState(ds.read<ByteArray>());
}
ByteArray ClientContext::writeUpdate() {
return m_rpc->send();
}
}