Untie dependecies and make them more abstract
parent
5b7076ac1c
commit
a028773fe8
@ -1,19 +1,24 @@
|
||||
#include "classicgraphicsmanager.h"
|
||||
#include "classicnote.h"
|
||||
|
||||
ClassicGraphicsManager::ClassicGraphicsManager() :
|
||||
_sprite_container({Action::PRESS_UP, Action::PRESS_DOWN,
|
||||
Action::PRESS_LEFT, Action::PRESS_RIGHT},
|
||||
std::make_unique<ClassicSpriteFactory>("VeraMono.ttf"))
|
||||
ClassicGraphicsManager::ClassicGraphicsManager(sf::RenderTarget& target) :
|
||||
_sprite_container({Type::UP, Type::DOWN,
|
||||
Type::LEFT, Type::RIGHT},
|
||||
std::make_unique<ClassicSpriteFactory>("VeraMono.ttf")),
|
||||
_render_target(target)
|
||||
{}
|
||||
|
||||
void ClassicGraphicsManager::initSprite(ClassicNote* note)
|
||||
{
|
||||
const auto action_type = note->action();
|
||||
note->setSprite(_sprite_container.getSprite(action_type));
|
||||
note->setSprite(_sprite_container.getSprite(note->type()));
|
||||
}
|
||||
|
||||
void ClassicGraphicsManager::resetSprite(ClassicNote* note)
|
||||
{
|
||||
_sprite_container.resetSprite(note->sprite(), note->action());
|
||||
_sprite_container.resetSprite(note->sprite(), note->type());
|
||||
}
|
||||
|
||||
void ClassicGraphicsManager::draw(const ClassicNote *note)
|
||||
{
|
||||
_render_target.draw(*note->sprite());
|
||||
}
|
||||
|
@ -1,20 +0,0 @@
|
||||
#include "classicinputtype.h"
|
||||
|
||||
ClassicInputType::ClassicInputType(const microsec& timestamp, Action action) :
|
||||
InputType(timestamp),
|
||||
_action(action)
|
||||
{}
|
||||
|
||||
ClassicInputType::~ClassicInputType()
|
||||
{}
|
||||
|
||||
bool ClassicInputType::operator==(const Action& comparing_action) const
|
||||
{
|
||||
return _action == comparing_action;
|
||||
}
|
||||
|
||||
bool ClassicInputType::operator==(const ClassicInputType& comparing_action) const
|
||||
{
|
||||
return _action == comparing_action._action
|
||||
&& _button == comparing_action._button;
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
#ifndef CLASSICINPUTTYPE_H
|
||||
#define CLASSICINPUTTYPE_H
|
||||
|
||||
#include "classicactions.h"
|
||||
#include "inputtype.h"
|
||||
|
||||
class ClassicInputType : public InputType
|
||||
{
|
||||
public:
|
||||
explicit ClassicInputType(const microsec& timestamp, Action action);
|
||||
virtual ~ClassicInputType() override;
|
||||
|
||||
bool operator==(const Action& comparing_action) const;
|
||||
bool operator==(const ClassicInputType& comparing_action) const;
|
||||
|
||||
private:
|
||||
Action _action;
|
||||
Button _button;
|
||||
};
|
||||
|
||||
#endif // CLASSICINPUTTYPE_H
|
@ -0,0 +1,39 @@
|
||||
#include "classicmapcreator.h"
|
||||
#include "classicnote.h"
|
||||
|
||||
ClassicMapCreator::ClassicMapCreator(const std::unique_ptr<ClassicGraphicsManager>& manager) :
|
||||
_graphics_manager(manager)
|
||||
{}
|
||||
|
||||
Beatmap ClassicMapCreator::createBeatmap(const std::string& filepath) const
|
||||
{
|
||||
(void) filepath;
|
||||
|
||||
microsec starting_beat_offset = 352162;
|
||||
int amount_of_beats = 209;
|
||||
microsec interval = 1412162;
|
||||
microsec tempo_interval = interval / 2;
|
||||
microsec note_input_offset = 412162 / 3;
|
||||
microsec bpm_iterator = starting_beat_offset;
|
||||
microsec bpm_end = starting_beat_offset + (interval * amount_of_beats);
|
||||
|
||||
std::vector<microsec> input_intervals = {note_input_offset / 3, note_input_offset / 3 * 2, note_input_offset};
|
||||
std::vector<Note*> notes;
|
||||
input_intervals.shrink_to_fit();
|
||||
|
||||
bpm_iterator += tempo_interval;
|
||||
|
||||
float x = 90.;
|
||||
|
||||
while (bpm_iterator < bpm_end)
|
||||
{
|
||||
notes.emplace_back(new ClassicNote(input_intervals, bpm_iterator, Type::UP, {x, 390.}, _graphics_manager));
|
||||
bpm_iterator += tempo_interval;
|
||||
x += 70;
|
||||
|
||||
if (x >= 1200)
|
||||
x = 90.;
|
||||
}
|
||||
|
||||
return {std::move(notes), note_input_offset * 12};
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
#ifndef CLASSICMAPCREATOR_H
|
||||
#define CLASSICMAPCREATOR_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "note.h"
|
||||
#include "classicgraphicsmanager.h"
|
||||
|
||||
struct Beatmap
|
||||
{
|
||||
std::vector<Note*> notes;
|
||||
microsec visibility_offset;
|
||||
};
|
||||
|
||||
class ClassicMapCreator
|
||||
{
|
||||
public:
|
||||
explicit ClassicMapCreator(const std::unique_ptr<ClassicGraphicsManager>& manager);
|
||||
|
||||
Beatmap createBeatmap(const std::string& filepath) const;
|
||||
|
||||
private:
|
||||
const std::unique_ptr<ClassicGraphicsManager>& _graphics_manager;
|
||||
};
|
||||
|
||||
#endif // CLASSICMAPCREATOR_H
|
@ -1,45 +0,0 @@
|
||||
#include "classicnoteactivestate.h"
|
||||
#include "../classicnote.h"
|
||||
#include "../classicsprite.h"
|
||||
|
||||
auto ClassicNoteActiveState::value() const -> Value
|
||||
{
|
||||
return Value::ACTIVE;
|
||||
}
|
||||
|
||||
auto ClassicNoteActiveState::update(const ClassicNote* note, const microsec& offset) -> Value
|
||||
{
|
||||
float i;
|
||||
auto update_time = offset - note->getApearanceTime(); // This all will be inside ::update
|
||||
i = update_time / note->getOneTrailPercent() * 0.01; // of an animation object
|
||||
|
||||
const auto& coordinates = note->getCoordinates();
|
||||
const auto& sprite = note->sprite();
|
||||
float xa = getPt( coordinates.x + 20. , coordinates.x + 90. , i );
|
||||
float ya = getPt( coordinates.y - 600. , coordinates.y - 150. , i );
|
||||
float xb = getPt( coordinates.x + 90. , coordinates.x , i );
|
||||
float yb = getPt( coordinates.y - 150. , coordinates.y , i );
|
||||
|
||||
sprite->update(getPt( xa , xb , i ), getPt( ya , yb , i ));
|
||||
if (i >= 1)
|
||||
{
|
||||
sprite->trailFade();
|
||||
}
|
||||
|
||||
if (!note->isActive(offset))
|
||||
return Value::DYING;
|
||||
|
||||
return value();
|
||||
}
|
||||
|
||||
constexpr int ClassicNoteActiveState::getPt(float n1, float n2, float perc) const
|
||||
{
|
||||
float diff = n2 - n1;
|
||||
return n1 + (diff * perc);
|
||||
}
|
||||
|
||||
void ClassicNoteActiveState::onEntering(const ClassicNote* note)
|
||||
{
|
||||
(void)note;
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
#ifndef CLASSICNOTEACTIVESTATE_H
|
||||
#define CLASSICNOTEACTIVESTATE_H
|
||||
|
||||
#include "classicnotestate.h"
|
||||
|
||||
class ClassicNoteActiveState : public ClassicNoteState
|
||||
{
|
||||
public:
|
||||
virtual Value value() const override;
|
||||
virtual Value update(const ClassicNote* note, const microsec& offset) override;
|
||||
virtual void onEntering(const ClassicNote* note) override;
|
||||
|
||||
private:
|
||||
inline constexpr int getPt(float n1 , float n2 , float perc) const;
|
||||
};
|
||||
|
||||
#endif // CLASSICNOTEACTIVESTATE_H
|
@ -1,26 +0,0 @@
|
||||
#include "classicnotedyingstate.h"
|
||||
#include "../classicnote.h"
|
||||
#include "../classicsprite.h"
|
||||
|
||||
auto ClassicNoteDyingState::value() const -> Value
|
||||
{
|
||||
return Value::DYING;
|
||||
}
|
||||
|
||||
auto ClassicNoteDyingState::update(const ClassicNote* note, const microsec& offset) -> Value
|
||||
{
|
||||
(void) offset;
|
||||
const auto& sprite = note->sprite();
|
||||
|
||||
sprite->update();
|
||||
if (sprite->isDead())
|
||||
return Value::NONE;
|
||||
|
||||
return value();
|
||||
}
|
||||
|
||||
void ClassicNoteDyingState::onEntering(const ClassicNote* note)
|
||||
{
|
||||
note->sprite()->pulse();
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
#ifndef CLASSICNOTEDYINGSTATE_H
|
||||
#define CLASSICNOTEDYINGSTATE_H
|
||||
|
||||
#include "classicnotestate.h"
|
||||
|
||||
class ClassicNoteDyingState : public ClassicNoteState
|
||||
{
|
||||
public:
|
||||
virtual Value value() const override;
|
||||
virtual Value update(const ClassicNote* note, const microsec& offset) override;
|
||||
virtual void onEntering(const ClassicNote* note) override;
|
||||
};
|
||||
|
||||
#endif // CLASSICNOTEDYINGSTATE_H
|
@ -1,49 +0,0 @@
|
||||
#include "classicnoteflyingstate.h"
|
||||
#include "../classicnote.h"
|
||||
#include "../classicsprite.h"
|
||||
|
||||
auto ClassicNoteFlyingState::value() const -> Value
|
||||
{
|
||||
return Value::FLYING;
|
||||
}
|
||||
|
||||
auto ClassicNoteFlyingState::update(const ClassicNote* note, const microsec& offset) -> Value
|
||||
{
|
||||
float i;
|
||||
auto update_time = offset - note->getApearanceTime(); // This all will be inside ::update
|
||||
i = update_time / note->getOneTrailPercent() * 0.01; // of an animation object
|
||||
|
||||
const auto& coordinates = note->getCoordinates();
|
||||
const auto& sprite = note->sprite();
|
||||
float xa = getPt( coordinates.x + 20. , coordinates.x + 90. , i );
|
||||
float ya = getPt( coordinates.y - 600. , coordinates.y - 150. , i );
|
||||
float xb = getPt( coordinates.x + 90. , coordinates.x , i );
|
||||
float yb = getPt( coordinates.y - 150. , coordinates.y , i );
|
||||
|
||||
sprite->update(getPt( xa , xb , i ), getPt( ya , yb , i ));
|
||||
if (i >= 1)
|
||||
{
|
||||
sprite->trailFade();
|
||||
}
|
||||
|
||||
if (note->isActive(offset))
|
||||
return Value::ACTIVE;
|
||||
|
||||
return value();
|
||||
}
|
||||
|
||||
constexpr int ClassicNoteFlyingState::getPt(float n1, float n2, float perc) const
|
||||
{
|
||||
float diff = n2 - n1;
|
||||
return n1 + (diff * perc);
|
||||
}
|
||||
|
||||
void ClassicNoteFlyingState::onEntering(const ClassicNote* note)
|
||||
{
|
||||
const auto& coordinates = note->getCoordinates();
|
||||
const auto& sprite = note->sprite();
|
||||
|
||||
sprite->setCoordinates(coordinates.x, coordinates.y,
|
||||
coordinates.x + 20, coordinates.y - 600);
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
#ifndef CLASSICNOTEFLYINGSTATE_H
|
||||
#define CLASSICNOTEFLYINGSTATE_H
|
||||
|
||||
#include "classicnotestate.h"
|
||||
|
||||
class ClassicNoteFlyingState : public ClassicNoteState
|
||||
{
|
||||
public:
|
||||
virtual Value value() const override;
|
||||
virtual Value update(const ClassicNote* note, const microsec& offset) override;
|
||||
virtual void onEntering(const ClassicNote* note) override;
|
||||
|
||||
private:
|
||||
inline constexpr int getPt(float n1 , float n2 , float perc) const;
|
||||
};
|
||||
|
||||
#endif // CLASSICNOTEFLYINGSTATE_H
|
@ -1,20 +0,0 @@
|
||||
#include "classicnotenonestate.h"
|
||||
#include "../classicnote.h"
|
||||
#include "../classicsprite.h"
|
||||
|
||||
auto ClassicNoteNoneState::value() const -> Value
|
||||
{
|
||||
return Value::NONE;
|
||||
}
|
||||
|
||||
auto ClassicNoteNoneState::update(const ClassicNote* note, const microsec& offset) -> Value
|
||||
{
|
||||
(void) offset;
|
||||
(void) note;
|
||||
}
|
||||
|
||||
void ClassicNoteNoneState::onEntering(const ClassicNote* note)
|
||||
{
|
||||
note->sprite()->reset();
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
#ifndef CLASSICNOTENONESTATE_H
|
||||
#define CLASSICNOTENONESTATE_H
|
||||
|
||||
#include "classicnotestate.h"
|
||||
|
||||
class ClassicNoteNoneState : public ClassicNoteState
|
||||
{
|
||||
public:
|
||||
virtual Value value() const override;
|
||||
virtual Value update(const ClassicNote* note, const microsec& offset) override;
|
||||
virtual void onEntering(const ClassicNote* note) override;
|
||||
};
|
||||
|
||||
#endif // CLASSICNOTENONESTATE_H
|
@ -1,30 +0,0 @@
|
||||
#ifndef CLASSICNOTESTATE_H
|
||||
#define CLASSICNOTESTATE_H
|
||||
|
||||
#include <SFML/System/Clock.hpp>
|
||||
#include <memory>
|
||||
|
||||
using microsec = sf::Int64;
|
||||
|
||||
class ClassicNote;
|
||||
|
||||
class ClassicNoteState
|
||||
{
|
||||
public:
|
||||
|
||||
enum Value
|
||||
{
|
||||
NONE,
|
||||
DYING,
|
||||
FLYING,
|
||||
ACTIVE,
|
||||
|
||||
COUNT
|
||||
};
|
||||
|
||||
virtual Value value() const = 0;
|
||||
virtual Value update(const ClassicNote* note, const microsec& offset) = 0;
|
||||
virtual void onEntering(const ClassicNote* note) = 0;
|
||||
};
|
||||
|
||||
#endif // CLASSICNOTESTATE_H
|
@ -1,13 +0,0 @@
|
||||
#include "inputtype.h"
|
||||
|
||||
InputType::InputType(const microsec ×tamp) :
|
||||
_timestamp(timestamp)
|
||||
{}
|
||||
|
||||
InputType::~InputType()
|
||||
{}
|
||||
|
||||
const microsec& InputType::timestamp() const
|
||||
{
|
||||
return _timestamp;
|
||||
}
|
Loading…
Reference in New Issue