#include "utils.h" #include "assets.h" #include "entity.h" #ifndef WORLD_H #define WORLD_H #define BVH_MAX 4 // Max entities per node. #define BVH_MAX_BRANCH_COUNT 8 #define BVH_BOX_MAX 100.0 #define WORLD_ENTITY_MAX 1500 #define WORLD_SIZE (Vector3){1000.0, 100.0, 1000.0} #define WORLD_IMAGE_WIDTH 100 #define WORLD_IMAGE_HEIGHT 100 #define WORLD_IMAGE_SCALE 5.0 #define WORLD_PLANT_COUNT 500 #define WORLD_GROUND_COLOR GREEN #define WORLD_GROUND_BLUR 4 // UID for anything in the world. typedef int16_t WorldUID; typedef int Seed; typedef struct BVHNode { BoundingBox box; Vector3 position; WorldUID entities[BVH_MAX]; // Only for leafs. struct BVHNode* branches[BVH_MAX_BRANCH_COUNT]; int8_t branchCount; } BVHNode; struct World { Vector3 size; Texture texture; Model heightmap; Entity entities[WORLD_ENTITY_MAX]; BVHNode bvh; int bvhDebugSelect; }; World createWorld(Seed seed); void updateWorld(World* world, Game* game); void freeWorld(World world); // Dam, I wanta live in a free world ): float getWorldHeightAtLocation(const World* world, float x, float y); WorldUID castRayAtWorld(const World* world, Ray ray, int* tests); #endif