]> git.seodisparate.com - RockPaperScissorsDuel/commitdiff
Minor fixes/refactorings
authorStephen Seo <seo.disparate@gmail.com>
Fri, 13 Jan 2023 07:26:00 +0000 (16:26 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 13 Jan 2023 07:26:00 +0000 (16:26 +0900)
src/3d/obj.cc
src/3d/obj.h
src/3d/qm.cc
src/3d/qm.h
src/3d_renderer.cc

index a5110a1afa3b70c545a806fa5fda3f7ff70c872e..bd8d6fa24504c71f0aaf6a404c3f69e80351454a 100644 (file)
@@ -1,10 +1,24 @@
 #include "obj.h"
 
+Object3D::Object3D() : pos{0.0F, 0.0F, 0.0F}, color{255, 255, 255, 255} {}
+
 Object3D::Object3D(Model *model)
-    : pos{0.0F, 0.0F, 0.0F}, color{255, 255, 255, 255}, model(model) {}
+    : pos{0.0F, 0.0F, 0.0F}, color{255, 255, 255, 255} {
+  if (model) {
+    this->model = model;
+  }
+}
 
 Object3D::~Object3D() {}
 
+void Object3D::set_model(Model *model) {
+  if (model) {
+    this->model = model;
+  } else {
+    this->model = std::nullopt;
+  }
+}
+
 const V3 &Object3D::get_pos() const { return pos; }
 
 void Object3D::set_pos(const V3 &pos) { this->pos = pos; }
index 46e152705351b89669a6f06e43b5284567f79be0..5c41956e8500170a3c8e45054c79b5ed6d75f1d1 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef ROCK_PAPER_SCISSORS_3D_OBJECT_BASE_H_
 #define ROCK_PAPER_SCISSORS_3D_OBJECT_BASE_H_
 
+// standard library includes
+#include <optional>
+
 // local includes
 #include "v3.h"
 
@@ -9,12 +12,15 @@ struct Model;
 
 class Object3D {
  public:
+  Object3D();
   Object3D(Model *model);
   virtual ~Object3D();
 
   virtual void update(float dt) = 0;
   virtual void draw() = 0;
 
+  void set_model(Model *model);
+
   const V3 &get_pos() const;
   void set_pos(const V3 &pos);
   void set_pos(V3 &&pos);
@@ -33,7 +39,7 @@ class Object3D {
  protected:
   V3 pos;
   VC4 color;
-  Model *model;
+  std::optional<Model *> model;
 };
 
 #endif
index 1601754ff2459c7476e25325aa0a6f4ae582be89..f346a3e451ae7f132ea341a938533088deb0ebce 100644 (file)
 #include "../constants.h"
 #include "v3_conv.h"
 
+QuestionMark::QuestionMark()
+    : Object3D()
+#ifndef __EMSCRIPTEN__
+      ,
+      re(std::random_device{}())
+#endif
+{
+  randomize_timer_values();
+}
+
 QuestionMark::QuestionMark(Model *m)
     : Object3D(m)
 #ifndef __EMSCRIPTEN__
@@ -53,6 +63,10 @@ void QuestionMark::update(float dt) {
 }
 
 void QuestionMark::draw() {
+  if (!model.has_value()) {
+    return;
+  }
+
   Vector3 unit{1.0F, 1.0F, 1.0F};
   Vector3 vec3pos = V3ToRV3(pos);
   float angle = angle_timer / angle_timer_max * 2.0F - 1.0F;
@@ -63,7 +77,8 @@ void QuestionMark::draw() {
                ? ((std::cos(PI_F * offset) + 1.0F) / 2.0F * QM_MAX_Y_OFFSET)
                : ((std::cos(PI_F * (-offset)) + 1.0F) / 2.0F * QM_MAX_Y_OFFSET);
   vec3pos.y += offset;
-  DrawModelEx(*model, vec3pos, {0.0F, 1.0F, 0.0F}, angle, unit, VC4ToC(color));
+  DrawModelEx(*model.value(), vec3pos, {0.0F, 1.0F, 0.0F}, angle, unit,
+              VC4ToC(color));
 }
 
 void QuestionMark::randomize_timer_values() {
index fca03914f363132bf36865834012433d75b80ecc..adc71a5209296719750e88d6c4fa92796ef4d400 100644 (file)
@@ -9,6 +9,7 @@
 
 class QuestionMark : public Object3D {
  public:
+  QuestionMark();
   QuestionMark(Model *m);
   ~QuestionMark() override;
 
index f6ee3e72b6edd1148fc0d328f0ca4f62712493ff..abf19dbe36eb8d96679835cf0642d91eb6ed956c 100644 (file)
@@ -13,8 +13,7 @@
 #include "helpers.h"
 
 Renderer3D::Renderer3D()
-    : qms{QuestionMark(&qm_model), QuestionMark(&qm_model)},
-      qm_model(LoadModel("resources/question_mark.obj")),
+    : qms{},
       p1_pos{-1.0F, 0.0F, 0.0F},
       p2_pos{1.0F, 0.0F, 0.0F},
       overview_timer(OVERVIEW_TIMER_MAX) {
@@ -45,7 +44,7 @@ Renderer3D::Renderer3D()
 
   skybox_model = LoadModel("resources/skybox.obj");
   platform_model = LoadModel("resources/platform.obj");
-  // qm_model = LoadModel("resources/question_mark.obj");
+  qm_model = LoadModel("resources/question_mark.obj");
   rock_model = LoadModel("resources/rock.obj");
   paper_model = LoadModel("resources/paper.obj");
   scissors_model = LoadModel("resources/scissors.obj");
@@ -63,9 +62,11 @@ Renderer3D::Renderer3D()
   flags.set(4);
   flags.set(5);
 
+  qms.at(0).set_model(&qm_model);
   qms.at(0).set_pos({-1.0F, 0.0F, 0.0F});
   qms.at(0).set_color_g(0);
   qms.at(0).set_color_b(0);
+  qms.at(1).set_model(&qm_model);
   qms.at(1).set_pos({1.0F, 0.0F, 0.0F});
   qms.at(1).set_color_r(0);
   qms.at(1).set_color_g(0);
@@ -174,15 +175,15 @@ void Renderer3D::update_impl() {
 }
 
 void Renderer3D::draw_impl() {
-  ClearBackground(BLACK);
   BeginDrawing();
+  ClearBackground(BLACK);
   BeginMode3D(camera);
   DrawModel(skybox_model, root_pos, 1.0F, WHITE);
   DrawModel(platform_model, root_pos, 1.0F, WHITE);
-  // DrawModel(qm_model, {-5.0F, 0.0F, 0.0F}, 1.0F, RED);
-  // DrawModel(qm_model, {5.0F, 0.0F, 0.0F}, 1.0F, BLUE);
-  // DrawModel(rock_model, p1_pos, 1.0F, WHITE);
-  // DrawModel(paper_model, p2_pos, 1.0F, WHITE);
+  //  DrawModel(qm_model, {-5.0F, 0.0F, 0.0F}, 1.0F, RED);
+  //  DrawModel(qm_model, {5.0F, 0.0F, 0.0F}, 1.0F, BLUE);
+  //  DrawModel(rock_model, p1_pos, 1.0F, WHITE);
+  //  DrawModel(paper_model, p2_pos, 1.0F, WHITE);
   // DrawModel(scissors_model, {-3.0F, 0.0F, 0.0F}, 1.0F, WHITE);
   // DrawModel(scissors_model, {3.0F, 0.0F, 0.0F}, 1.0F, WHITE);
   for (auto &obj : qms) {