Upercase function naming, renamed shader to postfx shader, added assets and texture structs and arrays, rewrote texturehandling with arrays for better encapsulation

This commit is contained in:
huaqo-games
2025-03-18 10:32:49 +01:00
parent 94597e2c0a
commit 1ee2deb190
+50 -32
View File
@@ -3,16 +3,25 @@
#include "../engine/object.h" #include "../engine/object.h"
#include "../engine/camera.h" #include "../engine/camera.h"
#include "../engine/input.h" #include "../engine/input.h"
#include "../engine/shader.h" #include "../engine/postfx.h"
#include "../engine/musicmanager.h" #include "../engine/musicmanager.h"
#include "../engine/asset.h"
#include "floor.h" #include "floor.h"
#include "player.h" #include "player.h"
#include "bee.h" #include "bee.h"
#include "hive.h" #include "hive.h"
#include "flowers.h" #include "flowers.h"
typedef enum {
FLOWER,
BEE,
GRASS,
HIVE,
TEX_COUNT
} TextureID;
typedef struct { typedef struct {
VignetteShader vignetteShader; PostProcessing postFX;
MyMusic ambient; MyMusic ambient;
RenderTexture2D target; RenderTexture2D target;
Texture2D flowerTexture, beeTexture, floorTexture, hiveTexture; Texture2D flowerTexture, beeTexture, floorTexture, hiveTexture;
@@ -23,69 +32,78 @@ typedef struct {
Bee bee1; Bee bee1;
Camera2D camera; Camera2D camera;
Mouse mouse; Mouse mouse;
TextureAsset textureAssets[TEX_COUNT];
Texture2D textures[TEX_COUNT];
} GameState; } GameState;
void initGame(GameState* g){ void InitGame(GameState* g){
InitAudioDevice(); InitAudioDevice();
g->vignetteShader = CreateShader("shaders/vignette.fs", 0.3f); g->postFX = CreatePostFX("shaders/postfx.fs", 0.3f);
g->ambient = CreateMusic("assets/beez.mp3"); g->ambient = CreateMusic("assets/beez.mp3");
g->target = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); g->textureAssets[FLOWER] = (TextureAsset){"assets/flower.png", 16.0f, 16.0f, 45.0f};
g->textureAssets[BEE] = (TextureAsset){"assets/character_bee.png", 16.0f, 16.0f, 0.0f};
g->textureAssets[GRASS] = (TextureAsset){"assets/grass.png", 16.0f, 16.0f, 0.0f};
g->textureAssets[HIVE] = (TextureAsset){"assets/hive.png", 32.0f, 32.0f, 0.0f};
g->flowerTexture = LoadTexture("assets/flower.png"); g->textures[FLOWER] = LoadTexture(g->textureAssets[FLOWER].path);
g->beeTexture = LoadTexture("assets/character_bee.png"); g->textures[BEE] = LoadTexture(g->textureAssets[BEE].path);
g->floorTexture = LoadTexture("assets/grass.png"); g->textures[GRASS] = LoadTexture(g->textureAssets[GRASS].path);
g->hiveTexture = LoadTexture("assets/hive.png"); g->textures[HIVE] = LoadTexture(g->textureAssets[HIVE].path);
g->floor = CreateFloor(g->floorTexture, 16.0f); g->flowers = CreateFlowers(g->textures[FLOWER], g->textureAssets[FLOWER].frameWidth, g->textureAssets[FLOWER].rotation, 50.0f);
g->flowers = CreateFlowers(g->flowerTexture, 16.0f, 45.0f, 50.0f); g->player = CreatePlayer(g->textures[BEE], g->textureAssets[BEE].frameWidth, 4, 10, g->hive.position, 50.0f);
g->hive = CreateHive(g->hiveTexture, 32.0f); g->floor = CreateFloor(g->textures[GRASS], g->textureAssets[GRASS].frameWidth);
g->player = CreatePlayer(g->beeTexture, 16.0f, 4, 10, g->hive.position, 50.0f); g->hive = CreateHive(g->textures[HIVE], g->textureAssets[HIVE].frameWidth);
g->bee1 = CreateBee(g->beeTexture, 16.0f, 4, 10, g->hive.position, 10.0f, &g->flowers, &g->hive); g->bee1 = CreateBee(g->textures[BEE], g->textureAssets[BEE].frameWidth, 4, 10, g->hive.position, 10.0f, &g->flowers, &g->hive);
g->camera = CreateCamera(GetScreenWidth(), GetScreenHeight(), g->player.physics.position, 10.0f); g->camera = CreateCamera(GetScreenWidth(), GetScreenHeight(), g->player.physics.position, 10.0f);
g->mouse = CreateMouse(0.10f, 5.0f, 10.0f); g->mouse = CreateMouse(0.10f, 5.0f, 10.0f);
g->target = LoadRenderTexture(GetScreenWidth(), GetScreenHeight());
} }
void updateGame(GameState* g){ void UpdateGame(GameState* g){
UpdateShader(&g->vignetteShader); UpdatePostFX(&g->postFX);
UpdateMusic(&g->ambient); UpdateMusic(&g->ambient);
UpdateMouse(&g->mouse, &g->camera); UpdateMouse(&g->mouse, &g->camera);
UpdateCamera2D(&g->camera, &g->player.physics.position, &g->mouse); UpdateCamera2D(&g->camera, &g->player.physics.position, &g->mouse);
UpdateFloor(&g->floor, &g->camera); UpdateFloor(&g->floor, &g->camera);
UpdatePlayer(&g->player); UpdatePlayer(&g->player);
UpdateBee(&g->bee1, &g->flowers, g->hive); UpdateBee(&g->bee1, &g->flowers, &g->hive);
} }
void renderGame(GameState* g){ void RenderComponents(GameState* g){
RenderFloor(&g->floor);
RenderSprite(&g->hive.sprite);
RenderObjectArray(&g->flowers);
RenderSprite(&g->bee1.sprite);
RenderSprite(&g->player.sprite);
}
void RenderGame(GameState* g){
BeginTextureMode(g->target); BeginTextureMode(g->target);
ClearBackground(BLACK); ClearBackground(BLACK);
BeginMode2D(g->camera); BeginMode2D(g->camera);
RenderFloor(&g->floor); RenderComponents(g);
RenderSprite(&g->hive.sprite);
RenderObjectArray(&g->flowers);
RenderSprite(&g->bee1.sprite);
RenderSprite(&g->player.sprite);
EndMode2D(); EndMode2D();
EndTextureMode(); EndTextureMode();
BeginDrawing(); BeginDrawing();
ClearBackground(BLACK); ClearBackground(BLACK);
BeginShaderMode(g->vignetteShader.shader); RenderPostFX(&g->postFX, &g->target);
DrawTextureRec(g->target.texture, (Rectangle){ 0, 0, g->target.texture.width, -g->target.texture.height }, (Vector2){ 0, 0 }, WHITE);
EndShaderMode();
DrawFPS(10, 10); DrawFPS(10, 10);
EndDrawing(); EndDrawing();
} }
void cleanupGame(GameState* g){ void CleanupGame(GameState* g){
UnloadVignetteShader(&g->vignetteShader); UnloadPostFX(&g->postFX);
UnloadRenderTexture(g->target); UnloadRenderTexture(g->target);
UnloadTexture(g->floorTexture); for (int i = 0; i < TEX_COUNT; i++){
UnloadTexture(g->hiveTexture); if (g->textures[i].id > 0) { UnloadTexture(g->textures[i]); }
UnloadTexture(g->flowerTexture); }
UnloadTexture(g->beeTexture);
UnloadMusicStream(g->ambient.music); UnloadMusicStream(g->ambient.music);
free(g->flowers.data); free(g->flowers.data);
CloseAudioDevice(); CloseAudioDevice();