"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/a3f_conv.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/qm.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_concurrent.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_sequence.cc"
)
set(RPSDuelNative_HEADERS
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/a3f_conv.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/qm.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anims.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_concurrent.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_sequence.h"
)
add_executable(RPSDuelNative ${RPSDuelNative_SOURCES})
--- /dev/null
+#include "anim_sequence.h"
+
+AnimSequence::AnimSequence() {}
+
+AnimSequence::~AnimSequence() {}
+
+bool AnimSequence::is_done() { return anims.empty(); }
+
+void AnimSequence::do_update(float dt) {
+ if (!anims.empty()) {
+ anims.front()->do_update(dt);
+ if (anims.front()->is_done()) {
+ anims.pop_front();
+ }
+ }
+}
+
+void AnimSequence::do_draw(Model *m) {
+ if (!anims.empty()) {
+ anims.front()->do_draw(m);
+ }
+}
+
+void AnimSequence::push_anim(UPtr &&p) {
+ anims.emplace_back(std::forward<UPtr>(p));
+}
--- /dev/null
+#ifndef ROCK_PAPER_SCISSORS_DUEL_ANIM_SEQUENCE_H_
+#define ROCK_PAPER_SCISSORS_DUEL_ANIM_SEQUENCE_H_
+
+#include "anims.h"
+
+// standard library includes
+#include <list>
+
+class AnimSequence : public Anims {
+ public:
+ AnimSequence();
+ ~AnimSequence() override;
+
+ bool is_done() override;
+
+ void do_update(float dt) override;
+ void do_draw(Model *m) override;
+
+ void push_anim(UPtr &&p);
+
+ private:
+ std::list<UPtr> anims;
+};
+
+#endif
../src/3d/a3f.cc \
../src/3d/a3f_conv.cc \
../src/3d/qm.cc \
- ../src/3d/anim_concurrent.cc
+ ../src/3d/anim_concurrent.cc \
+ ../src/3d/anim_sequence.cc
HEADERS = \
../src/constants.h \
../src/3d/a3f_conv.h \
../src/3d/qm.h \
../src/3d/anims.h \
- ../src/3d/anim_concurrent.h
+ ../src/3d/anim_concurrent.h \
+ ../src/3d/anim_sequence.h
CXX = source ${HOME}/git/emsdk/emsdk_env.sh && em++