aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/assets.c20
-rw-r--r--src/assets.h8
-rw-r--r--src/entity.c8
-rw-r--r--src/world.c8
-rw-r--r--src/world.h6
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;
};