void DieAction::dropOnGround(ActorPtr item) { MapPtr map = _performer->getMap(); if ( map != nullptr ) { item->setPosition( _performer->getX(), _performer->getY() ); map->addActor(item); } }
void Destroyable::dropOnGround(ActorPtr item) { ActorPtr owner = getOwner().lock(); if (owner) { MapPtr map = owner->getMap(); if ( map != nullptr ) { item->setMap(nullptr); item->setPosition( owner->getX(), owner->getY() ); map->addActor(item); } } }
bool MoveAction::perform(ActorPtr performer) { bool moved = false; _performer = performer; if ( _performer ) { int newX = performer->getX() + _dx; int newY = performer->getY() + _dy; MapPtr map = performer->getMap(); if ( map ) { moved = true; if ( newX < 0 ) { map->onExit(Direction::West, performer); } else if ( newX >= static_cast<int>(map->getWidth()) ) { map->onExit(Direction::East, performer); } else if ( newY < 0 ) { map->onExit(Direction::North, performer); } else if ( newY >= static_cast<int>(map->getHeight()) ) { map->onExit(Direction::South, performer); } else { if ( !patchIsBlocked() ) { performer->setPosition( newX, newY ); } else { moved = false; } } } } return moved; }
AWindow &CharacterCreationWindow::show() { TCODConsole* console = Engine::instance().getConsole(); if ( console ) { showActivePanel(); TCOD_key_t key; while( !TCODConsole::isWindowClosed() ) { render(*console); Engine::instance().flush(); TCODSystem::waitForEvent(TCOD_EVENT_KEY_PRESS,&key,NULL,true); _panels[_activePanel]->handleKey(key); if ( _enterGame ) { ActorPtr player = Actor::create( _player, false); player->setPosition( Engine::instance().getModule().getStartX(), Engine::instance().getModule().getStartY()); PlayableCharacterPtr c = player->getFeature<PlayableCharacter>(); c->advanceLevel(); Engine::instance().getWorld().changeMap( Engine::instance().getModule().getStartMap() ); Engine::instance().getWorld().setPlayer( player ); Engine::instance().enterGame(); break; } } } return *this; }