diff --git a/GlyphsJuke.vcxproj b/GlyphsJuke.vcxproj index 62b1492..80bb1e2 100644 --- a/GlyphsJuke.vcxproj +++ b/GlyphsJuke.vcxproj @@ -182,6 +182,7 @@ + diff --git a/GlyphsJuke.vcxproj.filters b/GlyphsJuke.vcxproj.filters index faa7d5c..d9e576d 100644 --- a/GlyphsJuke.vcxproj.filters +++ b/GlyphsJuke.vcxproj.filters @@ -170,6 +170,9 @@ Header Files + + Header Files + diff --git a/src/InputWindowElement.h b/src/InputWindowElement.h index 792a3ec..45a5524 100644 --- a/src/InputWindowElement.h +++ b/src/InputWindowElement.h @@ -6,6 +6,7 @@ #include "iElement.h" #include "iElementDriver.h" #include "iInputMatcher.h" +#include "Scoreboard.h" #include "Text.h" namespace gj { @@ -17,6 +18,8 @@ class InputWindowElement : public iElement { UniqPtr matcher; UniqPtr driver; + Scoreboard* scoreboard; + Period period; std::wstring text; @@ -31,7 +34,7 @@ class InputWindowElement : public iElement { InputWindowElement(Param&& p) : iElement(p.period), - matcher_(std::move(p.matcher)), drv_(std::move(p.driver)), + matcher_(std::move(p.matcher)), drv_(std::move(p.driver)), sb_(p.scoreboard), text_(p.text), guide_(matcher_->expects()), width_(CountWstrBytes(p.text)) { param_["posX"] = 0.; param_["posY"] = 0.; @@ -43,7 +46,11 @@ class InputWindowElement : public iElement { if (matcher_->done()) break; if (matcher_->Input(c)) { guide_ = Text(matcher_->expects()); + ++sb_->correct; + } else { + ++sb_->miss; } + ++sb_->input; } drv_->Update(param_, t); @@ -62,13 +69,18 @@ class InputWindowElement : public iElement { } void Finalize() override { - /* TODO score calculation */ + ++sb_->lines; + if (matcher_->done()) { + ++sb_->completeLines; + } } private: UniqPtr matcher_; UniqPtr drv_; + Scoreboard* sb_; + Text text_; Text guide_; diff --git a/src/InputWindowElementFactory.h b/src/InputWindowElementFactory.h index 7f84aa5..93ab970 100644 --- a/src/InputWindowElementFactory.h +++ b/src/InputWindowElementFactory.h @@ -19,7 +19,7 @@ class InputWindowElementFactory : public iElementFactory { InputWindowElementFactory& operator=(InputWindowElementFactory&&) = delete; InputWindowElementFactory& operator=(const InputWindowElementFactory&) = delete; - InputWindowElementFactory(iAllocator* alloc) : alloc_(alloc) { + InputWindowElementFactory(iAllocator* alloc, Scoreboard* sb) : alloc_(alloc), sb_(sb) { } UniqPtr Create(Param&& param) override { @@ -29,16 +29,18 @@ class InputWindowElementFactory : public iElementFactory { const std::string kana = std::get(param.custom[1]); InputWindowElement::Param p; - p.period = param.period; - p.driver = std::move(param.driver); - p.matcher = alloc_->MakeUniq(ConvertStrToWstr(kana)); - p.text = ConvertStrToWstr(text); + p.period = param.period; + p.scoreboard = sb_; + p.driver = std::move(param.driver); + p.matcher = alloc_->MakeUniq(ConvertStrToWstr(kana)); + p.text = ConvertStrToWstr(text); return alloc_->MakeUniq(std::move(p)); } private: iAllocator* alloc_; + Scoreboard* sb_; }; diff --git a/src/PlayScene.cc b/src/PlayScene.cc index e75c898..326c0ca 100644 --- a/src/PlayScene.cc +++ b/src/PlayScene.cc @@ -7,8 +7,9 @@ gj::PlayScene::PlayScene(Param&& p) : alloc_(p.alloc), logger_(p.logger), w_(p.w), h_(p.h), clock_(p.clock), store_(&clock_, 256) { + GlyphElementFactory glyph(alloc_); - InputWindowElementFactory inputWin(alloc_); + InputWindowElementFactory inputWin(alloc_, &sb_); Lua::FactoryMap map; map["Glyph"] = &glyph; diff --git a/src/PlayScene.h b/src/PlayScene.h index 8903bae..ad5815c 100644 --- a/src/PlayScene.h +++ b/src/PlayScene.h @@ -8,6 +8,7 @@ #include "iScene.h" #include "Lua.h" #include "OffsetClock.h" +#include "Scoreboard.h" namespace gj { @@ -50,6 +51,7 @@ class PlayScene : public iScene { OffsetClock clock_; + Scoreboard sb_; ElementStore store_; UniqPtr lua_; }; diff --git a/src/Scoreboard.h b/src/Scoreboard.h new file mode 100644 index 0000000..a99a355 --- /dev/null +++ b/src/Scoreboard.h @@ -0,0 +1,20 @@ +#pragma once + +#include + + +namespace gj { + + +struct Scoreboard { + public: + size_t input = 0; + size_t correct = 0; + size_t miss = 0; + + size_t lines = 0; + size_t completeLines = 0; +}; + + +} \ No newline at end of file