diff options
Diffstat (limited to 'server/main.c')
| -rw-r--r-- | server/main.c | 72 |
1 files changed, 47 insertions, 25 deletions
diff --git a/server/main.c b/server/main.c index 6a5e5ba..03c0573 100644 --- a/server/main.c +++ b/server/main.c @@ -1,44 +1,66 @@ +#include "raylib.h" +#include "raymath.h" #include <stdio.h> #include <stdlib.h> #include <time.h> +#include "server.h" +#include "queue.h" +#include "shared.h" #include "net_compat.h" +ClientConnection connections[MAX_PLAYERS]; +PacketQueue incomingQueue; +PacketQueue outgoingQueue; +Mesh terrainMesh; +Matrix terrainTransform; +ServerPlayer players[MAX_PLAYERS]; +ServerNPC npcs[MAX_NPCS]; +int playerCount = 0; +int npcCount = 0; + int main() { - net_init(); + /* set_nonblocking(fd); */ + QueueInit(&incomingQueue); + QueueInit(&outgoingQueue); - int fd = socket(AF_INET, SOCK_DGRAM, 0); +InitWindow(1, 1, "server"); // tiny hidden window +SetWindowState(FLAG_WINDOW_HIDDEN); - if (fd == -1) - err(EXIT_FAILURE, "socket failed"); - struct sockaddr_in address; - address.sin_family = AF_INET; - address.sin_port = htons(8080); - address.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + Model terrain = LoadModel("assets/terrain.glb"); - if (bind(fd, (struct sockaddr *)&address, sizeof(address)) == -1) { - close(fd); - err(EXIT_FAILURE, "bind failed"); - } +if (terrain.meshCount == 0) { + TraceLog(LOG_ERROR, "Terrain failed to load!"); +} - set_nonblocking(fd); +// Bake scale into vertices so rendering and collision match + float scaleXZ = 10.0f; + float scaleY = 10.0f; + for (int i = 0; i < terrain.meshes[0].vertexCount; i++) { + terrain.meshes[0].vertices[i * 3 + 0] *= scaleXZ; + terrain.meshes[0].vertices[i * 3 + 1] *= scaleY; + terrain.meshes[0].vertices[i * 3 + 2] *= scaleXZ; + } + UpdateMeshBuffer(terrain.meshes[0], 0, terrain.meshes[0].vertices, + terrain.meshes[0].vertexCount * 3 * sizeof(float), 0); - time_t startTime = time(NULL); + terrain.transform = MatrixIdentity(); + terrainMesh = terrain.meshes[0]; + terrainTransform = terrain.transform; - while (time(NULL) < startTime + 60) { - struct sockaddr connection; - socklen_t connectionLen = sizeof(connection); - char buff[64]; + CloseWindow(); - int size = recvfrom(fd, buff, sizeof(buff), 0, - (struct sockaddr *)&connection, &connectionLen); + NetworkInit(); - if (size != -1) - printf("message recievd\n"); - } + // start threads + pthread_t recvThread, sendThread, gameThread; + pthread_create(&recvThread, NULL, RecvThread, NULL); + pthread_create(&sendThread, NULL, SendThread, NULL); + pthread_create(&gameThread, NULL, GameThread, NULL); - close(fd); - net_cleanup(); + // wait forever + pthread_join(gameThread, NULL); + NetworkShutdown(); return 0; } |