aboutsummaryrefslogtreecommitdiffstats
path: root/src/game.c
blob: c4563c9930dccae1195428ad00e5fb4b2701e266 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "game.h"
#include "utils.h"

void initGame(Game* game)
{
  game->sceneId = GAME_SCENE;
  
  // Settings.
  game->settings = defaultSettings();

  // Window.
  InitWindow(game->settings.windowWidth, game->settings.windowHeight,
             "Find Things");
  SetWindowState(FLAG_WINDOW_RESIZABLE);

  // 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];
  game->skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture =
    LoadTextureCubemap(game->assets.images[SKYBOX_IMAGE],
                       CUBEMAP_LAYOUT_AUTO_DETECT);

  // World.
  game->world = createWorld(345893, &game->assets);

  // Player.
  game->player = createPlayer();
  game->player.position = Vector3Scale(game->world.size, 0.5);

  DisableCursor();
}

void updateMainMenuScene(Game* game)
{
  ClearBackground(BLACK);
}

void updateGameScene(Game* game)
{
  ClearBackground(BLACK);

  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);

  EndMode3D();
}

void updateGame(Game* game)
{
  BeginDrawing();

  switch (game->sceneId)
  {
  case MAIN_MENU_SCENE:
    updateMainMenuScene(game);
    break;
  case GAME_SCENE:
    updateGameScene(game);
    break;
  default:
    break;
  }

  DrawFPS(0, 0);
  
  EndDrawing();
}

void closeGame(Game* game)
{
  closeAssets(&game->assets);
  UnloadTexture(game->skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture);
  UnloadModel(game->skybox);
  freeWorld(game->world);
  CloseWindow();
}