File Game2DLayerNetwork.h

File List > engine > include > Game2DLayerNetwork.h

Go to the documentation of this file


#ifndef GAME2DLAYER_NETWORK_H
#define GAME2DLAYER_NETWORK_H

#include <stdbool.h>
#include "IntTypes.h"
struct GameFrameworkLayer;
struct BinarySerializer;
struct GameLayer2DData;
struct Entity2D;
struct Entity2DCollection;

enum G2DPacketType
{
    G2DPacket_RequestLevelData,
    G2DPacket_LevelDataResponseData,
    G2DPacket_RPC,
    G2DPacket_WorldState
};


struct TilemapEdit
{
    u16 x, y;
    u16 layer;
    TileIndex newVal;
};

enum Game2DRPCType
{
    G2DRPC_CreateEntity,
    G2DRPC_DestroyEntity,
    G2DRPC_AdjustNetworkID,
    G2DRPC_LastEngineRPC /* leave at end */
};

typedef void(*RPCMessageConstructorFn)(struct BinarySerializer* pBS, void* pRPCStruct);

typedef void(*RPCMessageHandlerFn)(struct BinarySerializer* pBS, struct GameLayer2DData* pData, int client);

struct UserGame2DRPC
{
    int rpcType; 

    RPCMessageConstructorFn ctor;

    RPCMessageHandlerFn handler;
};

void G2D_RegisterUserRPC(struct UserGame2DRPC* rpc);

typedef void(*PacketExtensionNoArgsFn)(struct BinarySerializer*);

void G2D_Extend_RequestLevelDataMessage(PacketExtensionNoArgsFn fn);

void G2D_Enqueue_RequestLevelData();

enum G2DPacketType G2D_ParsePacket(u8* pPacket, u8** pOutBody, int* outHeaderSize);

void G2D_Enqueue_Worldstate_Packet(struct GameLayer2DData* pData, int clientI);

enum Game2DRPCType G2D_ParseRPCPacket(u8* packet, u8** pOutBody);

void G2D_DoRPC(struct GameFrameworkLayer* pLayer, struct GameLayer2DData* pData, u8* pRPCData, int client);

void G2D_PollNetworkQueueClient(struct GameFrameworkLayer* pLayer, float deltaT);

void G2D_PollNetworkQueueServer(struct GameFrameworkLayer* pLayer, float deltaT);

void G2D_SendRPC(int client, enum Game2DRPCType type, void* pRPCData);


struct Entity2D* G2D_FindEntityWithNetID(struct Entity2DCollection* pCollection, int netID);

bool G2D_IsClientConnected(int i);


struct AdjustNetID_RPC
{
    int oldNetID;
    int newNetID;
};

struct CreateEntity_RPC
{
    struct Entity2D* pEnt;
    struct GameLayer2DData* pData;
};

struct DeleteEntity_RPC
{
    int netID;
};


#endif