125 lines
4.2 KiB
C
125 lines
4.2 KiB
C
#ifndef GAME_H
|
|
#define GAME_H
|
|
#include "../engine/object.h"
|
|
#include "../engine/camera.h"
|
|
#include "../engine/input.h"
|
|
#include "../engine/postfx.h"
|
|
#include "../engine/soundtrack.h"
|
|
#include "../engine/asset.h"
|
|
#include "../engine/applicationstate.h"
|
|
#include "gameassets.h"
|
|
#include "floor.h"
|
|
#include "player.h"
|
|
#include "bee.h"
|
|
#include "hive.h"
|
|
#include "flowers.h"
|
|
|
|
typedef struct {
|
|
Assets assets;
|
|
Texture2D textures[TEX_COUNT];
|
|
PostProcessing postFX[SHADER_COUNT];
|
|
Soundtrack soundtracks[SOUNDTRACK_COUNT];
|
|
RenderTexture2D target;
|
|
Floor floor;
|
|
Object hive;
|
|
ObjectArray flowers;
|
|
Player player;
|
|
Bee bee1;
|
|
Camera2D camera;
|
|
Mouse mouse;
|
|
Image image;
|
|
} GameState;
|
|
|
|
void InitGame(GameState* g, Display *display){
|
|
|
|
g->assets = (Assets){
|
|
.textureAssets = texAssets,
|
|
.shaderAssets = shaderAssets,
|
|
.soundtrackAssets = soundtrackAssets
|
|
};
|
|
|
|
for (int i = 0; i < TEX_COUNT; i++){
|
|
g->textures[i] = LoadTexture(g->assets.textureAssets[i].path);
|
|
}
|
|
|
|
for (int i = 0; i < SHADER_COUNT; i++){
|
|
g->postFX[i] = CreatePostFX(g->assets.shaderAssets[i].path);
|
|
}
|
|
|
|
for (int i = 0; i < SOUNDTRACK_COUNT; i++){
|
|
g->soundtracks[i] = LoadSoundtrack(g->assets.soundtrackAssets[i].path);
|
|
}
|
|
|
|
// Target texture
|
|
g->target = LoadRenderTexture(display->width, display->height);
|
|
|
|
// Static Entities
|
|
g->flowers = CreateFlowers(g->textures[FLOWER], g->assets.textureAssets[FLOWER].frameWidth, g->assets.textureAssets[FLOWER].rotation, 50.0f);
|
|
g->floor = CreateFloor(g->textures[GRASS], g->assets.textureAssets[GRASS].frameWidth);
|
|
g->hive = CreateHive(g->textures[HIVE], g->assets.textureAssets[HIVE].frameWidth);
|
|
|
|
// Animated Entities
|
|
g->player = CreatePlayer(IDLE_DOWN, HOE, g->textures[PLAYER], g->assets.textureAssets[PLAYER].frameWidth, 4, 2, g->hive.position, g->assets.textureAssets[PLAYER].rotation, 50.0f);
|
|
g->bee1 = CreateBee(FLYING, g->textures[BEE], g->assets.textureAssets[BEE].frameWidth, 4, 10, g->hive.position, 10.0f, &g->flowers, &g->hive);
|
|
|
|
// I/O
|
|
g->camera = CreateCamera(display->width, display->height, g->player.physics.position, 10.0f);
|
|
|
|
|
|
g->mouse = CreateMouse(0.10f, 5.0f, 10.0f, &g->textures[CURSOR]);
|
|
|
|
}
|
|
|
|
void UpdateGame(GameState* g, State *state){
|
|
if (GetFPS() <= 60){ SetTargetFPS(0); }
|
|
if (IsKeyPressed(KEY_ESCAPE)){ state->currentScreen = MENU; }
|
|
if (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE)) { state->running = false; }
|
|
for (int i = 0; i < SHADER_COUNT; i++){ UpdatePostFX(&g->postFX[i]); }
|
|
for (int i = 0; i < SOUNDTRACK_COUNT; i++){ UpdateSoundtrack(&g->soundtracks[i]); }
|
|
|
|
UpdateMouse(&g->mouse, &g->camera);
|
|
UpdateCamera2D(&g->camera, &g->player.physics.position, &g->mouse);
|
|
UpdateFloor(&g->floor, &g->camera);
|
|
UpdatePlayer(&g->player);
|
|
UpdateBee(&g->bee1, &g->flowers, &g->hive);
|
|
|
|
|
|
}
|
|
|
|
void RenderComponents(GameState* g){
|
|
RenderFloor(&g->floor);
|
|
RenderSprite(&g->hive.sprite);
|
|
RenderObjectArray(&g->flowers);
|
|
RenderSprite(&g->player.sprite);
|
|
RenderSprite(&g->bee1.sprite);
|
|
|
|
}
|
|
|
|
void RenderGame(GameState* g){
|
|
BeginTextureMode(g->target);
|
|
ClearBackground(BLACK);
|
|
BeginMode2D(g->camera);
|
|
RenderComponents(g);
|
|
EndMode2D();
|
|
DrawTextureRec(g->mouse.cursorTexture, (Rectangle){ 0, 0, g->mouse.cursorTexture.width, -g->mouse.cursorTexture.height }, (Vector2){ g->mouse.screenPosition.x, GetScreenHeight() - g->mouse.screenPosition.y - g->mouse.cursorTexture.height}, WHITE);
|
|
EndTextureMode();
|
|
BeginDrawing();
|
|
ClearBackground(BLACK);
|
|
for (int i = 0; i < SHADER_COUNT; i++){
|
|
RenderPostFX(&g->postFX[i], &g->target);
|
|
}
|
|
DrawText( TextFormat("%d", g->player.inventar.seedCount), 10, 10, 50, WHITE);
|
|
//DrawFPS(10, 10);
|
|
EndDrawing();
|
|
}
|
|
|
|
void CleanupGame(GameState* g){
|
|
for (int i = 0; i < SHADER_COUNT; i++){ UnloadPostFX(&g->postFX[i]); }
|
|
for (int i = 0; i < TEX_COUNT; i++){ if (g->textures[i].id > 0) { UnloadTexture(g->textures[i]); } }
|
|
for (int i = 0; i < SOUNDTRACK_COUNT; i++){ UnloadMusicStream(g->soundtracks[i].music); }
|
|
UnloadRenderTexture(g->target);
|
|
free(g->flowers.data);
|
|
}
|
|
|
|
#endif // GAME_H
|