diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp index 6f6d060..b3ecab9 100644 --- a/src/saland/Game.cpp +++ b/src/saland/Game.cpp @@ -888,6 +888,11 @@ void Game::Update() { data->gameRegion.world.init_physics(data->gameRegion.physicsBox); globalData.pendingSpawnLake = false; } + if (!globalData.pendingSpawnItem.empty()) { + ItemDef itemDef = getItem(globalData.pendingSpawnItem); + data->gameRegion.SpawnItem(itemDef, static_cast(data->world_mouse_x), static_cast(data->world_mouse_y)); + globalData.pendingSpawnItem.clear(); + } if (data->consoleActive && data->console && !data->console->IsActive()) { data->consoleActive = false; } diff --git a/src/saland/GameConsoleCommand.cpp b/src/saland/GameConsoleCommand.cpp index c899559..5df09f5 100644 --- a/src/saland/GameConsoleCommand.cpp +++ b/src/saland/GameConsoleCommand.cpp @@ -261,6 +261,24 @@ struct ConsoleCommandSpawnLake : public ConsoleCommand { } }; +struct ConsoleCommandSpawnItem : public ConsoleCommand { + virtual std::string getCommand() const override { + return "spawn_item"; + } + + virtual std::string run(const std::vector& args) override { + if (args.size() < 2) { + throw std::runtime_error("Must be called like: spawn_item ITEM_NAME"); + } + globalData.pendingSpawnItem = args[1]; + return "Item '" + args[1] + "' will spawn at mouse position"; + } + + virtual std::string helpMessage() const override { + return "Spawns an item at the current mouse position. Usage: spawn_item ITEM_NAME"; + } +}; + static ConsoleCommandGiveItem cc_give_item; static ConsoleCommandItem cc_item; static ConsoleCommandQuit cc_quit; @@ -268,6 +286,7 @@ static ConsoleCommandConfig cc_config; static DrawOverlayConsoleCommand docc; static ConsoleCommandSpawn cc_spawn; static ConsoleCommandSpawnLake cc_spawn_lake; +static ConsoleCommandSpawnItem cc_spawn_item; void GameConsoleCommandRegister() { RegisterCommand(&cc_give_item); @@ -277,4 +296,5 @@ void GameConsoleCommandRegister() { RegisterCommand(&docc); RegisterCommand(&cc_spawn); RegisterCommand(&cc_spawn_lake); + RegisterCommand(&cc_spawn_item); } \ No newline at end of file diff --git a/src/saland/globals.hpp b/src/saland/globals.hpp index 75cc468..557f731 100644 --- a/src/saland/globals.hpp +++ b/src/saland/globals.hpp @@ -71,6 +71,7 @@ struct GlobalData { SpawnCommand pendingSpawnCommand; bool pendingSpawnLake = false; + std::string pendingSpawnItem; // Item name to spawn at mouse position }; extern GlobalData globalData;