diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/assets.c | 20 | ||||
-rw-r--r-- | src/assets.h | 8 | ||||
-rw-r--r-- | src/entity.c | 8 | ||||
-rw-r--r-- | src/world.c | 8 | ||||
-rw-r--r-- | src/world.h | 6 |
5 files changed, 43 insertions, 7 deletions
diff --git a/src/assets.c b/src/assets.c index 2ceff83..09388b8 100644 --- a/src/assets.c +++ b/src/assets.c @@ -16,20 +16,24 @@ const char shaderAssetNames[SHADER_ASSET_COUNT][FT_NAMEMAX] = { "skybox" }; +const char modelAssetPaths[MODEL_ASSET_COUNT][FT_NAMEMAX] = { + "UtilityPole.obj" +}; + void initAssets(Assets* assets) { // Textures. for (int index = 0; index < TEXTURE_ASSET_COUNT; ++index) { assets->textures[index] = LoadTexture( - TextFormat("assets/%s", textureAssetPaths[index])); + TextFormat("assets/images/%s", textureAssetPaths[index])); } // Images; for (int index = 0; index < IMAGE_ASSET_COUNT; ++index) { assets->images[index] = LoadImage( - TextFormat("assets/%s", imageAssetPaths[index])); + TextFormat("assets/images/%s", imageAssetPaths[index])); } // Shaders. @@ -41,6 +45,13 @@ void initAssets(Assets* assets) TextFormat("assets/shaders/glsl%i/%s.fs", GLSL_VERSION, shaderAssetNames[index])); } + + // Models. + for (int index = 0; index < MODEL_ASSET_COUNT; ++index) + { + assets->models[index] = LoadModel( + TextFormat("assets/models/%s", modelAssetPaths[index])); + } } void closeAssets(Assets* assets) @@ -59,4 +70,9 @@ void closeAssets(Assets* assets) { UnloadShader(assets->shaders[index]); } + + for (int index = 0; index < MODEL_ASSET_COUNT; ++index) + { + UnloadModel(assets->models[index]); + } } diff --git a/src/assets.h b/src/assets.h index 743926c..2457115 100644 --- a/src/assets.h +++ b/src/assets.h @@ -6,10 +6,12 @@ #define TEXTURE_ASSET_COUNT 5 #define IMAGE_ASSET_COUNT 1 #define SHADER_ASSET_COUNT 1 +#define MODEL_ASSET_COUNT 1 extern const char textureAssetPaths[TEXTURE_ASSET_COUNT][FT_NAMEMAX]; extern const char imageAssetPaths[IMAGE_ASSET_COUNT][FT_NAMEMAX]; extern const char shaderAssetNames[SHADER_ASSET_COUNT][FT_NAMEMAX]; +extern const char modelAssetPaths[MODEL_ASSET_COUNT][FT_NAMEMAX]; typedef int8_t AssetId; @@ -32,10 +34,16 @@ enum { SKYBOX_SHADER }; +// Model asset ids. +enum { + UTILITY_POLE_MODEL +}; + typedef struct { Texture textures[TEXTURE_ASSET_COUNT]; Image images[IMAGE_ASSET_COUNT]; Shader shaders[SHADER_ASSET_COUNT]; + Model models[MODEL_ASSET_COUNT]; } Assets; void initAssets(Assets* assets); diff --git a/src/entity.c b/src/entity.c index f9f7989..c63acf4 100644 --- a/src/entity.c +++ b/src/entity.c @@ -91,10 +91,10 @@ void updateEntity(Entity* entity, Game* game) (Vector2){POND_SIZE * 2.5, POND_SIZE * 2.5}, BLUE); break; case UTILITY_POLE: - DrawCylinder(Vector3Subtract(entity->position, - (Vector3){0.0, UTILITY_POLE_HEIGHT}), - UTILITY_POLE_RADIUS, UTILITY_POLE_RADIUS, - UTILITY_POLE_HEIGHT * 2.0, 6, BROWN); + /* DrawCylinder(Vector3Subtract(entity->position, */ + /* (Vector3){0.0, UTILITY_POLE_HEIGHT}), */ + /* UTILITY_POLE_RADIUS, UTILITY_POLE_RADIUS, */ + /* UTILITY_POLE_HEIGHT * 2.0, 6, BROWN); */ break; default: break; diff --git a/src/world.c b/src/world.c index 1d0aa10..828aaa3 100644 --- a/src/world.c +++ b/src/world.c @@ -482,6 +482,9 @@ Seed generateWorldUtilityPoles(World* world, Seed seed, int start, int end) Entity entity = createEntity(UTILITY_POLE, Vector3Zero()); seed = putEntityInRandomPlace(world, seed, &entity); world->entities[index] = entity; + + world->utilityPoleTransforms[index - start] = MatrixTranslate( + entity.position.x, entity.position.y, entity.position.z); } return seed; @@ -614,6 +617,11 @@ void updateWorld(World* world, Game* game) updateEntity(&world->entities[index], game); } + DrawMeshInstanced(game->assets.models[UTILITY_POLE_MODEL].meshes[0], + game->assets.models[UTILITY_POLE_MODEL].materials[0], + world->utilityPoleTransforms, + WORLD_UTILITY_POLE_COUNT); + // Draw BVH leafs. #ifdef FT_DEBUG_MODE if (IsKeyPressed(KEY_RIGHT)) diff --git a/src/world.h b/src/world.h index 1d7dd72..fc84ca3 100644 --- a/src/world.h +++ b/src/world.h @@ -52,9 +52,13 @@ struct World { Vector3 size; Texture heightmapTexture; Model heightmap; + Entity entities[WORLD_ENTITY_MAX]; - BVHNode bvh; WorldUID places[WORLD_PLACE_COUNT]; + BVHNode bvh; + + // Transforms for mesh instancing. + Matrix utilityPoleTransforms[WORLD_UTILITY_POLE_COUNT]; int bvhDebugSelect; }; |