diff --git a/libzork/libzork/src/story/choice.hh b/libzork/libzork/src/story/choice.hh index f080bf6..0646668 100644 --- a/libzork/libzork/src/story/choice.hh +++ b/libzork/libzork/src/story/choice.hh @@ -12,7 +12,6 @@ namespace libzork::story class Choice { public: - Choice() = default; Choice(const Node* node, const std::string& text, const std::vector>& conditions, const std::vector>& actions); diff --git a/libzork/libzork/src/story/node.cc b/libzork/libzork/src/story/node.cc index 343834a..dc6b8b6 100644 --- a/libzork/libzork/src/story/node.cc +++ b/libzork/libzork/src/story/node.cc @@ -1,17 +1,36 @@ +#include #include +#include +#include #include "exceptions.hh" #include "story/node_impl.hh" +std::string readFile(const std::string& path) +{ + std::ifstream in(path, std::ios::binary); + if (!in) + throw std::runtime_error("cannot open file"); + return std::string(std::istreambuf_iterator(in), + std::istreambuf_iterator()); +} + namespace libzork::story { std::unique_ptr make_node(const std::string& name, const fs::path& script_path) { - (void)name; - (void)script_path; - throw NotImplemented(); + std::ifstream a; + a.open(script_path); + if (!a.is_open()) + throw std::runtime_error( + std::string("Could not open script: ").append(script_path)); + + std::string text = std::string(std::istreambuf_iterator(a), + std::istreambuf_iterator()); + + return std::make_unique(NodeImpl{ name, text }); } } // namespace libzork::story diff --git a/libzork/libzork/src/story/node_impl.cc b/libzork/libzork/src/story/node_impl.cc index e216ff3..dfec5e4 100644 --- a/libzork/libzork/src/story/node_impl.cc +++ b/libzork/libzork/src/story/node_impl.cc @@ -8,6 +8,11 @@ namespace libzork::story { + NodeImpl::NodeImpl(const std::string& name, const std::string& text) + : name_{ name } + , text_{ text } + {} + const std::string& NodeImpl::get_name() const { return name_; diff --git a/libzork/libzork/src/story/node_impl.hh b/libzork/libzork/src/story/node_impl.hh index de94ae6..db7f3a6 100644 --- a/libzork/libzork/src/story/node_impl.hh +++ b/libzork/libzork/src/story/node_impl.hh @@ -15,6 +15,7 @@ namespace libzork::story { public: ~NodeImpl() override = default; + NodeImpl(const std::string& name, const std::string& text); const std::string& get_name() const override; const std::string& get_text() const override; @@ -29,8 +30,8 @@ namespace libzork::story std::vector> actions = {}) override; private: - std::string name_; - std::string text_; + const std::string name_; + const std::string text_; std::vector> choices_; }; diff --git a/libzork/libzork/src/story/story.cc b/libzork/libzork/src/story/story.cc index c96b02d..1dca863 100644 --- a/libzork/libzork/src/story/story.cc +++ b/libzork/libzork/src/story/story.cc @@ -1,9 +1,10 @@ #include #include -#include +#include #include #include "exceptions.hh" +#include "story/node_impl.hh" #include "story/story_impl.hh" namespace libzork::story @@ -48,7 +49,11 @@ namespace libzork::story choice["target"].as())); } } - return nullptr; + + // auto res = StoryImpl{ title, nullptr, nullptr }; + // return std::unique_ptr(); + return std::make_unique(title, nullptr, nullptr); + // return nullptr; } } // namespace libzork::story diff --git a/libzork/libzork/src/story/story_impl.cc b/libzork/libzork/src/story/story_impl.cc index 1a036f7..ce785b5 100644 --- a/libzork/libzork/src/story/story_impl.cc +++ b/libzork/libzork/src/story/story_impl.cc @@ -4,6 +4,12 @@ namespace libzork::story { + StoryImpl::StoryImpl(const std::string& title, const Node* current_node, + const store::Store* store) + : title_{ title } + , current_{ current_node } + , store_{ store } + {} const std::string& StoryImpl::get_title() const { diff --git a/libzork/libzork/src/story/story_impl.hh b/libzork/libzork/src/story/story_impl.hh index fda5a85..e3067f6 100644 --- a/libzork/libzork/src/story/story_impl.hh +++ b/libzork/libzork/src/story/story_impl.hh @@ -10,7 +10,7 @@ namespace libzork::story { public: StoryImpl() = default; - StoryImpl(std::string& title, const Node* current_node, + StoryImpl(const std::string& title, const Node* current_node, const store::Store* store); ~StoryImpl() override = default; @@ -21,7 +21,7 @@ namespace libzork::story std::ostream& display(std::ostream& os) const override; private: - std::string title_; + const std::string title_; const Node* current_; const store::Store* store_; };