X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=2611a722aeba9b20ebf2431e33606e846be645e8;hb=d71217e2be1466726581146000a0f61620423e9b;hp=c1b70af05f1dc492d717c17679a11150fe659285;hpb=e6ba365d8f4b261687d4947d6b78f08c7fda1cdb;p=l2e.git diff --git a/src/main.cpp b/src/main.cpp index c1b70af..2611a72 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,23 +1,22 @@ -/* - * main.cpp - * - * Created on: Aug 1, 2012 - * Author: holy - */ - #include "app/Application.h" #include "app/Arguments.h" #include "app/Input.h" #include "battle/BattleState.h" +#include "battle/Capsule.h" #include "battle/Hero.h" #include "battle/Monster.h" #include "battle/PartyLayout.h" #include "battle/Resources.h" -#include "battle/Stats.h" +#include "common/Capsule.h" +#include "common/GameConfig.h" +#include "common/GameState.h" +#include "common/Hero.h" #include "common/Ikari.h" #include "common/Inventory.h" #include "common/Item.h" +#include "common/Script.h" #include "common/Spell.h" +#include "common/Stats.h" #include "geometry/Vector.h" #include "graphics/ComplexAnimation.h" #include "graphics/Font.h" @@ -26,6 +25,7 @@ #include "graphics/Menu.h" #include "graphics/SimpleAnimation.h" #include "graphics/Sprite.h" +#include "graphics/Texture.h" #include "loader/Caster.h" #include "loader/Interpreter.h" #include "loader/ParsedSource.h" @@ -37,6 +37,7 @@ #include "map/MapState.h" #include "map/Tile.h" #include "map/Trigger.h" +#include "menu/Resources.h" #include "sdl/InitImage.h" #include "sdl/InitScreen.h" #include "sdl/InitSDL.h" @@ -54,33 +55,22 @@ using app::Application; using app::Arguments; using app::Input; using battle::BattleState; -using battle::Hero; using battle::Monster; using battle::PartyLayout; -using battle::Stats; -using common::Ikari; -using common::Inventory; -using common::Item; +using common::Capsule; +using common::GameConfig; +using common::GameState; +using common::Hero; using common::Spell; using geometry::Vector; -using graphics::ComplexAnimation; -using graphics::Font; -using graphics::Frame; -using graphics::Gauge; -using graphics::Menu; -using graphics::SimpleAnimation; -using graphics::Sprite; +using graphics::Texture; using loader::Caster; using loader::Interpreter; using loader::ParsedSource; using loader::Parser; using loader::TypeDescription; -using map::Area; using map::Entity; -using map::Map; using map::MapState; -using map::Tile; -using map::Trigger; using sdl::InitImage; using sdl::InitScreen; using sdl::InitSDL; @@ -93,13 +83,12 @@ using std::string; using std::vector; int main(int argc, char **argv) { - const int width = 800; - const int height = 480; + const int width = 512; + const int height = 448; - const int tileSize = 32; const float walkSpeed = 128.0f; - const bool battle(false); + bool battle(false); // std::srand(std::time(0)); @@ -107,24 +96,38 @@ int main(int argc, char **argv) { InitSDL sdl; InitImage image(IMG_INIT_PNG); - battle::Resources::CreateTypeDescription(); - ComplexAnimation::CreateTypeDescription(); - Font::CreateTypeDescription(); - Frame::CreateTypeDescription(); - Gauge::CreateTypeDescription(); - Hero::CreateTypeDescription(); - Ikari::CreateTypeDescription(); Interpreter::CreateTypeDescriptions(); - Item::CreateTypeDescription(); - graphics::MenuProperties::CreateTypeDescription(); - Monster::CreateTypeDescription(); - PartyLayout::CreateTypeDescription(); - SimpleAnimation::CreateTypeDescription(); - Spell::CreateTypeDescription(); - Sprite::CreateTypeDescription(); - Stats::CreateTypeDescription(); + + battle::Resources::CreateTypeDescription(); + battle::Monster::CreateTypeDescription(); + battle::PartyLayout::CreateTypeDescription(); + + common::Capsule::CreateTypeDescription(); + common::Hero::CreateTypeDescription(); + common::Ikari::CreateTypeDescription(); + common::Item::CreateTypeDescription(); + common::Stats::CreateTypeDescription(); + common::Spell::CreateTypeDescription(); common::TargetingMode::CreateTypeDescription(); + graphics::Animation::CreateTypeDescription(); + graphics::ComplexAnimation::CreateTypeDescription(); + graphics::Font::CreateTypeDescription(); + graphics::Frame::CreateTypeDescription(); + graphics::Gauge::CreateTypeDescription(); + graphics::MenuProperties::CreateTypeDescription(); + graphics::SimpleAnimation::CreateTypeDescription(); + graphics::Sprite::CreateTypeDescription(); + graphics::Texture::CreateTypeDescription(); + + map::Area::CreateTypeDescription(); + map::Entity::CreateTypeDescription(); + map::Map::CreateTypeDescription(); + map::Tile::CreateTypeDescription(); + map::Trigger::CreateTypeDescription(); + + menu::Resources::CreateTypeDescription(); + Arguments args; args.Read(argc, argv); @@ -134,7 +137,7 @@ int main(int argc, char **argv) { Parser(*i, source).Parse(); } - switch (args.DetectRunLevel()) { + switch (args.GetRunLevel()) { case Arguments::WRITE: { int length(std::strlen(args.OutfilePath())); @@ -154,7 +157,15 @@ int main(int argc, char **argv) { std::cout << source << std::endl; return 0; } + case Arguments::SOURCE_WIKI: { + TypeDescription::WriteSourceWiki(std::cout); + return 0; + } + case Arguments::BATTLE: + battle = true; + break; case Arguments::PLAY: + case Arguments::MAP: break; } @@ -170,241 +181,135 @@ int main(int argc, char **argv) { Caster caster(intp); + GameState gameState; + + gameState.heroes[0] = *caster.GetHero("maxim"); + gameState.heroes[1] = *caster.GetHero("selan"); + gameState.heroes[2] = *caster.GetHero("guy"); + gameState.heroes[3] = *caster.GetHero("dekar"); + + gameState.party[0] = &gameState.heroes[0]; + gameState.party[1] = &gameState.heroes[1]; + gameState.party[2] = &gameState.heroes[2]; + gameState.party[3] = &gameState.heroes[3]; + gameState.partySize = 4; + + gameState.capsules[0] = *caster.GetCapsule("flash"); + gameState.capsule = gameState.capsules; + + GameConfig gameConfig; + gameConfig.state = &gameState; + gameConfig.heroesLayout = caster.GetPartyLayout("heroesLayout"); + gameConfig.battleResources = caster.GetBattleResources("battleResources"); + gameConfig.menuResources = caster.GetMenuResources("menuResources"); + // temporary test data SDL_Surface *bg(IMG_Load("test-data/battle-bg.png")); PartyLayout monstersLayout(*caster.GetPartyLayout("monstersLayout")); - PartyLayout heroesLayout(*caster.GetPartyLayout("heroesLayout")); Monster monster(*caster.GetMonster("lizard")); - Hero maxim(*caster.GetHero("maxim")); - Hero selan(*caster.GetHero("selan")); - Hero guy(*caster.GetHero("guy")); - Hero dekar(*caster.GetHero("dekar")); - - battle::Resources *battleRes(caster.GetBattleResources("battleResources")); - maxim.AddSpell(caster.GetSpell("resetSpell")); + gameState.heroes[0].AddSpell(caster.GetSpell("resetSpell")); Spell *strongSpell(caster.GetSpell("strongSpell")); - maxim.AddSpell(strongSpell); - selan.AddSpell(strongSpell); + gameState.heroes[0].AddSpell(strongSpell); + gameState.heroes[1].AddSpell(strongSpell); Spell *strongerSpell(caster.GetSpell("strongerSpell")); - maxim.AddSpell(strongerSpell); - selan.AddSpell(strongerSpell); + gameState.heroes[0].AddSpell(strongerSpell); + gameState.heroes[1].AddSpell(strongerSpell); Spell *championSpell(caster.GetSpell("championSpell")); - maxim.AddSpell(championSpell); - selan.AddSpell(championSpell); + gameState.heroes[0].AddSpell(championSpell); + gameState.heroes[1].AddSpell(championSpell); Spell *rallySpell(caster.GetSpell("rallySpell")); - maxim.AddSpell(rallySpell); - selan.AddSpell(rallySpell); - selan.AddSpell(caster.GetSpell("escapeSpell")); + gameState.heroes[0].AddSpell(rallySpell); + gameState.heroes[1].AddSpell(rallySpell); + gameState.heroes[1].AddSpell(caster.GetSpell("escapeSpell")); Spell *valorSpell(caster.GetSpell("valorSpell")); - maxim.AddSpell(valorSpell); - selan.AddSpell(valorSpell); - - Inventory inventory; - inventory.Add(caster.GetItem("antidoteItem"), 9); - inventory.Add(caster.GetItem("magicJarItem"), 4); - inventory.Add(caster.GetItem("hiPotionItem"), 4); - inventory.Add(caster.GetItem("powerPotionItem"), 4); - inventory.Add(caster.GetItem("escapeItem"), 2); - inventory.Add(caster.GetItem("sleepBallItem"), 1); - battleRes->inventory = &inventory; - - maxim.SetWeapon(caster.GetItem("zircoSwordItem")); - maxim.SetArmor(caster.GetItem("zirconArmorItem")); - maxim.SetShield(caster.GetItem("holyShieldItem")); - maxim.SetHelmet(caster.GetItem("legendHelmItem")); - maxim.SetRing(caster.GetItem("sProRingItem")); - maxim.SetJewel(caster.GetItem("evilJewelItem")); - -// selan.SetWeapon(cst.GetItem("zircoWhipItem")); - selan.SetArmor(caster.GetItem("zirconPlateItem")); - selan.SetShield(caster.GetItem("zircoGlovesItem")); - selan.SetHelmet(caster.GetItem("holyCapItem")); - selan.SetRing(caster.GetItem("ghostRingItem")); - selan.SetJewel(caster.GetItem("eagleRockItem")); - -// guy.SetWeapon(cst.GetItem("zircoAxItem")); - guy.SetArmor(caster.GetItem("zirconArmorItem")); - guy.SetShield(caster.GetItem("megaShieldItem")); - guy.SetHelmet(caster.GetItem("zircoHelmetItem")); - guy.SetRing(caster.GetItem("powerRingItem")); - guy.SetJewel(caster.GetItem("evilJewelItem")); + gameState.heroes[0].AddSpell(valorSpell); + gameState.heroes[1].AddSpell(valorSpell); + + gameState.inventory.Add(caster.GetItem("zirconPlateItem")); + gameState.inventory.Add(caster.GetItem("antidoteItem"), 9); + gameState.inventory.Add(caster.GetItem("powerRingItem")); + gameState.inventory.Add(caster.GetItem("magicJarItem"), 4); + gameState.inventory.Add(caster.GetItem("sProRingItem")); + gameState.inventory.Add(caster.GetItem("hiPotionItem"), 4); + gameState.inventory.Add(caster.GetItem("powerRingItem")); + gameState.inventory.Add(caster.GetItem("powerPotionItem"), 4); + gameState.inventory.Add(caster.GetItem("zircoSwordItem")); + gameState.inventory.Add(caster.GetItem("escapeItem"), 2); + gameState.inventory.Add(caster.GetItem("zircoHelmetItem")); + gameState.inventory.Add(caster.GetItem("sleepBallItem"), 1); + gameState.inventory.Add(caster.GetItem("zirconPlateItem")); + + gameState.heroes[0].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("zircoSwordItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("zirconArmorItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("holyShieldItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("legendHelmItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_RING, caster.GetItem("sProRingItem")); + gameState.heroes[0].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("evilJewelItem")); + +// gameState.heroes[1].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("zircoWhipItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("zirconPlateItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("zircoGlovesItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("holyCapItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_RING, caster.GetItem("ghostRingItem")); + gameState.heroes[1].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("eagleRockItem")); + +// gameState.heroes[2].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("zircoAxItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("zirconArmorItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("megaShieldItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("zircoHelmetItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_RING, caster.GetItem("powerRingItem")); + gameState.heroes[2].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("evilJewelItem")); // NOTE: this is actually Artea equipment -// dekar.SetWeapon(cst.GetItem("lizardBlowItem")); - dekar.SetArmor(caster.GetItem("holyRobeItem")); - dekar.SetShield(caster.GetItem("zircoGlovesItem")); - dekar.SetHelmet(caster.GetItem("holyCapItem")); - dekar.SetRing(caster.GetItem("rocketRingItem")); - dekar.SetJewel(caster.GetItem("krakenRockItem")); - - Tile tiles[64]; - - tiles[ 0].SetOffset(Vector(2, 1)); - tiles[ 1].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_WEST); - tiles[ 2].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles[ 3].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_EAST); - tiles[ 4].SetOffset(Vector(0, 1)); - tiles[ 5].SetOffset(Vector(2, 0)); - tiles[ 6].SetOffset(Vector(2, 0)); - tiles[ 7].SetOffset(Vector(2, 0)); - - tiles[ 8].SetOffset(Vector(2, 1)); - tiles[ 9].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles[10].SetOffset(Vector(3, 0)); - tiles[11].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles[12].SetOffset(Vector(0, 2)); - tiles[13].SetOffset(Vector(1, 2)); - tiles[14].SetOffset(Vector(1, 2)); - tiles[15].SetOffset(Vector(1, 2)); - - tiles[16].SetOffset(Vector(2, 1)); - tiles[17].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles[18].SetOffset(Vector(3, 0)); - tiles[19].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles[20].SetOffset(Vector(0, 3)); - tiles[21].SetOffset(Vector(1, 3)); - tiles[22].SetOffset(Vector(1, 3)); - tiles[23].SetOffset(Vector(2, 3)); - - tiles[24].SetOffset(Vector(2, 1)); - tiles[25].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles[26].SetOffset(Vector(3, 0)); - tiles[27].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles[28].SetOffset(Vector(0, 4)); - tiles[29].SetOffset(Vector(1, 4)); - tiles[30].SetOffset(Vector(1, 4)); - tiles[31].SetOffset(Vector(2, 4)); - - tiles[32].SetOffset(Vector(2, 1)); - tiles[33].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles[34].SetOffset(Vector(3, 0)); - tiles[35].SetOffset(Vector(3, 0)); - tiles[36].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles[37].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles[38].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH); - tiles[39].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_NORTH | Tile::BLOCK_EAST); - - tiles[40].SetOffset(Vector(2, 1)); - tiles[41].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles[42].SetOffset(Vector(3, 0)); - tiles[43].SetOffset(Vector(3, 0)); - tiles[44].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles[45].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles[46].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles[47].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH | Tile::BLOCK_EAST); - - tiles[48].SetOffset(Vector(2, 1)); - tiles[49].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_WEST); - tiles[50].SetOffset(Vector(3, 0)); - tiles[51].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_EAST); - tiles[52].SetOffset(Vector(0, 0)); - tiles[53].SetOffset(Vector(1, 0)); - tiles[54].SetOffset(Vector(1, 0)); - tiles[55].SetOffset(Vector(1, 0)); - - tiles[56].SetOffset(Vector(2, 1)); - tiles[57].SetOffset(Vector(4, 0)).SetFlags(Tile::BLOCK_SOUTH | Tile::BLOCK_WEST); - tiles[58].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH); - tiles[59].SetOffset(Vector(3, 0)).SetFlags(Tile::BLOCK_SOUTH | Tile::BLOCK_EAST); - tiles[60].SetOffset(Vector(0, 1)); - tiles[61].SetOffset(Vector(1, 1)); - tiles[62].SetOffset(Vector(1, 1)); - tiles[63].SetOffset(Vector(1, 1)); - - Area areas[1]; - areas[0].SetTiles(tiles, 64); - areas[0].SetWidth(8); - - Trigger triggers[1]; - triggers[0].SetTilePosition(Vector(2, 0)); - - SDL_Surface *tilesetImg(IMG_Load("test-data/tileset.png")); - Sprite tileset(tilesetImg, tileSize, tileSize); - - Map map; - map.SetAreas(areas, 1); - map.SetTileset(&tileset); - map.SetTriggers(triggers, 1); - map.SetWidth(1); - - SDL_Surface *mapMaximImg(IMG_Load("test-data/maxim-map.png")); - Sprite mapMaximSprite(mapMaximImg, 32, 64); - SimpleAnimation mapMaximAnimation(&mapMaximSprite, (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapMaxim; - mapMaxim.SetAnimation(&mapMaximAnimation); - mapMaxim.Position() = Vector(64, 128); - mapMaxim.SpriteOffset() = Vector(0, -32); - - SDL_Surface *mapSelanImg(IMG_Load("test-data/selan-map.png")); - Sprite mapSelanSprite(mapSelanImg, 32, 64); - SimpleAnimation mapSelanAnimation(&mapSelanSprite, (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapSelan; - mapSelan.SetAnimation(&mapSelanAnimation); - mapSelan.Position() = Vector(64, 128); - mapSelan.SpriteOffset() = Vector(0, -32); - mapMaxim.AddFollower(&mapSelan); - - SDL_Surface *mapGuyImg(IMG_Load("test-data/guy-map.png")); - Sprite mapGuySprite(mapGuyImg, 32, 64); - SimpleAnimation mapGuyAnimation(&mapGuySprite, (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapGuy; - mapGuy.SetAnimation(&mapGuyAnimation); - mapGuy.Position() = Vector(64, 128); - mapGuy.SpriteOffset() = Vector(0, -32); - mapSelan.AddFollower(&mapGuy); - - SDL_Surface *mapDekarImg(IMG_Load("test-data/dekar-map.png")); - Sprite mapDekarSprite(mapDekarImg, 32, 64); - SimpleAnimation mapDekarAnimation(&mapDekarSprite, (tileSize/walkSpeed) / 2 * 1000, 2, 0, 0, true); - Entity mapDekar; - mapDekar.SetAnimation(&mapDekarAnimation); - mapDekar.Position() = Vector(64, 128); - mapDekar.SpriteOffset() = Vector(0, -32); - mapGuy.AddFollower(&mapDekar); - - SDL_Surface *mapMonsterImg(IMG_Load("test-data/monster-map.png")); - Sprite mapMonsterSprite(mapMonsterImg, 32, 32); - SimpleAnimation mapMonsterAnimation(&mapMonsterSprite, 500, 2, 0, 0, true); - Entity mapMonster; - mapMonster.SetAnimation(&mapMonsterAnimation); - mapMonster.Position() = Vector(64, 32); - mapMonster.SetOrientation(Entity::ORIENTATION_SOUTH); +// gameState.heroes[3].SetEquipment(Hero::EQUIP_WEAPON, caster.GetItem("lizardBlowItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_ARMOR, caster.GetItem("holyRobeItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_SHIELD, caster.GetItem("zircoGlovesItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_HELMET, caster.GetItem("holyCapItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_RING, caster.GetItem("rocketRingItem")); + gameState.heroes[3].SetEquipment(Hero::EQUIP_JEWEL, caster.GetItem("krakenRockItem")); + + gameState.heroes[0].MapEntity().Position() = Vector(64, 128); + + gameState.heroes[1].MapEntity().Position() = Vector(64, 128); + gameState.heroes[1].MapEntity().SetFlags(Entity::FLAG_NONBLOCKING); + gameState.heroes[0].MapEntity().AddFollower(&gameState.heroes[1].MapEntity()); + + gameState.heroes[2].MapEntity().Position() = Vector(64, 128); + gameState.heroes[2].MapEntity().SetFlags(Entity::FLAG_NONBLOCKING); + gameState.heroes[1].MapEntity().AddFollower(&gameState.heroes[2].MapEntity()); + + gameState.heroes[3].MapEntity().Position() = Vector(64, 128); + gameState.heroes[3].MapEntity().SetFlags(Entity::FLAG_NONBLOCKING); + gameState.heroes[2].MapEntity().AddFollower(&gameState.heroes[3].MapEntity()); InitScreen screen(width, height); app::State *state(0); if (battle) { - BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, battleRes)); + BattleState *battleState(new BattleState(&gameConfig, bg, &monstersLayout)); battleState->AddMonster(monster); battleState->AddMonster(monster); battleState->AddMonster(monster); battleState->AddMonster(monster); - battleState->AddHero(maxim); - battleState->AddHero(selan); - battleState->AddHero(guy); - battleState->AddHero(dekar); + battleState->SetCapsule(caster.GetCapsule("flash")); + battleState->AddHero(gameState.heroes[0]); + battleState->AddHero(gameState.heroes[1]); + battleState->AddHero(gameState.heroes[2]); + battleState->AddHero(gameState.heroes[3]); state = battleState; } else { - MapState *mapState(new MapState(&map)); - - mapState->AddEntity(&mapMaxim); - mapState->AddEntity(&mapSelan); - mapState->AddEntity(&mapGuy); - mapState->AddEntity(&mapDekar); + MapState *mapState(new MapState(&gameConfig, caster.GetMap("map1"))); - mapState->ControlEntity(&mapMaxim); + mapState->ControlEntity(&gameState.heroes[0].MapEntity()); mapState->SetWalkingSpeed(walkSpeed); - mapState->AddEntity(&mapMonster); - mapMonster.StartAnimation(*mapState); - state = mapState; } - Application app(&screen, state); + Application app(screen, state); app.Buttons().MapKey(SDLK_w, Input::PAD_UP); app.Buttons().MapKey(SDLK_d, Input::PAD_RIGHT); app.Buttons().MapKey(SDLK_s, Input::PAD_DOWN); @@ -417,6 +322,10 @@ int main(int argc, char **argv) { app.Buttons().MapKey(SDLK_SPACE, Input::SELECT); app.Buttons().MapKey(SDLK_RSHIFT, Input::SHOULDER_RIGHT); app.Buttons().MapKey(SDLK_LSHIFT, Input::SHOULDER_LEFT); + app.Buttons().MapKey(SDLK_1, Input::DEBUG_1); + app.Buttons().MapKey(SDLK_2, Input::DEBUG_2); + app.Buttons().MapKey(SDLK_3, Input::DEBUG_3); + app.Buttons().MapKey(SDLK_4, Input::DEBUG_4); app.Run(); return 0;