#ifndef REMOTEGUI_H #define REMOTEGUI_H #include "BulletDynamics/Dynamics/btDynamicsWorld.h" #include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "Gui.h" #include "Environment.h" #include #include #include #define YES "Yes" #define NO "No" #define SERVER_BANNER "SIMEO Remote GUI at duty!" #define MAX_CLIENTS 1 typedef struct { int id; btScalar m[16]; btMatrix3x3 rot; btVector3 aabbMin, aabbMax; } guiUpdateData; typedef struct { int id; int numVertices; int numIndices; btVector3 *vertexPointer; int *indexPointer; } guiAddData; class RemoteGui : public Gui { private: int sockfd; int m_addCounter; map m_cache; // map m_add; // map m_update; // vector m_remove; // int getGuiData(guiUpdateData **gd); int getGuiData(map &addObjects, map &updateObjects, vector &removeObjects); void sendData(int sock, const void *buffer, size_t size); int equal(guiUpdateData *e1, guiUpdateData *e2); // packing functions float* packScalar(btScalar s, void *buffer); int* packInt(int i, void *buffer); float* packVector3(btVector3 v, void *buffer); float* packMatrix3x3(btMatrix3x3 m, void *buffer); void* packGuiData(guiUpdateData *gd, void *buff); int packAddData(map addObjects, void **buffer); int packUpdateData(map updateObjects, void **buffer); int packRemoveData(vector removeObjects, void **buffer); protected: btDynamicsWorld *m_dynamicsWorld; public: RemoteGui(Environment *env); ~RemoteGui(); void init(int port); void run(); }; #endif