update level editor so the player spawn point can be selected

This commit is contained in:
Hunter 2023-05-27 19:22:06 -04:00
parent 553ab7c1df
commit b7384adc5e
8 changed files with 701 additions and 150 deletions

View file

@ -4,12 +4,12 @@ Size=400,400
Collapsed=0 Collapsed=0
[Window][Phoenix Map Editor] [Window][Phoenix Map Editor]
Pos=851,698 Pos=732,455
Size=556,101 Size=773,153
Collapsed=0 Collapsed=0
[Window][Map Editor Tools] [Window][Map Editor Tools]
Pos=1002,137 Pos=860,128
Size=357,247 Size=357,247
Collapsed=0 Collapsed=0

View file

@ -2,6 +2,8 @@
#include <string> #include <string>
#include <vector> #include <vector>
struct MapPoint {};
struct MapData { struct MapData {
std::vector<std::string> mapTiles; std::vector<std::string> mapTiles;
std::vector<std::string> mapEnemys; std::vector<std::string> mapEnemys;
@ -22,5 +24,6 @@ struct Map {
}; };
Map PLoadMapFromFile(std::string filepath); Map PLoadMapFromFile(std::string filepath);
Map PCreateNewMap(std::string filepath);
void PSaveMapToFile(Map *map, std::string filepath); void PSaveMapToFile(Map *map, std::string filepath);
void PRenderMap(Map *map); void PRenderMap(Map *map, bool debug = false);

View file

@ -3,97 +3,31 @@ MAPVERS 1
MAPAUTH Interfiber MAPAUTH Interfiber
MAPSIZE 10x10 MAPSIZE 10x10
MAPSCAL 3x3 MAPSCAL 3x3
MAPSPWN 32,32 MAPSPWN 32,120
MAP MAP
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
@ -104,39 +38,15 @@ TILE WALL
TILE WALL TILE WALL
TILE FLOOR TILE FLOOR
TILE FLOOR TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR TILE FLOOR
TILE FLOOR TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR TILE FLOOR
TILE FLOOR TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR TILE FLOOR
TILE FLOOR TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE FLOOR
TILE FLOOR TILE FLOOR
TILE FLOOR TILE FLOOR
TILE FLOOR TILE FLOOR
@ -147,61 +57,21 @@ TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL TILE WALL
TILE WALL TILE WALL
TILE WALL TILE WALL

608
maps/ph_example.map Normal file
View file

@ -0,0 +1,608 @@
MAPNAME ph_exampleMap
MAPVERS b1
MAPAUTH JohnDoe
MAPSIZE 20x20
MAPSCAL 3x3
MAPSPWN 499,666
MAP
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
ENDMAP

View file

@ -1,5 +1,7 @@
#include "assets.hpp" #include "assets.hpp"
#include "collision.hpp"
#include "config.hpp" #include "config.hpp"
#include "player.hpp"
#include "state.hpp" #include "state.hpp"
#include "texture.hpp" #include "texture.hpp"
#include <SDL.h> #include <SDL.h>
@ -81,7 +83,7 @@ Map PLoadMapFromFile(std::string filepath) {
return map; return map;
} }
void PRenderMap(Map *map) { void PRenderMap(Map *map, bool debug) {
PhoenixTexture *brickWallTexture = PGetTextureById(BRICK_WALL_TEXTURE_ID); PhoenixTexture *brickWallTexture = PGetTextureById(BRICK_WALL_TEXTURE_ID);
PhoenixTexture *floorTexture = PGetTextureById(FLOOR_TEXTURE_ID); PhoenixTexture *floorTexture = PGetTextureById(FLOOR_TEXTURE_ID);
@ -105,6 +107,27 @@ void PRenderMap(Map *map) {
i++; i++;
} }
if (debug) {
SDL_Rect playerSpawnRect = PGetPlayerRect(&state.player);
playerSpawnRect.x = map->mapPlayerSpawnX;
playerSpawnRect.y = map->mapPlayerSpawnY;
PhoenixTexture *playerTexture =
PGetTextureById(PLAYER_WALK_DOWN_TEXTURE_ID);
PRenderTexture(playerTexture, map->mapPlayerSpawnX, map->mapPlayerSpawnY);
SDL_SetRenderDrawColor(state.renderer, 255, 255, 255, 1);
// Check collision
if (!PCanMoveTo(map->mapPlayerSpawnX, map->mapPlayerSpawnY)) {
SDL_SetRenderDrawColor(state.renderer, 255, 0, 0, 1);
} else {
SDL_SetRenderDrawColor(state.renderer, 255, 255, 255, 1);
}
SDL_RenderDrawRect(state.renderer, &playerSpawnRect);
}
} }
void PSaveMapToFile(Map *map, std::string filepath) { void PSaveMapToFile(Map *map, std::string filepath) {
@ -136,3 +159,19 @@ void PSaveMapToFile(Map *map, std::string filepath) {
mapFile << mapContent; mapFile << mapContent;
mapFile.close(); mapFile.close();
} }
Map PCreateNewMap(std::string filepath) {
Map map{};
map.mapName = "ph_exampleMap";
map.mapVersion = "b1";
map.mapAuthor = "John Doe";
map.mapPlayerSpawnX = 32;
map.mapPlayerSpawnY = 32;
map.mapWidth = 20;
map.mapHeight = 20;
// Write the map to disk
PSaveMapToFile(&map, filepath);
return map;
}

View file

@ -1,4 +1,5 @@
#include "mapEditor.hpp" #include "mapEditor.hpp"
#include "collision.hpp"
#include "imgui.h" #include "imgui.h"
#include "imgui_impl_sdl2.h" #include "imgui_impl_sdl2.h"
#include "imgui_impl_sdlrenderer.h" #include "imgui_impl_sdlrenderer.h"
@ -10,6 +11,7 @@
#include <SDL.h> #include <SDL.h>
#include <SDL_events.h> #include <SDL_events.h>
#include <SDL_keycode.h> #include <SDL_keycode.h>
#include <SDL_mouse.h>
#include <SDL_render.h> #include <SDL_render.h>
#include <stdio.h> #include <stdio.h>
@ -77,17 +79,33 @@ void runMapEditor() {
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
ImGui_ImplSDL2_ProcessEvent(&event); ImGui_ImplSDL2_ProcessEvent(&event);
if (event.type == SDL_MOUSEBUTTONDOWN && !ImGui::IsAnyItemActive() && if (editorState.placingPlayerSpawn && event.type == SDL_MOUSEBUTTONDOWN) {
!ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow) &&
!ImGui::IsAnyItemHovered()) {
if (event.button.button == SDL_BUTTON_LEFT) { if (event.button.button == SDL_BUTTON_LEFT) {
if (editorState.placeTileMode) { int mouseX;
editorState.currentMap.data.mapTiles.push_back( int mouseY;
editorState.selectedTileName); SDL_GetMouseState(&mouseX, &mouseY);
}
} else if (event.button.button == SDL_BUTTON_RIGHT) { SDL_Log("Player spawn is: (%i,%i)", mouseX, mouseY);
if (editorState.placeTileMode) {
editorState.currentMap.data.mapTiles.pop_back(); editorState.currentMap.mapPlayerSpawnX = mouseX;
editorState.currentMap.mapPlayerSpawnY = mouseY;
SDL_Log("Placed player spawn point");
editorState.placingPlayerSpawn = false;
}
} else {
if (event.type == SDL_MOUSEBUTTONDOWN && !ImGui::IsAnyItemActive() &&
!ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow) &&
!ImGui::IsAnyItemHovered()) {
if (event.button.button == SDL_BUTTON_LEFT) {
if (editorState.placeTileMode) {
editorState.currentMap.data.mapTiles.push_back(
editorState.selectedTileName);
}
} else if (event.button.button == SDL_BUTTON_RIGHT) {
if (editorState.placeTileMode) {
editorState.currentMap.data.mapTiles.pop_back();
}
} }
} }
} }
@ -116,10 +134,18 @@ void runMapEditor() {
ImGui::Text("The Phoenix map editor outputs .map files which can be loaded " ImGui::Text("The Phoenix map editor outputs .map files which can be loaded "
"by phoenix"); "by phoenix");
ImGui::InputText("##Level file path", &editorState.mapFilePath); ImGui::InputText("##Level file path", &editorState.mapFilePath);
ImGui::SameLine();
if (ImGui::Button("Load .map file")) { if (ImGui::Button("Load .map file")) {
editorState.currentMap = PLoadMapFromFile(editorState.mapFilePath); editorState.currentMap = PLoadMapFromFile(editorState.mapFilePath);
editorState.loadedMap = true; editorState.loadedMap = true;
PBuildCollisionFromMap(&editorState.currentMap);
}
ImGui::SameLine();
if (ImGui::Button("Create .map file")) {
editorState.currentMap = PCreateNewMap(editorState.mapFilePath);
editorState.loadedMap = true;
PBuildCollisionFromMap(&editorState.currentMap);
} }
ImGui::End(); ImGui::End();
@ -132,6 +158,10 @@ void runMapEditor() {
if (ImGui::Button("Save level file")) { if (ImGui::Button("Save level file")) {
PSaveMapToFile(&editorState.currentMap, editorState.mapFilePath); PSaveMapToFile(&editorState.currentMap, editorState.mapFilePath);
} }
if (ImGui::Button("Place player spawn")) {
editorState.placingPlayerSpawn = true;
SDL_Log("Enabled player spawn point placing mode");
}
ImGui::Text("Viewport scale"); ImGui::Text("Viewport scale");
ImGui::SameLine(); ImGui::SameLine();
@ -182,7 +212,7 @@ void runMapEditor() {
SDL_RenderSetScale(state.renderer, editorState.editorScale, SDL_RenderSetScale(state.renderer, editorState.editorScale,
editorState.editorScale); editorState.editorScale);
if (editorState.loadedMap) { if (editorState.loadedMap) {
PRenderMap(&editorState.currentMap); PRenderMap(&editorState.currentMap, true);
} }
SDL_RenderPresent(state.renderer); SDL_RenderPresent(state.renderer);

View file

@ -6,6 +6,7 @@ struct EditorGlobalState {
std::string mapFilePath; std::string mapFilePath;
bool loadedMap = false; bool loadedMap = false;
bool placeTileMode = false; bool placeTileMode = false;
bool placingPlayerSpawn = false;
Map currentMap; Map currentMap;
const char *selectedTileName = "WALL"; const char *selectedTileName = "WALL";
int editorScale = 1; int editorScale = 1;

View file

@ -36,7 +36,7 @@ PhoenixGame::PhoenixGame() {
// Load textures // Load textures
PRunBoostrap(); PRunBoostrap();
m_currentMap = PLoadMapFromFile("maps/dm_scale.map"); m_currentMap = PLoadMapFromFile("maps/ph_example.map");
PBuildCollisionFromMap(&m_currentMap); PBuildCollisionFromMap(&m_currentMap);
state.camera.x = 0; state.camera.x = 0;