431a9c00a5
On Linux and macOS, using Clang to compile OpenStarbound produces about 400 MB worth of warnings during the build, making the compiler output unreadable and slowing the build down considerably. 99% of the warnings were unqualified uses of std::move and std::forward, which are now all properly qualified. Fixed a few other minor warnings about non-virtual destructors and some uses of std::move preventing copy elision on temporary objects. Most remaining warnings are now unused parameters.
100 lines
2.4 KiB
C++
100 lines
2.4 KiB
C++
#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;
|
|
}
|
|
|
|
ClientContext::ClientContext(Uuid serverUuid, Uuid playerUuid) {
|
|
m_serverUuid = std::move(serverUuid);
|
|
m_playerUuid = std::move(playerUuid);
|
|
m_rpc = std::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;
|
|
}
|
|
|
|
Uuid ClientContext::playerUuid() const {
|
|
return m_playerUuid;
|
|
}
|
|
|
|
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(std::move(data));
|
|
|
|
m_rpc->receive(ds.read<ByteArray>());
|
|
|
|
auto shipUpdates = ds.read<ByteArray>();
|
|
if (!shipUpdates.empty())
|
|
m_newShipUpdates.merge(DataStreamBuffer::deserialize<WorldChunks>(std::move(shipUpdates)), true);
|
|
|
|
m_netGroup.readNetState(ds.read<ByteArray>());
|
|
}
|
|
|
|
ByteArray ClientContext::writeUpdate() {
|
|
return m_rpc->send();
|
|
}
|
|
|
|
}
|