]> git.seodisparate.com/gitweb - RockPaperScissorsDuel/commitdiff
Add "anim_sequence"
authorStephen Seo <seo.disparate@gmail.com>
Tue, 17 Jan 2023 05:02:17 +0000 (14:02 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Tue, 17 Jan 2023 05:02:17 +0000 (14:02 +0900)
CMakeLists.txt
src/3d/anim_sequence.cc [new file with mode: 0644]
src/3d/anim_sequence.h [new file with mode: 0644]
wasm_build/Makefile

index 182b315e964469024943cd93765de686937a09ad..60f180fab1717c9c148811c2fd358b4d451b4c43 100644 (file)
@@ -26,6 +26,7 @@ set(RPSDuelNative_SOURCES
     "${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
@@ -40,7 +41,7 @@ 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})
diff --git a/src/3d/anim_sequence.cc b/src/3d/anim_sequence.cc
new file mode 100644 (file)
index 0000000..4dd1560
--- /dev/null
@@ -0,0 +1,26 @@
+#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));
+}
diff --git a/src/3d/anim_sequence.h b/src/3d/anim_sequence.h
new file mode 100644 (file)
index 0000000..d88ddab
--- /dev/null
@@ -0,0 +1,25 @@
+#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
index 8f98684c1ea43315cefaac1a71c34003f002bb3f..8840289f1f037a5b82eda22d90d1c8f157ae722f 100644 (file)
@@ -15,7 +15,8 @@ SOURCES = \
                ../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 \
@@ -29,7 +30,8 @@ HEADERS = \
                ../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++