feat: World loading that's broken

This commit is contained in:
2025-10-06 16:35:22 +01:00
parent 8a360df98a
commit c4cf8f532b
4 changed files with 169 additions and 81 deletions

View File

@@ -95,7 +95,8 @@ int main(int argc, char **argv)
camera->farp = 1000.0f;
game->draw.camera = camera;
World *world = M_ArenaPush(arena, World);//LoadWorld(arena);
World *world = M_ArenaPush(arena, World);
//LoadWorld(arena, world);
game->world = world;
world->arena = arena;
world->navMesh = &TestNavMesh;
@@ -135,88 +136,90 @@ int main(int argc, char **argv)
world->player.bulletsLoaded = PLAYER_BULLET_COUNT;
world->player.reloadTimer = 0;
world->player.currentArea = WORLD_AREA_OUTSIDE;
for(int i =0; i< 4200; i++) {
world->map[i] = map[i];
}
world->map = map;
world->tileTypes = M_ArenaPush(arena, World_Tile, .count=WORLD_TILE_TYPE_MAX);
world->tileTypes[0].rotation=0;
world->tileTypes[0].collision=false;
world->tileTypes[0].tile=D_ImageHandle(&game->draw, S("tile_dirt_0"));
world->tileTypes[0].tag=S("tile_dirt_0");
world->tileTypes[1].rotation=0,
world->tileTypes[1].collision=false,
world->tileTypes[1].tile=D_ImageHandle(&game->draw, S("path_middle"));
world->tileTypes[1].tag=S("path_middle");
world->tileTypes[2].rotation=0;
world->tileTypes[2].collision=false;
world->tileTypes[2].tile=D_ImageHandle(&game->draw, S("path_middle_edge"));
world->tileTypes[2].tag=S("path_middle_edge");
world->tileTypes[3].rotation=PI_F32/2;
world->tileTypes[3].collision=false;
world->tileTypes[3].tile=D_ImageHandle(&game->draw, S("path_middle_edge"));
world->tileTypes[3].tag=S("path_middle_edge");
world->tileTypes[4].rotation=PI_F32;
world->tileTypes[4].collision=false;
world->tileTypes[4].tile=D_ImageHandle(&game->draw, S("path_middle_edge"));
world->tileTypes[4].tag=S("path_middle_edge");
world->tileTypes[5].rotation=-PI_F32/2;
world->tileTypes[5].collision=false;
world->tileTypes[5].tile=D_ImageHandle(&game->draw, S("path_middle_edge"));
world->tileTypes[5].tag=S("path_middle_edge");
world->tileTypes[6].rotation=0;
world->tileTypes[6].collision=false;
world->tileTypes[6].tile=D_ImageHandle(&game->draw, S("path_middle"));
world->tileTypes[6].tag=S("path_middle");
world->tileTypes[7].rotation=PI_F32/2;
world->tileTypes[7].collision=false;
world->tileTypes[7].tile=D_ImageHandle(&game->draw, S("path_middle"));
world->tileTypes[7].tag=S("path_middle");
world->tileTypes[8].rotation=-PI_F32;
world->tileTypes[8].collision=false;
world->tileTypes[8].tile=D_ImageHandle(&game->draw, S("path_middle"));
world->tileTypes[8].tag=S("path_middle");
world->tileTypes[9].rotation=-PI_F32/2;
world->tileTypes[9].collision=false;
world->tileTypes[9].tile=D_ImageHandle(&game->draw, S("path_middle"));
world->tileTypes[9].tag=S("path_middle");
world->tileTypes[10].rotation=0;
world->tileTypes[10].collision=false;
world->tileTypes[10].tile=D_ImageHandle(&game->draw, S("path_corner"));
world->tileTypes[10].tag=S("path_corner");
world->tileTypes[11].rotation=PI_F32/2;
world->tileTypes[11].collision=false;
world->tileTypes[11].tile=D_ImageHandle(&game->draw, S("path_corner"));
world->tileTypes[11].tag=S("path_corner");
world->tileTypes[12].rotation=-PI_F32/2;
world->tileTypes[12].collision=false;
world->tileTypes[12].tile=D_ImageHandle(&game->draw, S("path_corner"));
world->tileTypes[12].tag=S("path_corner");
world->tileTypes[13].rotation=PI_F32;
world->tileTypes[13].collision=false;
world->tileTypes[13].tile=D_ImageHandle(&game->draw, S("path_corner"));
world->tileTypes[13].tag=S("path_corner");
world->tileTypes[14].rotation=0;
world->tileTypes[14].collision=false;
world->tileTypes[14].tile=D_ImageHandle(&game->draw, S("tile_dirt_1"));
world->tileTypes[14].tag=S("tile_dirt_1");
world->propTypes[0].assetHandle=D_ImageHandle(&game->draw, S("rug0"));
world->propTypes = M_ArenaPush(arena, World_PropType, .count=WORLD_PROP_TYPE_MAX);
world->propTypes[0].tag=S("rug0");
world->propTypes[0].scale=1;
world->propTypes[1].assetHandle=D_ImageHandle(&game->draw, S("rug1"));
world->propTypes[1].tag=S("rug1");
world->propTypes[1].scale=1;
world->propTypes[2].assetHandle=D_ImageHandle(&game->draw, S("skull"));
world->propTypes[2].tag=S("skull");
world->propTypes[2].scale=1;
world->propTypes[3].assetHandle=D_ImageHandle(&game->draw, S("table"));
world->propTypes[3].scale=1;
world->propTypes[4].assetHandle=D_ImageHandle(&game->draw, S("barrel"));
world->propTypes[3].tag = S("table");
world->propTypes[3].scale=2;
world->propTypes[4].tag = S("barrel");
world->propTypes[4].scale=1;
world->propTypes[5].assetHandle=D_ImageHandle(&game->draw, S("can"));
world->propTypes[5].tag = S("can");
world->propTypes[5].scale=1;
world->propTypes[6].assetHandle=D_ImageHandle(&game->draw, S("candle"));
world->propTypes[6].tag = S("candle");
world->propTypes[6].scale=1;
world->propTypes[7].assetHandle=D_ImageHandle(&game->draw, S("clock"));
world->propTypes[7].tag = S("clock");
world->propTypes[7].scale=1;
world->propTypes[8].assetHandle=D_ImageHandle(&game->draw, S("log_pile"));
world->propTypes[8].tag = S("log_pile");
world->propTypes[8].scale=1;
world->propTypes[9].assetHandle=D_ImageHandle(&game->draw, S("nightstand"));
world->propTypes[9].tag = S("nightstand");
world->propTypes[9].scale=1;
world->propTypes[10].assetHandle=D_ImageHandle(&game->draw, S("pool_table"));
world->propTypes[10].scale=1;
world->propTypes[11].assetHandle=D_ImageHandle(&game->draw, S("saloon_ext"));
world->propTypes[10].tag = S("pool_table");
world->propTypes[10].scale=2;
world->propTypes[11].tag = S("saloon_ext");
world->propTypes[11].scale=6.875f;
world->propTypes[12].assetHandle=D_ImageHandle(&game->draw, S("saloon_int"));
world->propTypes[12].scale=6.875f;
world->propTypes[11].assetHandle=D_ImageHandle(&game->draw, S("house"));
world->propTypes[11].scale=6.875f;
world->propTypes[12].assetHandle=D_ImageHandle(&game->draw, S("house_int"));
world->propTypes[12].scale=6.875f;
world->propTypes[12].tag = S("saloon_int");
world->propTypes[12].scale=2*6.875f;
world->propTypes[13].tag = S("house");
world->propTypes[13].scale=6.875f;
world->propTypes[14].tag = S("house_int");
world->propTypes[14].scale=6.875f;
world->propTypes[15].tag=S("tile_detail_0");
world->propTypes[15].scale=1;
world->propTypes[16].tag = S("tile_detail_1");
world->propTypes[16].scale=1;
world->propTypes[17].tag = S("tile_detail_2");
world->propTypes[17].scale=1;
world->propTypes[18].tag= S("tile_detail_3");
world->propTypes[18].scale=1;
world->propTypes[19].tag= S("tile_detail_4");
world->propTypes[19].scale=1;
world->propTypes[20].tag=S("tile_detail_5");
world->propTypes[20].scale=1;
world->propTypes[21].tag=S("tile_detail_6");
world->propTypes[21].scale=1;
world->propCount = 0;
world->props = M_ArenaPush(arena, World_Prop, .count=WORLD_PROP_MAX);
world->hitboxes = M_ArenaPush(arena, AABB, .count=WORLD_HITBOX_MAX);
}
game->editor.enabled = true;
game->editor.enabled = false;
game->editor.mode = G_EDITOR_MODE_TILE;
game->editor.currentLevel = WORLD_AREA_OUTSIDE;
@@ -328,6 +331,7 @@ int main(int argc, char **argv)
}
case SDLK_SPACE: {
game->editor.mode = (game->editor.mode + 1) % 4;
printf("EDITOR MODE %d\n", game->editor.mode);
break;
}
case SDLK_U: {
@@ -396,18 +400,26 @@ int main(int argc, char **argv)
switch(game->editor.mode) {
case G_EDITOR_MODE_TILE: {
World_Tile asset = game->world->tileTypes[editor.currentAsset];
D_Rect(&game->draw, tilex, tiley, .texture=asset.tile, .angle=asset.rotation);
D_Rect(&game->draw, tilex, tiley, .texture=D_ImageHandle(&game->draw, asset.tag), .angle=asset.rotation);
break;
}
case G_EDITOR_MODE_PROP: {
World_PropType prop = game->world->propTypes[editor.currentAsset];
D_Rect(&game->draw, editor.cursor.x, editor.cursor.y, .texture=prop.assetHandle, .scale=prop.scale);
D_Rect(&game->draw, editor.cursor.x, editor.cursor.y, .texture=D_ImageHandle(&game->draw, prop.tag), .scale=prop.scale);
break;
}
case G_EDITOR_MODE_HITBOX: {
for(int i = 0; i < game->world->hitboxCount; i++) {
V2f centre = AABB_Centre(game->world->hitboxes[i]);
D_Rect(&game->draw, centre.x, centre.y, .texture=0, .dim=game->world->hitboxes[i].size, .flags=D_RECT_IGNORE_ASPECT);
D_Rect(
&game->draw,
centre.x,
centre.y,
.texture=0,
.dim=game->world->hitboxes[i].size,
.flags=D_RECT_IGNORE_ASPECT,
.c=V4F(100,0,0,0.7),
);
}
break;
}