slumber-quest/controllers/locationcontroller.cpp

40 lines
1.0 KiB
C++

#include "locationcontroller.h"
#include "location.h"
#include "validator.h"
#include "actor.h"
LocationController::LocationController(Initializer &&initializer) :
Controller(std::move(initializer))
{}
LocationController::~LocationController()
{}
std::string LocationController::interact(std::shared_ptr<Actor> actor)
{
std::string interaction_output;
const auto validation_result = _validator
? _validator->validate(actor)
: Validator::ValidateResult{true, ""};
interaction_output += validation_result.validate_output;
if (validation_result.success)
{
actor->moveToLocation(_location);
const std::string& node_interact_message = _location->interact();
interaction_output += (_interaction_message + "\n\n" + node_interact_message);
}
runModificators();
return interaction_output;
}
void LocationController::setDependentLocation(const std::shared_ptr<Location> &location)
{
_location = location;
}