feat: Basic level editing

This commit is contained in:
2025-10-06 14:26:00 +01:00
parent 3e527f473b
commit 3a84947750
18 changed files with 242 additions and 34 deletions

View File

@@ -13,6 +13,25 @@ struct G_Camera {
Mat4x4FInv proj;
};
#define TILE_SIZE 1.0
typedef enum G_EDITOR_MODE G_EDITOR_MODE;
enum G_EDITOR_MODE {
G_EDITOR_MODE_TILE,
G_EDITOR_MODE_PROP,
G_EDITOR_MODE_HITBOX,
G_EDITOR_MODE_POI,
};
typedef struct G_Editor G_Editor;
struct G_Editor {
bool enabled;
U32 currentLevel;
S32 currentAsset;
G_EDITOR_MODE mode;
V2f cursor;
};
typedef struct G_State G_State;
struct G_State {
M_Arena *arena;
@@ -20,6 +39,7 @@ struct G_State {
D_Context draw;
G_Camera camera;
G_Editor editor;
World *world;
};

View File

@@ -37,10 +37,24 @@ void ProcessEvents(SDL_Event *event, World *world)
}
void RenderWorld(World *world, D_Context *draw) {
World_Tile tileTypes[] = {dirt, middlePath, middlePathEdgeTop, middlePathEdgeRight, middlePathEdgeBottom, middlePathEdgeLeft, middlePathCornerTopLeft, middlePathCornerTopRight, middlePathCornerBottomRight, middlePathCornerTurnBottomLeft};
for (int i = 0; i < 4800; i++)
{
D_Rect(draw, (F32) (i % 96), (F32) (i / 96), .texture = tileTypes[map[i]].tile, .angle = (F32) tileTypes[map[i]].rotation);
for (int i = 0; i < 4800; i++) {
D_Rect(
draw,
(F32) (i % 96), (F32) (i / 96),
.texture = world->tileTypes[world->map[i]].tile,
.angle = (F32) world->tileTypes[world->map[i]].rotation,
);
}
for (int i = 0; i < world->propCount; i++) {
if(world->props[i].area == world->player.currentArea) {
D_Rect(
draw,
world->props[i].pos.x,
world->props[i].pos.y,
.texture = world->propTypes[world->props[i].propType].assetHandle,
.scale = world->propTypes[world->props[i].propType].scale,
);
}
}
for(U32 i = 0; i < world->npcCount; i++) {
NPC npc = world->npcs[i];

View File

@@ -1,17 +1,6 @@
#include "world.h"
World_Tile dirt = {.rotation=0,.collision=false,.tile=16};//0
World_Tile middlePath = {.rotation=0,.collision=false,.tile=6};//1
World_Tile middlePathEdgeTop = {.rotation=0,.collision=false,.tile=7};//2
World_Tile middlePathEdgeRight = {.rotation=PI_F32/2,.collision=false,.tile=7};//3
World_Tile middlePathEdgeBottom = {.rotation=PI_F32,.collision=false,.tile=7};//4
World_Tile middlePathEdgeLeft = {.rotation=-PI_F32/2,.collision=false,.tile=7};//5
World_Tile middlePathCornerTopLeft = {.rotation=0,.collision=false,.tile=5};//6
World_Tile middlePathCornerTopRight = {.rotation=PI_F32/2,.collision=false,.tile=5};//7
World_Tile middlePathCornerBottomRight = {.rotation=-PI_F32,.collision=false,.tile=5};//8
World_Tile middlePathCornerTurnBottomLeft = {.rotation=-PI_F32/2,.collision=false,.tile=5};//9
int map[] = {
U32 map[] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -62,4 +51,4 @@ int map[] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
};

View File

@@ -9,20 +9,29 @@ enum World_Area
{
WORLD_AREA_OUTSIDE = (1 << 0),
WORLD_AREA_SALOON = (1 << 1),
WORLD_PATH_MIDDLE_EDGE = (1 << 2),
WORLD_PATH_MIDDLE = (1 << 3),
WORLD_PATH_CORNER = (1 << 4),
WORLD_PATH_CORNER_EDGE = (1 << 5),
};
typedef struct World_Tile World_Tile;
struct World_Tile
{
World_Area 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"
@@ -35,6 +44,12 @@ struct World {
NavMesh *navMesh;
Random random;
V2f mouseProjected;
World_Tile tileTypes[64];
U32 map[4800];
World_PropType propTypes[64];
U32 propCount;
World_Prop props[256];
//// Player
Player player;