From: Stephen Seo Date: Fri, 13 Jan 2023 07:26:00 +0000 (+0900) Subject: Minor fixes/refactorings X-Git-Url: https://git.seodisparate.com/tbm-server-edit-damage-sources-set.png?a=commitdiff_plain;h=dbe115cfe2b45d11989be5c341ade354c36b1cff;p=RockPaperScissorsDuel Minor fixes/refactorings --- diff --git a/src/3d/obj.cc b/src/3d/obj.cc index a5110a1..bd8d6fa 100644 --- a/src/3d/obj.cc +++ b/src/3d/obj.cc @@ -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; } diff --git a/src/3d/obj.h b/src/3d/obj.h index 46e1527..5c41956 100644 --- a/src/3d/obj.h +++ b/src/3d/obj.h @@ -1,6 +1,9 @@ #ifndef ROCK_PAPER_SCISSORS_3D_OBJECT_BASE_H_ #define ROCK_PAPER_SCISSORS_3D_OBJECT_BASE_H_ +// standard library includes +#include + // 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; }; #endif diff --git a/src/3d/qm.cc b/src/3d/qm.cc index 1601754..f346a3e 100644 --- a/src/3d/qm.cc +++ b/src/3d/qm.cc @@ -13,6 +13,16 @@ #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() { diff --git a/src/3d/qm.h b/src/3d/qm.h index fca0391..adc71a5 100644 --- a/src/3d/qm.h +++ b/src/3d/qm.h @@ -9,6 +9,7 @@ class QuestionMark : public Object3D { public: + QuestionMark(); QuestionMark(Model *m); ~QuestionMark() override; diff --git a/src/3d_renderer.cc b/src/3d_renderer.cc index f6ee3e7..abf19db 100644 --- a/src/3d_renderer.cc +++ b/src/3d_renderer.cc @@ -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) {