feat: Basic level editing
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user