Init
This commit is contained in:
commit
159b7e4673
|
@ -0,0 +1 @@
|
|||
*.user
|
|
@ -0,0 +1,11 @@
|
|||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
project(slumber-quest LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||
file(GLOB SOURCES "*.h" "*.cpp" "*/*.h" "*/*.cpp")
|
||||
include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/actors ${CMAKE_SOURCE_DIR}/controllers ${CMAKE_SOURCE_DIR}/entities ${CMAKE_SOURCE_DIR}/policies)
|
||||
|
||||
add_executable(slumber-quest ${SOURCES})
|
|
@ -0,0 +1,7 @@
|
|||
#include "actor.h"
|
||||
|
||||
Actor::Actor()
|
||||
{}
|
||||
|
||||
Actor::~Actor()
|
||||
{}
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef ACTOR_H
|
||||
#define ACTOR_H
|
||||
|
||||
#include <memory>
|
||||
#include <list>
|
||||
|
||||
class Location;
|
||||
class Item;
|
||||
|
||||
class Actor
|
||||
{
|
||||
public:
|
||||
explicit Actor();
|
||||
virtual ~Actor() = 0;
|
||||
|
||||
virtual void commitAction() = 0;
|
||||
virtual void moveToLocation(const std::shared_ptr<Location>& location) = 0;
|
||||
virtual void giveItem(const std::shared_ptr<Item>& item) = 0;
|
||||
virtual void useItem(const std::shared_ptr<Item>& item) = 0;
|
||||
|
||||
protected:
|
||||
std::shared_ptr<Location> _current_location;
|
||||
std::list<std::shared_ptr<Item>> _inventory;
|
||||
};
|
||||
|
||||
#endif // ACTOR_H
|
|
@ -0,0 +1,80 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#include "player.h"
|
||||
#include "location.h"
|
||||
#include "controller.h"
|
||||
#include "item.h"
|
||||
|
||||
Player::Player()
|
||||
{}
|
||||
|
||||
Player::~Player()
|
||||
{}
|
||||
|
||||
void Player::commitAction()
|
||||
{
|
||||
std::cout << ">> ";
|
||||
std::string input;
|
||||
std::cin >> input;
|
||||
std::cout << "\n";
|
||||
|
||||
std::transform(input.begin(), input.end(), input.begin(),
|
||||
[](unsigned char c){ return std::tolower(c); });
|
||||
|
||||
if (input == "inventory")
|
||||
{
|
||||
std::cout << showInventory() << "\n\n";
|
||||
return;
|
||||
}
|
||||
|
||||
for (auto& controller : _current_location->controllers())
|
||||
{
|
||||
if (controller->validateInput(input))
|
||||
{
|
||||
std::shared_ptr<Actor> player_as_actor = shared_from_this();
|
||||
std::cout << controller->interact(player_as_actor) << "\n\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Nothing to do with that. Please think again." << "\n\n";
|
||||
}
|
||||
|
||||
void Player::moveToLocation(const std::shared_ptr<Location> &location)
|
||||
{
|
||||
_current_location = location;
|
||||
}
|
||||
|
||||
void Player::giveItem(const std::shared_ptr<Item>& item)
|
||||
{
|
||||
item->setReceived(true);
|
||||
_inventory.push_back(item);
|
||||
}
|
||||
|
||||
void Player::useItem(const std::shared_ptr<Item>& item)
|
||||
{
|
||||
item->setReceived(false);
|
||||
_inventory.remove(item);
|
||||
}
|
||||
|
||||
std::string Player::showInventory() const
|
||||
{
|
||||
if (_inventory.empty())
|
||||
{
|
||||
return "Your pockets are empty.";
|
||||
}
|
||||
|
||||
std::string inventory_message = "Currently you have ";
|
||||
for (const auto& item : _inventory)
|
||||
{
|
||||
inventory_message += item->label();
|
||||
inventory_message += ", ";
|
||||
}
|
||||
inventory_message.pop_back();
|
||||
inventory_message.pop_back();
|
||||
inventory_message += ".";
|
||||
|
||||
return inventory_message;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef PLAYER_H
|
||||
#define PLAYER_H
|
||||
|
||||
#include "actor.h"
|
||||
|
||||
class Player : public Actor, public std::enable_shared_from_this<Player>
|
||||
{
|
||||
public:
|
||||
explicit Player();
|
||||
virtual ~Player() override;
|
||||
|
||||
virtual void commitAction() override;
|
||||
virtual void moveToLocation(const std::shared_ptr<Location>& location) override;
|
||||
virtual void giveItem(const std::shared_ptr<Item>& item) override;
|
||||
virtual void useItem(const std::shared_ptr<Item>& item) override;
|
||||
|
||||
private:
|
||||
std::string showInventory() const;
|
||||
};
|
||||
|
||||
#endif // PLAYER_H
|
|
@ -0,0 +1,46 @@
|
|||
#include "controller.h"
|
||||
#include "policy.h"
|
||||
#include <algorithm>
|
||||
|
||||
Controller::Controller(Initializer&& initializer) :
|
||||
_keywords(initializer.keywords),
|
||||
_interaction_message(initializer.message)
|
||||
{}
|
||||
|
||||
Controller::~Controller()
|
||||
{}
|
||||
|
||||
bool Controller::validateInput(const std::string &input_word) const
|
||||
{
|
||||
return std::find(_keywords.begin(), _keywords.end(), input_word) != _keywords.end();
|
||||
}
|
||||
|
||||
void Controller::setValidationPolicies(const std::list<std::shared_ptr<Policy>>& policies)
|
||||
{
|
||||
_validation_policies = policies;
|
||||
}
|
||||
|
||||
Controller::ValidationResult Controller::validatePolicies() const
|
||||
{
|
||||
if (_validation_policies.empty())
|
||||
return {true, ""};
|
||||
|
||||
std::string interaction_output;
|
||||
|
||||
bool success = true;
|
||||
for (const auto& policy : _validation_policies)
|
||||
{
|
||||
const auto check_result = policy->check();
|
||||
interaction_output += (check_result.commentary + "\n\n");
|
||||
if (!check_result.satisfied)
|
||||
{
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
interaction_output.pop_back();
|
||||
interaction_output.pop_back();
|
||||
|
||||
return {success, interaction_output};
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#ifndef CONTROLLER_H
|
||||
#define CONTROLLER_H
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <list>
|
||||
|
||||
class Node;
|
||||
class Actor;
|
||||
class Policy;
|
||||
|
||||
class Controller
|
||||
{
|
||||
public:
|
||||
struct Initializer
|
||||
{
|
||||
const std::list<std::string>& keywords;
|
||||
const std::string& message;
|
||||
};
|
||||
|
||||
explicit Controller(Initializer&& initializer);
|
||||
virtual ~Controller() = 0;
|
||||
|
||||
virtual std::string interact(std::shared_ptr<Actor> actor) = 0;
|
||||
virtual bool validateInput(const std::string& input_word) const final;
|
||||
virtual void setValidationPolicies(const std::list<std::shared_ptr<Policy>>& policies) final;
|
||||
|
||||
struct ValidationResult
|
||||
{
|
||||
bool success = false;
|
||||
std::string validation_output;
|
||||
};
|
||||
|
||||
protected:
|
||||
virtual ValidationResult validatePolicies() const final;
|
||||
|
||||
std::list<std::string> _keywords;
|
||||
std::string _interaction_message;
|
||||
std::list<std::shared_ptr<Policy>> _validation_policies;
|
||||
};
|
||||
|
||||
#endif // CONTROLLER_H
|
|
@ -0,0 +1,33 @@
|
|||
#include "itemcontroller.h"
|
||||
#include "item.h"
|
||||
#include "actor.h"
|
||||
#include "policy.h"
|
||||
|
||||
ItemController::ItemController(Initializer &&initializer) :
|
||||
Controller(std::move(initializer))
|
||||
{}
|
||||
|
||||
ItemController::~ItemController()
|
||||
{}
|
||||
|
||||
std::string ItemController::interact(std::shared_ptr<Actor> actor)
|
||||
{
|
||||
std::string interaction_output;
|
||||
|
||||
const auto validation_result = validatePolicies();
|
||||
interaction_output += validation_result.validation_output;
|
||||
|
||||
if (validation_result.success)
|
||||
{
|
||||
actor->giveItem(_item);
|
||||
interaction_output += _interaction_message;
|
||||
}
|
||||
|
||||
return interaction_output;
|
||||
}
|
||||
|
||||
void ItemController::setDependentItem(const std::shared_ptr<Item> &item)
|
||||
{
|
||||
_item = item;
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef ITEMCONTROLLER_H
|
||||
#define ITEMCONTROLLER_H
|
||||
|
||||
#include "controller.h"
|
||||
|
||||
class Item;
|
||||
|
||||
class ItemController : public Controller
|
||||
{
|
||||
public:
|
||||
explicit ItemController(Controller::Initializer&& initializer);
|
||||
virtual ~ItemController() override;
|
||||
|
||||
virtual std::string interact(std::shared_ptr<Actor> actor) override;
|
||||
void setDependentItem(const std::shared_ptr<Item>& item);
|
||||
|
||||
private:
|
||||
std::shared_ptr<Item> _item;
|
||||
};
|
||||
|
||||
#endif // ITEMCONTROLLER_H
|
|
@ -0,0 +1,34 @@
|
|||
#include "locationcontroller.h"
|
||||
#include "location.h"
|
||||
#include "policy.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 = validatePolicies();
|
||||
interaction_output += validation_result.validation_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);
|
||||
}
|
||||
|
||||
return interaction_output;
|
||||
}
|
||||
|
||||
void LocationController::setDependentLocation(const std::shared_ptr<Location> &location)
|
||||
{
|
||||
_location = location;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef LOCATIONCONTROLLER_H
|
||||
#define LOCATIONCONTROLLER_H
|
||||
|
||||
#include "controller.h"
|
||||
|
||||
class Location;
|
||||
|
||||
class LocationController : public Controller
|
||||
{
|
||||
public:
|
||||
explicit LocationController(Controller::Initializer&& initializer);
|
||||
virtual ~LocationController() override;
|
||||
|
||||
virtual std::string interact(std::shared_ptr<Actor> actor) override;
|
||||
void setDependentLocation(const std::shared_ptr<Location>& location);
|
||||
|
||||
private:
|
||||
std::shared_ptr<Location> _location;
|
||||
};
|
||||
|
||||
#endif // LOCATIONCONTROLLER_H
|
|
@ -0,0 +1,21 @@
|
|||
#include "item.h"
|
||||
|
||||
Item::Item(const std::string &label) :
|
||||
_label(label),
|
||||
_is_received(false)
|
||||
{}
|
||||
|
||||
const std::string& Item::label() const
|
||||
{
|
||||
return _label;
|
||||
}
|
||||
|
||||
bool Item::isReceived() const
|
||||
{
|
||||
return _is_received;
|
||||
}
|
||||
|
||||
void Item::setReceived(bool received)
|
||||
{
|
||||
_is_received = received;
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef ITEM_H
|
||||
#define ITEM_H
|
||||
|
||||
#include <string>
|
||||
|
||||
class Item
|
||||
{
|
||||
public:
|
||||
explicit Item(const std::string& label);
|
||||
|
||||
const std::string& label() const;
|
||||
bool isReceived() const;
|
||||
void setReceived(bool received);
|
||||
|
||||
private:
|
||||
std::string _label;
|
||||
bool _is_received;
|
||||
};
|
||||
|
||||
#endif // ITEM_H
|
|
@ -0,0 +1,24 @@
|
|||
#include "location.h"
|
||||
#include <algorithm>
|
||||
|
||||
Location::Location(Initializer &&initializer) :
|
||||
_interaction_message(initializer.message),
|
||||
_interactive_controllers(initializer.interactive_controllers),
|
||||
_is_visited(false)
|
||||
{}
|
||||
|
||||
const std::string& Location::interact()
|
||||
{
|
||||
_is_visited = true;
|
||||
return _interaction_message;
|
||||
}
|
||||
|
||||
const std::list<std::shared_ptr<Controller>>& Location::controllers()
|
||||
{
|
||||
return _interactive_controllers;
|
||||
}
|
||||
|
||||
bool Location::isVisited() const
|
||||
{
|
||||
return _is_visited;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef LOCATION_H
|
||||
#define LOCATION_H
|
||||
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
|
||||
class Controller;
|
||||
|
||||
class Location
|
||||
{
|
||||
public:
|
||||
struct Initializer
|
||||
{
|
||||
const std::string& message;
|
||||
const std::list<std::shared_ptr<Controller>>& interactive_controllers;
|
||||
};
|
||||
|
||||
explicit Location(Initializer &&initializer);
|
||||
|
||||
virtual const std::string& interact();
|
||||
|
||||
const std::list<std::shared_ptr<Controller>>& controllers();
|
||||
bool isVisited() const;
|
||||
|
||||
private:
|
||||
std::string _interaction_message;
|
||||
std::list<std::shared_ptr<Controller>> _interactive_controllers;
|
||||
std::shared_ptr<Location> _current_user_location;
|
||||
bool _is_visited;
|
||||
};
|
||||
|
||||
#endif // LOCATION_H
|
|
@ -0,0 +1,7 @@
|
|||
#include "levelbuilder.h"
|
||||
|
||||
LevelBuilder::LevelBuilder()
|
||||
{}
|
||||
|
||||
LevelBuilder::~LevelBuilder()
|
||||
{}
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef LEVELBUILDER_H
|
||||
#define LEVELBUILDER_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
class Controller;
|
||||
|
||||
class LevelBuilder
|
||||
{
|
||||
public:
|
||||
explicit LevelBuilder();
|
||||
virtual ~LevelBuilder() = 0;
|
||||
|
||||
virtual void init() = 0;
|
||||
virtual void save() = 0;
|
||||
virtual void load() = 0;
|
||||
|
||||
virtual const std::shared_ptr<Controller>& getStartingController() const = 0;
|
||||
};
|
||||
|
||||
#endif // LEVELBUILDER_H
|
|
@ -0,0 +1,20 @@
|
|||
#include <iostream>
|
||||
|
||||
#include "controller.h"
|
||||
#include "player.h"
|
||||
#include "sandboxlevelbuilder.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
std::unique_ptr<LevelBuilder> level_builder = std::make_unique<SandboxLevelBuilder>();
|
||||
level_builder->init();
|
||||
|
||||
std::shared_ptr<Player> player = std::make_unique<Player>();
|
||||
const auto& starting_controller = level_builder->getStartingController();
|
||||
std::cout << starting_controller->interact(player) << "\n\n";
|
||||
|
||||
while (true)
|
||||
{
|
||||
player->commitAction();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
#include "itemrequiredpolicy.h"
|
||||
#include "item.h"
|
||||
|
||||
ItemRequiredPolicy::ItemRequiredPolicy(const std::string& satisfaction, const std::string& dissatisfaction) :
|
||||
Policy(satisfaction, dissatisfaction)
|
||||
{}
|
||||
|
||||
ItemRequiredPolicy::~ItemRequiredPolicy()
|
||||
{}
|
||||
|
||||
Policy::CheckResult ItemRequiredPolicy::check() const
|
||||
{
|
||||
bool success = _item->isReceived();
|
||||
return composeMessageFromResult(success);
|
||||
}
|
||||
|
||||
void ItemRequiredPolicy::setRequiredItem(const std::shared_ptr<Item> &item)
|
||||
{
|
||||
_item = item;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef ITEMREQUIREDPOLICY_H
|
||||
#define ITEMREQUIREDPOLICY_H
|
||||
|
||||
#include <memory>
|
||||
#include "policy.h"
|
||||
|
||||
class Item;
|
||||
|
||||
class ItemRequiredPolicy : public Policy
|
||||
{
|
||||
public:
|
||||
explicit ItemRequiredPolicy(const std::string& satisfaction, const std::string& dissatisfaction);
|
||||
virtual ~ItemRequiredPolicy() override;
|
||||
|
||||
virtual Policy::CheckResult check() const override;
|
||||
|
||||
void setRequiredItem(const std::shared_ptr<Item>& item);
|
||||
|
||||
private:
|
||||
std::shared_ptr<Item> _item;
|
||||
};
|
||||
|
||||
#endif // ITEMREQUIREDPOLICY_H
|
|
@ -0,0 +1,20 @@
|
|||
#include "locationrequiredpolicy.h"
|
||||
#include "location.h"
|
||||
|
||||
LocationRequiredPolicy::LocationRequiredPolicy(const std::string& satisfaction, const std::string& dissatisfaction) :
|
||||
Policy(satisfaction, dissatisfaction)
|
||||
{}
|
||||
|
||||
LocationRequiredPolicy::~LocationRequiredPolicy()
|
||||
{}
|
||||
|
||||
Policy::CheckResult LocationRequiredPolicy::check() const
|
||||
{
|
||||
bool success = _location->isVisited();
|
||||
return composeMessageFromResult(success);
|
||||
}
|
||||
|
||||
void LocationRequiredPolicy::setRequiredLocation(const std::shared_ptr<Location> &location)
|
||||
{
|
||||
_location = location;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef LOCATIONREQUIREDPOLICY_H
|
||||
#define LOCATIONREQUIREDPOLICY_H
|
||||
|
||||
#include <memory>
|
||||
#include "policy.h"
|
||||
|
||||
class Location;
|
||||
|
||||
class LocationRequiredPolicy : public Policy
|
||||
{
|
||||
public:
|
||||
explicit LocationRequiredPolicy(const std::string& satisfaction, const std::string& dissatisfaction);
|
||||
virtual ~LocationRequiredPolicy() override;
|
||||
|
||||
virtual Policy::CheckResult check() const override;
|
||||
|
||||
void setRequiredLocation(const std::shared_ptr<Location>& location);
|
||||
|
||||
private:
|
||||
std::shared_ptr<Location> _location;
|
||||
};
|
||||
|
||||
#endif // LOCATIONREQUIREDPOLICY_H
|
|
@ -0,0 +1,16 @@
|
|||
#include "policy.h"
|
||||
|
||||
Policy::Policy(const std::string& satisfaction, const std::string& dissatisfaction) :
|
||||
_commentary_on_satisfaction(satisfaction),
|
||||
_commentary_on_dissatisfaction(dissatisfaction)
|
||||
{}
|
||||
|
||||
Policy::~Policy()
|
||||
{}
|
||||
|
||||
Policy::CheckResult Policy::composeMessageFromResult(bool result) const
|
||||
{
|
||||
return {result, (result)
|
||||
? _commentary_on_satisfaction
|
||||
: _commentary_on_dissatisfaction};
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
#ifndef POLICY_H
|
||||
#define POLICY_H
|
||||
|
||||
#include <string>
|
||||
|
||||
class Policy
|
||||
{
|
||||
public:
|
||||
explicit Policy(const std::string& satisfaction, const std::string& dissatisfaction);
|
||||
virtual ~Policy() = 0;
|
||||
|
||||
struct CheckResult
|
||||
{
|
||||
bool satisfied = false;
|
||||
std::string commentary;
|
||||
};
|
||||
|
||||
virtual CheckResult check() const = 0;
|
||||
|
||||
protected:
|
||||
virtual CheckResult composeMessageFromResult(bool result) const final;
|
||||
|
||||
std::string _commentary_on_satisfaction;
|
||||
std::string _commentary_on_dissatisfaction;
|
||||
};
|
||||
|
||||
#endif // POLICY_H
|
|
@ -0,0 +1,99 @@
|
|||
#include "sandboxlevelbuilder.h"
|
||||
#include "location.h"
|
||||
#include "item.h"
|
||||
#include "locationcontroller.h"
|
||||
#include "itemcontroller.h"
|
||||
#include "itemrequiredpolicy.h"
|
||||
#include <iostream>
|
||||
|
||||
SandboxLevelBuilder::SandboxLevelBuilder()
|
||||
{}
|
||||
|
||||
SandboxLevelBuilder::~SandboxLevelBuilder()
|
||||
{}
|
||||
|
||||
void SandboxLevelBuilder::init()
|
||||
{
|
||||
// START GAME TRIGGER
|
||||
Controller::Initializer the_first_and_only_trigger_init = {{}, "Hello! This is a test run."};
|
||||
std::shared_ptr<LocationController> the_first_and_only_trigger = std::make_shared<LocationController>(std::move(the_first_and_only_trigger_init));
|
||||
|
||||
// DOOR CONTROLLER
|
||||
Controller::Initializer door_init = {{"door"}, "You successfully opened the door and entered the house."};
|
||||
std::shared_ptr<LocationController> door_cont = std::make_shared<LocationController>(std::move(door_init));
|
||||
|
||||
// TABLE CONTROLLER
|
||||
Controller::Initializer table_init = {{"table"}, "You approached the table."};
|
||||
std::shared_ptr<LocationController> table_cont = std::make_shared<LocationController>(std::move(table_init));
|
||||
|
||||
// TENSHI CONTROLLER
|
||||
Controller::Initializer tenshi_init = {{"tenshi", "card", "postcard"}, "You picked up cute postcard of tenshi eating corndog. Now you are happy."};
|
||||
std::shared_ptr<ItemController> tenshi_cont = std::make_shared<ItemController>(std::move(tenshi_init));
|
||||
|
||||
// COUCH CONTROLLER
|
||||
Controller::Initializer couch_init = {{"couch", "sofa"}, "You approached the coach."};
|
||||
std::shared_ptr<LocationController> couch_cont = std::make_shared<LocationController>(std::move(couch_init));
|
||||
|
||||
// COACH FROM TABLE CONTROLLER
|
||||
Controller::Initializer coach2_init = {{"coach", "sofa"}, "You slowly moved away from the table and approached the coach."};
|
||||
std::shared_ptr<LocationController> coach2_cont = std::make_shared<LocationController>(std::move(coach2_init));
|
||||
|
||||
// PLEROMAN CONTROLLER
|
||||
Controller::Initializer pleroman_init = {{"pleroman"}, "You talk to a pleroma user! What a happy and carefree creature. He even brew you some cofe!"};
|
||||
std::shared_ptr<LocationController> pleroman_cont = std::make_shared<LocationController>(std::move(pleroman_init));
|
||||
std::shared_ptr<ItemRequiredPolicy> need_tenshi_policy = std::make_shared<ItemRequiredPolicy>("You give him the postcard of Tenshi.", "He doesn't want to talk to you. Make him trust you!!");
|
||||
pleroman_cont->setValidationPolicies({need_tenshi_policy});
|
||||
|
||||
// START LOCATION
|
||||
auto&& init_msg = "You are now in a staring location. There is a door leading to a house. Typical text quest situation. To interact with something, type it as noun.";
|
||||
Location::Initializer init = {init_msg, {door_cont}};
|
||||
std::shared_ptr<Location> start = std::make_shared<Location>(std::move(init));
|
||||
|
||||
// ROOM LOCATION
|
||||
auto&& room_msg = "This is an old room. You can see only a rusty table and a coach. Also there is a pleroma user standing still.";
|
||||
Location::Initializer roomloc_init = {room_msg, {table_cont, couch_cont, pleroman_cont}};
|
||||
std::shared_ptr<Location> room = std::make_shared<Location>(std::move(roomloc_init));
|
||||
|
||||
// TABLE LOCATION
|
||||
auto&& table_msg = "Boring table. There is a flashy postcard on it.";
|
||||
Location::Initializer tableloc_init = {table_msg, {coach2_cont, tenshi_cont, pleroman_cont}};
|
||||
std::shared_ptr<Location> table = std::make_shared<Location>(std::move(tableloc_init));
|
||||
|
||||
// COUCH LOCATION
|
||||
auto&& couch_msg = "Looks like the coach was comfy... several years ago. Now probably it only feeds roaches. Better not touch it.";
|
||||
Location::Initializer couchloc_init = {couch_msg, {table_cont, pleroman_cont}};
|
||||
std::shared_ptr<Location> couch = std::make_shared<Location>(std::move(couchloc_init));
|
||||
|
||||
// PLEROMAN LOCATION
|
||||
auto&& pleroman_msg = ". . . \n\n From the conversation you find out the quest is still in a very raw test state, the engine isn't even finished... Alright, just terminate the game process.";
|
||||
Location::Initializer pleromanloc_init = {pleroman_msg, {}};
|
||||
std::shared_ptr<Location> pleroman = std::make_shared<Location>(std::move(pleromanloc_init));
|
||||
|
||||
std::shared_ptr<Item> tenshi = std::make_shared<Item>("Postcard of Tenshi eating corndog");
|
||||
need_tenshi_policy->setRequiredItem(tenshi);
|
||||
|
||||
the_first_and_only_trigger->setDependentLocation(start);
|
||||
door_cont->setDependentLocation(room);
|
||||
table_cont->setDependentLocation(table);
|
||||
couch_cont->setDependentLocation(couch);
|
||||
coach2_cont->setDependentLocation(couch);
|
||||
pleroman_cont->setDependentLocation(pleroman);
|
||||
tenshi_cont->setDependentItem(tenshi);
|
||||
|
||||
_starting_controller = the_first_and_only_trigger;
|
||||
}
|
||||
|
||||
void SandboxLevelBuilder::save()
|
||||
{
|
||||
std::cerr << "SandboxLevelBuilder::save : Not implemented!";
|
||||
}
|
||||
|
||||
void SandboxLevelBuilder::load()
|
||||
{
|
||||
std::cerr << "SandboxLevelBuilder::load : Not implemented!";
|
||||
}
|
||||
|
||||
const std::shared_ptr<Controller> &SandboxLevelBuilder::getStartingController() const
|
||||
{
|
||||
return _starting_controller;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef SANDBOXLEVELBUILDER_H
|
||||
#define SANDBOXLEVELBUILDER_H
|
||||
|
||||
#include "levelbuilder.h"
|
||||
|
||||
class SandboxLevelBuilder : public LevelBuilder
|
||||
{
|
||||
public:
|
||||
explicit SandboxLevelBuilder();
|
||||
virtual ~SandboxLevelBuilder() override;
|
||||
|
||||
virtual void init() override;
|
||||
virtual void save() override;
|
||||
virtual void load() override;
|
||||
|
||||
virtual const std::shared_ptr<Controller>& getStartingController() const override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<Controller> _starting_controller;
|
||||
};
|
||||
|
||||
#endif // SANDBOXLEVELBUILDER_H
|
Loading…
Reference in New Issue