aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/assets.c36
-rw-r--r--src/assets.h18
-rw-r--r--src/entity.c4
-rw-r--r--src/entity.h6
-rw-r--r--src/game.c30
-rw-r--r--src/game.h1
-rw-r--r--src/utils.h8
7 files changed, 97 insertions, 6 deletions
diff --git a/src/assets.c b/src/assets.c
index 0434b5c..2ceff83 100644
--- a/src/assets.c
+++ b/src/assets.c
@@ -8,13 +8,39 @@ const char textureAssetPaths[TEXTURE_ASSET_COUNT][FT_NAMEMAX] = {
"flower.png"
};
+const char imageAssetPaths[IMAGE_ASSET_COUNT][FT_NAMEMAX] = {
+ "skybox.png"
+};
+
+const char shaderAssetNames[SHADER_ASSET_COUNT][FT_NAMEMAX] = {
+ "skybox"
+};
+
void initAssets(Assets* assets)
{
+ // Textures.
for (int index = 0; index < TEXTURE_ASSET_COUNT; ++index)
{
assets->textures[index] = LoadTexture(
TextFormat("assets/%s", textureAssetPaths[index]));
}
+
+ // Images;
+ for (int index = 0; index < IMAGE_ASSET_COUNT; ++index)
+ {
+ assets->images[index] = LoadImage(
+ TextFormat("assets/%s", imageAssetPaths[index]));
+ }
+
+ // Shaders.
+ for (int index = 0; index < SHADER_ASSET_COUNT; ++index)
+ {
+ assets->shaders[index] = LoadShader(
+ TextFormat("assets/shaders/glsl%i/%s.vs", GLSL_VERSION,
+ shaderAssetNames[index]),
+ TextFormat("assets/shaders/glsl%i/%s.fs", GLSL_VERSION,
+ shaderAssetNames[index]));
+ }
}
void closeAssets(Assets* assets)
@@ -23,4 +49,14 @@ void closeAssets(Assets* assets)
{
UnloadTexture(assets->textures[index]);
}
+
+ for (int index = 0; index < IMAGE_ASSET_COUNT; ++index)
+ {
+ UnloadImage(assets->images[index]);
+ }
+
+ for (int index = 0; index < SHADER_ASSET_COUNT; ++index)
+ {
+ UnloadShader(assets->shaders[index]);
+ }
}
diff --git a/src/assets.h b/src/assets.h
index 2a1ee66..743926c 100644
--- a/src/assets.h
+++ b/src/assets.h
@@ -4,8 +4,12 @@
#define ASSETS_H
#define TEXTURE_ASSET_COUNT 5
+#define IMAGE_ASSET_COUNT 1
+#define SHADER_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];
typedef int8_t AssetId;
@@ -15,11 +19,23 @@ enum {
NICKEL_TEXTURE,
TREE_TEXTURE,
BUSH_TEXTURE,
- FLOWER_TEXTURE
+ FLOWER_TEXTURE,
+};
+
+// Image asset ids.
+enum {
+ SKYBOX_IMAGE
+};
+
+// Shader asset ids.
+enum {
+ SKYBOX_SHADER
};
typedef struct {
Texture textures[TEXTURE_ASSET_COUNT];
+ Image images[IMAGE_ASSET_COUNT];
+ Shader shaders[SHADER_ASSET_COUNT];
} Assets;
void initAssets(Assets* assets);
diff --git a/src/entity.c b/src/entity.c
index 2ad7754..6d1aace 100644
--- a/src/entity.c
+++ b/src/entity.c
@@ -25,10 +25,10 @@ Entity createEntity(EntityId id, Vector3 position)
entity.box = entityBoxFromScale(1.0, 32.0, 32.0);
break;
case TREE:
- entity.box = entityBoxFromScale(TREE_SCALE, 225.0, 500.0);
+ entity.box = entityBoxFromScale(TREE_SCALE, 113.0, 250.0);
break;
case BUSH:
- entity.box = entityBoxFromScale(BUSH_SCALE, 174.0, 124.0);
+ entity.box = entityBoxFromScale(BUSH_SCALE, 87.0, 62.0);
break;
case FLOWER:
entity.box = entityBoxFromScale(FLOWER_SCALE, 32.0, 54.0);
diff --git a/src/entity.h b/src/entity.h
index f647e14..a1751aa 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -10,9 +10,9 @@ typedef int8_t EntityId;
#define ENTITY_COUNT 5
// Entity scales.
-#define TREE_SCALE 32.0
-#define BUSH_SCALE 6.0
-#define FLOWER_SCALE 2.0
+#define TREE_SCALE 40.0
+#define BUSH_SCALE 8.0
+#define FLOWER_SCALE 3.0
enum {
ENTITY_NONE = -1,
diff --git a/src/game.c b/src/game.c
index f76a0ee..80efe6d 100644
--- a/src/game.c
+++ b/src/game.c
@@ -16,6 +16,27 @@ void initGame(Game* game)
// Assets.
initAssets(&game->assets);
+ // Skybox.
+ game->skybox = LoadModelFromMesh(GenMeshCube(1.0, 1.0, 1.0));
+ game->skybox.materials[0].shader = game->assets.shaders[SKYBOX_SHADER];
+
+ SetShaderValue(
+ game->skybox.materials[0].shader,
+ GetShaderLocation(game->skybox.materials[0].shader, "environmentMap"),
+ (int[1]){ MATERIAL_MAP_CUBEMAP }, SHADER_UNIFORM_INT);
+ SetShaderValue(
+ game->skybox.materials[0].shader,
+ GetShaderLocation(game->skybox.materials[0].shader, "doGamma"),
+ (int[1]){ 0 }, SHADER_UNIFORM_INT);
+ SetShaderValue(
+ game->skybox.materials[0].shader,
+ GetShaderLocation(game->skybox.materials[0].shader, "vflipped"),
+ (int[1]){ 0 }, SHADER_UNIFORM_INT);
+
+ game->skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture =
+ LoadTextureCubemap(game->assets.images[SKYBOX_IMAGE],
+ CUBEMAP_LAYOUT_AUTO_DETECT);
+
// Player.
game->player = createPlayer();
game->player.position = (Vector3){0.0, 30.0, 0.0};
@@ -37,6 +58,13 @@ void updateGameScene(Game* game)
BeginMode3D(game->player.camera);
+ // Render skybox.
+ rlDisableBackfaceCulling();
+ rlDisableDepthMask();
+ DrawModel(game->skybox, Vector3Zero(), 1.0, WHITE);
+ rlEnableBackfaceCulling();
+ rlEnableDepthMask();
+
updatePlayer(&game->player, game);
updateWorld(&game->world, game);
@@ -68,6 +96,8 @@ void updateGame(Game* game)
void closeGame(Game* game)
{
closeAssets(&game->assets);
+ UnloadTexture(game->skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture);
+ UnloadModel(game->skybox);
freeWorld(game->world);
CloseWindow();
}
diff --git a/src/game.h b/src/game.h
index ddfdbd5..0990bd2 100644
--- a/src/game.h
+++ b/src/game.h
@@ -19,6 +19,7 @@ struct Game {
Assets assets;
Player player;
World world;
+ Model skybox;
};
void initGame(Game* game);
diff --git a/src/utils.h b/src/utils.h
index 08239b8..6532660 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -7,6 +7,7 @@
#include <stdbool.h>
#include <raylib.h>
+#include <rlgl.h>
#include <raymath.h>
#include "raygui.h"
@@ -29,6 +30,13 @@
#define ALLOCATION_ERROR TraceLog(LOG_ERROR, "Allocation error in %s:%d", \
__FILE__, __LINE__)
+// GLSL version
+#ifdef PLATFORM_DESKTOP
+ #define GLSL_VERSION 330
+#else // PLATFORM_ANDROID, PLATFORM_WEB
+ #define GLSL_VERSION 100
+#endif
+
// Typedef hackery.
typedef struct Game Game;
typedef struct World World;