Adjust game process to new game context
This commit is contained in:
parent
45132ff82a
commit
c24ecc0acc
|
@ -34,14 +34,9 @@ void ClassicArrowNote::input(kku::GameEvent&& input)
|
||||||
_context->input(this, std::move(input));
|
_context->input(this, std::move(input));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassicArrowNote::setGraphics(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager, kku::TimeRange&& range) const
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClassicArrowNote::draw(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager) const
|
void ClassicArrowNote::draw(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager) const
|
||||||
{
|
{
|
||||||
graphics_manager->draw(this);
|
graphics_manager->draw(_elements);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClassicArrowNote::isHold() const
|
bool ClassicArrowNote::isHold() const
|
||||||
|
@ -49,7 +44,7 @@ bool ClassicArrowNote::isHold() const
|
||||||
return _is_holding;
|
return _is_holding;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<ArrowElement>& ClassicArrowNote::getElements() const
|
std::vector<ArrowElement>& ClassicArrowNote::getElements()
|
||||||
{
|
{
|
||||||
return _elements;
|
return _elements;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,11 +35,10 @@ public:
|
||||||
virtual bool isActive(const kku::microsec& offset) const override;
|
virtual bool isActive(const kku::microsec& offset) const override;
|
||||||
virtual void update(const kku::microsec &music_offset) override;
|
virtual void update(const kku::microsec &music_offset) override;
|
||||||
virtual void input(kku::GameEvent&& input) override;
|
virtual void input(kku::GameEvent&& input) override;
|
||||||
virtual void setGraphics(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager, kku::TimeRange&& range) const override;
|
|
||||||
virtual void draw(const std::shared_ptr<const ClassicGraphicsManager> &graphics_manager) const override;
|
virtual void draw(const std::shared_ptr<const ClassicGraphicsManager> &graphics_manager) const override;
|
||||||
|
|
||||||
bool isHold() const;
|
bool isHold() const;
|
||||||
const std::vector<ArrowElement>& getElements() const;
|
std::vector<ArrowElement>& getElements();
|
||||||
Grade calculatePrecision(const kku::microsec& offset) const;
|
Grade calculatePrecision(const kku::microsec& offset) const;
|
||||||
bool isPressedAs(kku::SystemEvent::Key::Code key) const;
|
bool isPressedAs(kku::SystemEvent::Key::Code key) const;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "classicmapcreator.h"
|
#include "classicmapcreator.h"
|
||||||
#include "gamecontext.h"
|
#include "gamecontext.h"
|
||||||
#include "holdmanager.h"
|
#include "holdmanager.h"
|
||||||
|
#include "graphics/classicgraphicsmanager.h"
|
||||||
|
|
||||||
ClassicGame::ClassicGame(const std::shared_ptr<kku::Timeline<ClassicNote>>& timeline,
|
ClassicGame::ClassicGame(const std::shared_ptr<kku::Timeline<ClassicNote>>& timeline,
|
||||||
const std::shared_ptr<GameContext>& context) :
|
const std::shared_ptr<GameContext>& context) :
|
||||||
|
@ -60,9 +61,10 @@ void ClassicGame::update(kku::UpdateData&& updatedata)
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
_timeline->update(updatedata.timestamp);
|
_timeline->update(updatedata.timestamp);
|
||||||
|
_context->getGraphicsManager()->update(updatedata.timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassicGame::display() const
|
void ClassicGame::display() const
|
||||||
{
|
{
|
||||||
_context->display();
|
_context->getGraphicsManager()->display();
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,11 @@ void GameContext::update(ClassicArrowNote *note, const kku::microsec& music_offs
|
||||||
default: return;
|
default: return;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ClassicArrowNote::State::INITIAL:
|
||||||
|
note->setState(ClassicArrowNote::State::FLYING);
|
||||||
|
_graphics_manager->update(music_offset, note);
|
||||||
|
break;
|
||||||
|
|
||||||
case ClassicArrowNote::State::FLYING:
|
case ClassicArrowNote::State::FLYING:
|
||||||
if (!note->isActive(music_offset) && music_offset > note->getPerfectOffset())
|
if (!note->isActive(music_offset) && music_offset > note->getPerfectOffset())
|
||||||
{
|
{
|
||||||
|
@ -91,7 +96,7 @@ std::shared_ptr<HoldManager> GameContext::getHoldManager() const
|
||||||
return _hold_manager;
|
return _hold_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameContext::display() const
|
std::shared_ptr<ClassicGraphicsManager> GameContext::getGraphicsManager() const
|
||||||
{
|
{
|
||||||
_graphics_manager->display();
|
return _graphics_manager;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,9 +14,9 @@ public:
|
||||||
|
|
||||||
virtual void input(ClassicArrowNote *note, kku::GameEvent&& input) const override;
|
virtual void input(ClassicArrowNote *note, kku::GameEvent&& input) const override;
|
||||||
virtual void update(ClassicArrowNote *note, const kku::microsec &music_offset) const override;
|
virtual void update(ClassicArrowNote *note, const kku::microsec &music_offset) const override;
|
||||||
virtual void display() const override;
|
|
||||||
|
|
||||||
std::shared_ptr<HoldManager> getHoldManager() const;
|
std::shared_ptr<HoldManager> getHoldManager() const;
|
||||||
|
std::shared_ptr<ClassicGraphicsManager> getGraphicsManager() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::shared_ptr<HoldManager> _hold_manager;
|
const std::shared_ptr<HoldManager> _hold_manager;
|
||||||
|
|
|
@ -4,8 +4,10 @@
|
||||||
#include "core/gameevent.h"
|
#include "core/gameevent.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class ClassicArrowNote;
|
class ClassicArrowNote;
|
||||||
|
class ArrowElement;
|
||||||
// class ClassicSliderNote;
|
// class ClassicSliderNote;
|
||||||
|
|
||||||
class ClassicGraphicsManager : public std::enable_shared_from_this<ClassicGraphicsManager>
|
class ClassicGraphicsManager : public std::enable_shared_from_this<ClassicGraphicsManager>
|
||||||
|
@ -18,10 +20,12 @@ public:
|
||||||
|
|
||||||
virtual void input(kku::GameEvent&& input) = 0;
|
virtual void input(kku::GameEvent&& input) = 0;
|
||||||
virtual void display() const = 0;
|
virtual void display() const = 0;
|
||||||
|
virtual void update(const kku::microsec& offset) = 0;
|
||||||
|
|
||||||
virtual void update(const kku::microsec& offset, ClassicArrowNote* note) = 0;
|
virtual void update(const kku::microsec& offset, ClassicArrowNote* note) = 0;
|
||||||
// virtual void update(const kku::microsec& offset, ClassicSliderNote* note) = 0;
|
// virtual void update(const kku::microsec& offset, ClassicSliderNote* note) = 0;
|
||||||
|
|
||||||
virtual void draw(const ClassicArrowNote* note) const = 0;
|
virtual void draw(const std::vector<ArrowElement>& elements) const = 0;
|
||||||
// virtual void draw(ClassicSliderNote* note) const = 0;
|
// virtual void draw(ClassicSliderNote* note) const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -37,19 +37,23 @@ void ClassicSceneGraphicsManager::display() const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassicSceneGraphicsManager::update(const kku::microsec& offset, ClassicArrowNote* note)
|
void ClassicSceneGraphicsManager::update(const kku::microsec &offset)
|
||||||
{
|
{
|
||||||
//TODO
|
|
||||||
(void)note;
|
|
||||||
fetchLastNote(offset);
|
fetchLastNote(offset);
|
||||||
fetchFirstNote(offset);
|
fetchFirstNote(offset);
|
||||||
|
|
||||||
updateVisibleNotes(offset);
|
updateVisibleNotes(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassicSceneGraphicsManager::draw(const ClassicArrowNote* note) const
|
void ClassicSceneGraphicsManager::update(const kku::microsec& offset, ClassicArrowNote* note)
|
||||||
|
{
|
||||||
|
bool hasGraphics = (note->getElements()[0].sprite != nullptr);
|
||||||
|
if (isVisiblyClose(note, offset) && (!hasGraphics))
|
||||||
|
setGraphics(note->getElements(), kku::TimeRange{note->getPerfectOffset() - _visibility_offset, note->getPerfectOffset()});
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClassicSceneGraphicsManager::draw(const std::vector<ArrowElement>& elements) const
|
||||||
{
|
{
|
||||||
auto& elements = note->getElements();
|
|
||||||
for (std::size_t i = 0; i < elements.size(); ++i)
|
for (std::size_t i = 0; i < elements.size(); ++i)
|
||||||
{
|
{
|
||||||
const auto& sprite = elements[i].sprite;
|
const auto& sprite = elements[i].sprite;
|
||||||
|
@ -89,9 +93,9 @@ bool ClassicSceneGraphicsManager::nothingToDraw() const noexcept
|
||||||
|| _timeline->isExpired(_last);
|
|| _timeline->isExpired(_last);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClassicSceneGraphicsManager::isVisiblyClose(const Iterator& iterator, const kku::microsec& music_offset) const noexcept
|
bool ClassicSceneGraphicsManager::isVisiblyClose(const ClassicNote * const note, const kku::microsec& music_offset) const noexcept
|
||||||
{
|
{
|
||||||
return ((*iterator)->getPerfectOffset() - _visibility_offset) <= music_offset;
|
return (note->getPerfectOffset() - _visibility_offset) <= music_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassicSceneGraphicsManager::fetchFirstNote(const kku::microsec& offset)
|
void ClassicSceneGraphicsManager::fetchFirstNote(const kku::microsec& offset)
|
||||||
|
@ -102,7 +106,7 @@ void ClassicSceneGraphicsManager::fetchFirstNote(const kku::microsec& offset)
|
||||||
if (offset < (*_first)->getPerfectOffset())
|
if (offset < (*_first)->getPerfectOffset())
|
||||||
{
|
{
|
||||||
Iterator note_iterator = _first;
|
Iterator note_iterator = _first;
|
||||||
while (note_iterator != _timeline->begin() && isVisiblyClose(note_iterator, offset))
|
while (note_iterator != _timeline->begin() && isVisiblyClose(*note_iterator, offset))
|
||||||
{
|
{
|
||||||
--note_iterator;
|
--note_iterator;
|
||||||
}
|
}
|
||||||
|
@ -110,12 +114,13 @@ void ClassicSceneGraphicsManager::fetchFirstNote(const kku::microsec& offset)
|
||||||
_first = note_iterator;
|
_first = note_iterator;
|
||||||
|
|
||||||
auto note = *_first;
|
auto note = *_first;
|
||||||
if (note->getState() != ClassicNote::State::FLYING
|
const auto state = note->getState();
|
||||||
&& note->getState() != ClassicNote::State::DYING
|
if (state != ClassicNote::State::FLYING
|
||||||
|
&& state != ClassicNote::State::DYING
|
||||||
|
&& state != ClassicNote::State::INITIAL
|
||||||
&& offset <= note->getPerfectOffset())
|
&& offset <= note->getPerfectOffset())
|
||||||
{
|
{
|
||||||
note->setState(ClassicNote::State::FLYING);
|
note->setState(ClassicNote::State::INITIAL);
|
||||||
note->setGraphics(shared_from_this(), kku::TimeRange{note->getPerfectOffset() - _visibility_offset, note->getPerfectOffset()});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -138,19 +143,19 @@ void ClassicSceneGraphicsManager::fetchFirstNote(const kku::microsec& offset)
|
||||||
void ClassicSceneGraphicsManager::fetchLastNote(const kku::microsec& offset)
|
void ClassicSceneGraphicsManager::fetchLastNote(const kku::microsec& offset)
|
||||||
{
|
{
|
||||||
Iterator note_iterator = _timeline->getTopNote();
|
Iterator note_iterator = _timeline->getTopNote();
|
||||||
while (!_timeline->isExpired(note_iterator) && isVisiblyClose(note_iterator, offset))
|
while (!_timeline->isExpired(note_iterator) && isVisiblyClose(*note_iterator, offset))
|
||||||
{
|
{
|
||||||
if (nothingToDraw())
|
if (nothingToDraw())
|
||||||
_first = note_iterator;
|
_first = note_iterator;
|
||||||
|
|
||||||
auto note = *note_iterator;
|
auto note = *note_iterator;
|
||||||
|
const auto state = note->getState();
|
||||||
if (note->getState() != ClassicNote::State::FLYING
|
if (state != ClassicNote::State::FLYING
|
||||||
&& note->getState() != ClassicNote::State::DYING
|
&& state != ClassicNote::State::DYING
|
||||||
|
&& state != ClassicNote::State::INITIAL
|
||||||
&& offset <= note->getPerfectOffset())
|
&& offset <= note->getPerfectOffset())
|
||||||
{
|
{
|
||||||
note->setState(ClassicNote::State::FLYING);
|
note->setState(ClassicNote::State::INITIAL);
|
||||||
note->setGraphics(shared_from_this(), kku::TimeRange{note->getPerfectOffset() - _visibility_offset, note->getPerfectOffset()});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
++note_iterator;
|
++note_iterator;
|
||||||
|
|
|
@ -20,9 +20,10 @@ public:
|
||||||
|
|
||||||
virtual void input(kku::GameEvent&& input) override;
|
virtual void input(kku::GameEvent&& input) override;
|
||||||
virtual void display() const override;
|
virtual void display() const override;
|
||||||
|
virtual void update(const kku::microsec& offset) override;
|
||||||
|
|
||||||
virtual void update(const kku::microsec& offset, ClassicArrowNote* note) override;
|
virtual void update(const kku::microsec& offset, ClassicArrowNote* note) override;
|
||||||
virtual void draw(const ClassicArrowNote* note) const override;
|
virtual void draw(const std::vector<ArrowElement>& elements) const override;
|
||||||
virtual void setGraphics(std::vector<ArrowElement>& elements, kku::TimeRange&& range);
|
virtual void setGraphics(std::vector<ArrowElement>& elements, kku::TimeRange&& range);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -37,7 +38,7 @@ protected:
|
||||||
const std::shared_ptr<kku::Timeline<ClassicNote>> _timeline;
|
const std::shared_ptr<kku::Timeline<ClassicNote>> _timeline;
|
||||||
|
|
||||||
inline bool nothingToDraw() const noexcept;
|
inline bool nothingToDraw() const noexcept;
|
||||||
inline bool isVisiblyClose(const Iterator& iterator, const kku::microsec& music_offset) const noexcept;
|
inline bool isVisiblyClose(const ClassicNote * const note, const kku::microsec& music_offset) const noexcept;
|
||||||
void fetchFirstNote(const kku::microsec& offset);
|
void fetchFirstNote(const kku::microsec& offset);
|
||||||
void fetchLastNote(const kku::microsec& offset);
|
void fetchLastNote(const kku::microsec& offset);
|
||||||
void updateVisibleNotes(const kku::microsec& offset);
|
void updateVisibleNotes(const kku::microsec& offset);
|
||||||
|
|
|
@ -13,9 +13,10 @@ public:
|
||||||
{
|
{
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
|
|
||||||
FLYING = 1,
|
INITIAL = 1,
|
||||||
DYING = 2,
|
FLYING = 2,
|
||||||
DEAD = 3
|
DYING = 3,
|
||||||
|
DEAD = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit ClassicNote(const kku::microsec& perfect_offset);
|
explicit ClassicNote(const kku::microsec& perfect_offset);
|
||||||
|
@ -24,8 +25,6 @@ public:
|
||||||
virtual bool isActive(const kku::microsec& offset) const override = 0;
|
virtual bool isActive(const kku::microsec& offset) const override = 0;
|
||||||
virtual void update(const kku::microsec &music_offset) override = 0;
|
virtual void update(const kku::microsec &music_offset) override = 0;
|
||||||
virtual void input(kku::GameEvent&& input) override = 0;
|
virtual void input(kku::GameEvent&& input) override = 0;
|
||||||
|
|
||||||
virtual void setGraphics(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager, kku::TimeRange&& range) const = 0;
|
|
||||||
virtual void draw(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager) const = 0;
|
virtual void draw(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager) const = 0;
|
||||||
|
|
||||||
void setState(State state) noexcept;
|
void setState(State state) noexcept;
|
||||||
|
|
|
@ -12,5 +12,4 @@ public:
|
||||||
|
|
||||||
virtual void input(ClassicArrowNote *note, kku::GameEvent&& input) const = 0;
|
virtual void input(ClassicArrowNote *note, kku::GameEvent&& input) const = 0;
|
||||||
virtual void update(ClassicArrowNote *note, const kku::microsec &music_offset) const = 0;
|
virtual void update(ClassicArrowNote *note, const kku::microsec &music_offset) const = 0;
|
||||||
virtual void display() const = 0;
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue