#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; }
#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__
}
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;
? ((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() {
#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) {
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");
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);
}
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) {