Files
ld58/code/game/world.h
2025-10-06 14:50:32 +01:00

82 lines
1.6 KiB
C

#if !defined(LD_GAME_WORLD_H_)
#define LD_GAME_WORLD_H_
#include "../core/math.h"
// Areas are which
typedef U32 World_Area;
enum World_Area
{
WORLD_AREA_OUTSIDE = (1 << 0),
WORLD_AREA_SALOON = (1 << 1),
};
typedef struct World_Tile World_Tile;
struct World_Tile {
U32 tile;
double rotation;
bool collision;
};
typedef struct World_PropType World_PropType;
struct World_PropType {
U32 assetHandle;
F32 scale;
};
typedef struct World_Prop World_Prop;
struct World_Prop
{
U32 propType;
World_Area area;
V2f pos;
};
typedef struct World World;
#include "player.h"
#include "npc.h"
#include "bandit.h"
struct World {
//// Utils
M_Arena *arena;
//// Static stuff
NavMesh *navMesh;
Random random;
V2f mouseProjected;
World_Tile tileTypes[64];
U32 map[4800];
World_PropType propTypes[64];
U32 propCount;
World_Prop props[256];
U32 hitboxCount;
AABB hitboxes[4096];
//// Player
Player player;
//// NPCs
U32 npcCount;
NPC npcs[128];
////Bandit
// The bandit the player is after.
Bandit bandit;
// NPC points of interest, places to walk to.
U32 npcPOI[256];
};
function void UpdateWorld(F32 delta, World *world);
function void RenderWorld(World *world, D_Context *drawContext);
function void ProcessEvents(SDL_Event *event, World *world);
function void UpdateNPCs(F32 delta, World *world);
function void UpdateNPC(F32 delta, NPC *npc, World *world);
function void UpdateBandit(F32 delta, Bandit *bandit, World *world);
function World *LoadWorld(M_Arena *arena);
function void SaveWorld(M_Arena *arena, World *world);
#endif // LD_GAME_WORLD_H_