"${CMAKE_CURRENT_SOURCE_DIR}/src/3d_renderer.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/constants.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/obj.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/a3f.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/a3f_conv.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/arrays.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/arrays_conv.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/qm.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anims.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_concurrent.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_model_grow.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_model_attack.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_model_still.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_falling_2d.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/deferred_2d_draw.cc"
)
set(RPSDuelNative_HEADERS
"${CMAKE_CURRENT_SOURCE_DIR}/src/basic_renderer.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d_renderer.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/obj.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/a3f.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/a3f_conv.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/arrays.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/arrays_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_sequence.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_model_grow.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_model_attack.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_model_still.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/anim_falling_2d.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/3d/deferred_2d_draw.h"
)
add_executable(RPSDuelNative ${RPSDuelNative_SOURCES})
+++ /dev/null
-#include "a3f_conv.h"
-
-Vector3 A3FToRV3(const A3F &v) { return Vector3{v[0], v[1], v[2]}; }
-
-A3F RV3ToA3F(const Vector3 &v) { return A3F{v.x, v.y, v.z}; }
-
-Color A4CToC(const A4C &v) { return Color{v[0], v[1], v[2], v[3]}; }
-
-A4C CToA4C(const Color &c) { return A4C{c.r, c.g, c.b, c.a}; }
--- /dev/null
+#include "anim_falling_2d.h"
+
+// local includes
+#include <raylib.h>
+
+#include "../constants.h"
+#include "arrays_conv.h"
+#include "deferred_2d_draw.h"
+
+AnimFalling2D::AnimFalling2D(A3F pos, A4C color, Texture2D *texture, A4F txywh,
+ bool is_going_right, Deferred2DMap *map)
+ : Anims(nullptr, pos, color),
+ map(map),
+ wh{txywh.at(2), txywh.at(3)},
+ dx(is_going_right ? MODEL_FALLING_2D_DX : -MODEL_FALLING_2D_DX),
+ dy(MODEL_FALLING_2D_DY),
+ ddy(MODEL_FALLING_2D_DDY) {
+ Deferred2DDraw def(texture, txywh, A2F{pos.at(0), pos.at(1)},
+ A2F{txywh.at(2) / 2.0F, txywh.at(3) / 2.0F}, color, 0.0F,
+ is_going_right);
+ def_id = def.get_id();
+
+ map->insert(std::make_pair(def_id, std::move(def)));
+}
+
+AnimFalling2D::~AnimFalling2D() {}
+
+void AnimFalling2D::do_update(float) {
+ auto iter = map->find(def_id);
+ if (iter != map->end()) {
+ iter->second.activate();
+ }
+}
+
+void AnimFalling2D::do_draw() {}
+
+bool AnimFalling2D::is_done_impl() {
+ auto iter = map->find(def_id);
+ if (iter != map->end()) {
+ if (iter->second.is_activated()) {
+ return true;
+ }
+ }
+ return true;
+}
--- /dev/null
+#ifndef ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_FALLING_2D_H_
+#define ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_FALLING_2D_H_
+
+#include "anims.h"
+
+// standard libary includes
+#include <unordered_map>
+
+// third party includes
+#include <raylib.h>
+
+// local includes
+#include "arrays.h"
+#include "deferred_2d_draw.h"
+
+// redef map type
+using Deferred2DMap = std::unordered_map<int, Deferred2DDraw>;
+
+class AnimFalling2D : public Anims {
+ public:
+ AnimFalling2D(A3F pos, A4C color, Texture2D *texture, A4F txywh,
+ bool is_going_right, Deferred2DMap *map);
+ ~AnimFalling2D() override;
+
+ // disable copy
+ AnimFalling2D(const AnimFalling2D &) = delete;
+ AnimFalling2D &operator=(const AnimFalling2D &) = delete;
+
+ // allow move
+ AnimFalling2D(AnimFalling2D &&) = default;
+ AnimFalling2D &operator=(AnimFalling2D &&) = default;
+
+ void do_update(float dt) override;
+ void do_draw() override;
+
+ protected:
+ bool is_done_impl() override;
+
+ private:
+ Deferred2DMap *map;
+ A2F wh;
+ float dx;
+ float dy;
+ float ddy;
+ int def_id;
+};
+
+#endif
// local includes
#include "../constants.h"
#include "../helpers.h"
-#include "a3f_conv.h"
+#include "arrays_conv.h"
AnimModelAttack::AnimModelAttack(Model *model, A3F pos, A4C color, bool is_p1)
: Anims(model, pos, color),
offset{0.0F, 0.0F, 0.0F},
timer(MODEL_ATTACK_TIME_0),
state(0),
+ angle(0.0F),
is_p1(is_p1) {}
AnimModelAttack::~AnimModelAttack() {}
1.0F - timer / MODEL_ATTACK_TIME_1);
offset.at(1) = Helpers::lerp(MODEL_ATTACK_0_Y, MODEL_ATTACK_1_Y,
1.0F - timer / MODEL_ATTACK_TIME_1);
+ angle = Helpers::lerp(MODEL_ATTACK_ANGLE_START,
+ MODEL_ATTACK_ANGLE_END * (is_p1 ? 1.0F : -1.0F),
+ 1.0F - timer / MODEL_ATTACK_TIME_1);
break;
case 2:
offset.at(0) =
MODEL_ATTACK_2_X, 1.0F - timer / MODEL_ATTACK_TIME_2);
offset.at(1) = Helpers::lerp(MODEL_ATTACK_1_Y, MODEL_ATTACK_2_Y,
1.0F - timer / MODEL_ATTACK_TIME_2);
+ angle = Helpers::lerp(MODEL_ATTACK_ANGLE_END * (is_p1 ? 1.0F : -1.0F),
+ MODEL_ATTACK_ANGLE_START,
+ 1.0F - timer / MODEL_ATTACK_TIME_2);
break;
default:
offset.at(0) = 0.0F;
}
void AnimModelAttack::do_draw() {
- DrawModel(*model, A3FToRV3(pos + offset), 1.0F, A4CToC(color));
+ DrawModelEx(*model, A3FToRV3(pos + offset), {0.0F, 0.0F, -1.0F}, angle,
+ {1.0F, 1.0F, 1.0F}, A4CToC(color));
}
bool AnimModelAttack::is_done_impl() { return state == 3; }
#ifndef ROCK_PAPER_SCISSORS_DUEL_3D_MODEL_ATTACK_H_
#define ROCK_PAPER_SCISSORS_DUEL_3D_MODEL_ATTACK_H_
-#include "a3f.h"
#include "anims.h"
+#include "arrays.h"
class AnimModelAttack : public Anims {
public:
* 3 - done
*/
int state;
+ float angle;
bool is_p1;
};
// local includes
#include "../constants.h"
-#include "a3f_conv.h"
+#include "arrays_conv.h"
AnimModelGrow::AnimModelGrow(Model *model, A3F pos, A4C color)
: Anims(model, pos, color), timer(MODEL_GROW_TIME) {}
#ifndef ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_MODEL_GROW_H_
#define ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_MODEL_GROW_H_
-#include "a3f.h"
#include "anims.h"
+#include "arrays.h"
class AnimModelGrow : public Anims {
public:
// local includes
#include "../constants.h"
-#include "a3f_conv.h"
+#include "arrays_conv.h"
AnimModelShrink::AnimModelShrink(Model *model, A3F pos, A4C color)
: Anims(model, pos, color), timer(MODEL_SHRINK_TIME) {}
#ifndef ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_MODEL_SHRINK_H_
#define ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_MODEL_SHRINK_H_
-#include "a3f.h"
#include "anims.h"
+#include "arrays.h"
class AnimModelShrink : public Anims {
public:
#include <raylib.h>
// local includes
-#include "a3f_conv.h"
+#include "arrays_conv.h"
AnimModelStill::AnimModelStill(Model *model, A3F pos, A4C color, float time)
: Anims(model, pos, color), timer(time) {}
#ifndef ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_MODEL_STILL_H_
#define ROCK_PAPER_SCISSORS_DUEL_3D_ANIM_MODEL_STILL_H_
-#include "a3f.h"
#include "anims.h"
+#include "arrays.h"
class AnimModelStill : public Anims {
public:
#include <memory>
// local includes
-#include "a3f.h"
+#include "arrays.h"
// forward declarations
struct Model;
-#include "a3f.h"
+#include "arrays.h"
A3F operator+(const A3F &a, const A3F &b) {
return A3F{a[0] + b[0], a[1] + b[1], a[2] + b[2]};
#include <array>
+using A2F = std::array<float, 2>;
using A3F = std::array<float, 3>;
A3F operator+(const A3F &a, const A3F &b);
A3F operator*(const A3F &v, float s);
A3F operator/(const A3F &v, float s);
+using A4F = std::array<float, 4>;
+
using A3C = std::array<unsigned char, 3>;
using A4C = std::array<unsigned char, 4>;
+using A2U = std::array<unsigned int, 2>;
+using A4U = std::array<unsigned int, 4>;
namespace A3F_F {
extern float dotp(const A3F &a, const A3F &b);
--- /dev/null
+#include "arrays_conv.h"
+
+Vector3 A3FToRV3(const A3F &v) { return Vector3{v[0], v[1], v[2]}; }
+
+A3F RV3ToA3F(const Vector3 &v) { return A3F{v.x, v.y, v.z}; }
+
+Color A4CToC(const A4C &v) { return Color{v[0], v[1], v[2], v[3]}; }
+
+A4C CToA4C(const Color &c) { return A4C{c.r, c.g, c.b, c.a}; }
+
+Vector2 A2FToRV2(const A2F &v) { return Vector2{v.at(0), v.at(1)}; }
+
+A2F RV2ToA2F(const Vector2 &v) { return A2F{v.x, v.y}; }
+
+Rectangle A4FToRect(const A4F &v) {
+ return Rectangle{v.at(0), v.at(1), v.at(2), v.at(3)};
+}
+
+A4F RectToA4F(const Rectangle &r) { return A4F{r.x, r.y, r.width, r.height}; }
#ifndef ROCK_PAPER_SCISSORS_3D_A3F_CONV_H_
#define ROCK_PAPER_SCISSORS_3D_A3F_CONV_H_
-#include "a3f.h"
+#include "arrays.h"
// third party includes
#include <raylib.h>
extern Color A4CToC(const A4C &v);
extern A4C CToA4C(const Color &c);
+extern Vector2 A2FToRV2(const A2F &v);
+extern A2F RV2ToA2F(const Vector2 &v);
+
+extern Rectangle A4FToRect(const A4F &v);
+extern A4F RectToA4F(const Rectangle &r);
+
#endif
--- /dev/null
+#include "deferred_2d_draw.h"
+
+// local includes
+#include <raylib.h>
+
+#include "../constants.h"
+#include "arrays_conv.h"
+
+int Deferred2DDraw::id_counter = 0;
+
+Deferred2DDraw::Deferred2DDraw(Texture2D *texture, A4F txywh, A2F pos,
+ A2F origin, A4C color, float angle,
+ bool is_going_right)
+ : texture(texture),
+ txywh(txywh),
+ pos(pos),
+ origin(origin),
+ color(color),
+ angle(angle),
+ dx(is_going_right ? MODEL_FALLING_2D_DX : -MODEL_FALLING_2D_DX),
+ dy(MODEL_FALLING_2D_DY),
+ ddy(MODEL_FALLING_2D_DDY),
+ id(id_counter++),
+ activated(false),
+ is_going_right(is_going_right) {}
+
+void Deferred2DDraw::update(float dt) {
+ dy += ddy * dt;
+ pos.at(0) += dx * dt;
+ pos.at(1) += dy * dt;
+ angle += MODEL_FALLING_2D_DA * dt * (is_going_right ? 1.0F : -1.0F);
+}
+
+void Deferred2DDraw::draw() {
+ DrawTexturePro(*texture, A4FToRect(txywh),
+ {pos.at(0), pos.at(1), txywh.at(2), txywh.at(3)},
+ A2FToRV2(origin), angle, A4CToC(color));
+}
+
+A2F *Deferred2DDraw::get_pos() { return &pos; }
+
+float *Deferred2DDraw::get_angle() { return ∠ }
+
+int Deferred2DDraw::get_id() { return id; }
+
+void Deferred2DDraw::activate() { activated = true; }
+
+bool Deferred2DDraw::is_activated() const { return activated; }
+
+bool Deferred2DDraw::is_oob() const {
+ return pos.at(0) - txywh.at(2) > GetScreenWidth() ||
+ pos.at(0) + txywh.at(2) * 2.0F < 0.0F ||
+ pos.at(1) - txywh.at(3) > GetScreenHeight() ||
+ pos.at(1) + txywh.at(3) * 2.0F < 0.0F;
+}
--- /dev/null
+#ifndef ROCK_PAPER_SCISSORS_DUEL_DEFERRED_2D_DRAW_H_
+#define ROCK_PAPER_SCISSORS_DUEL_DEFERRED_2D_DRAW_H_
+
+// third party includes
+#include <raylib.h>
+
+// local includes
+#include "arrays.h"
+
+class Deferred2DDraw {
+ public:
+ Deferred2DDraw(Texture2D *texture, A4F txywh, A2F pos, A2F origin, A4C color,
+ float angle, bool is_going_right);
+
+ // no copy
+ Deferred2DDraw(const Deferred2DDraw &) = delete;
+ Deferred2DDraw &operator=(const Deferred2DDraw &) = delete;
+
+ // allow move
+ Deferred2DDraw(Deferred2DDraw &&) = default;
+ Deferred2DDraw &operator=(Deferred2DDraw &&) = default;
+
+ void update(float dt);
+ void draw();
+
+ A2F *get_pos();
+ float *get_angle();
+ int get_id();
+ void activate();
+ bool is_activated() const;
+ bool is_oob() const;
+
+ private:
+ static int id_counter;
+ Texture2D *texture;
+ A4F txywh;
+ A2F pos;
+ A2F origin;
+ A4C color;
+ float angle;
+ float dx;
+ float dy;
+ float ddy;
+ int id;
+ bool activated;
+ bool is_going_right;
+};
+
+#endif
#include <optional>
// local includes
-#include "a3f.h"
+#include "arrays.h"
// forward declarations
struct Model;
// local includes
#include "../constants.h"
-#include "a3f_conv.h"
+#include "arrays_conv.h"
QuestionMark::QuestionMark()
: Object3D()
#include <cstring>
#include <iostream>
#include <memory>
+#include <vector>
// third party includes
#include <raylib.h>
// local includes
-#include "3d/a3f_conv.h"
#include "3d/anim_concurrent.h"
+#include "3d/anim_falling_2d.h"
#include "3d/anim_model_attack.h"
#include "3d/anim_model_grow.h"
#include "3d/anim_model_shrink.h"
#include "3d/anim_model_still.h"
+#include "3d/arrays_conv.h"
#include "constants.h"
#include "ems.h"
#include "helpers.h"
qms.at(0).set_pos_x(received_pos * 2.0F - 1.0F);
qms.at(1).set_pos_x(received_pos * 2.0F + 1.0F);
+
+ std::vector<int> to_delete;
+ for (auto &iter : deferred_2d_draw_map) {
+ if (iter.second.is_activated()) {
+ iter.second.update(dt);
+ if (iter.second.is_oob()) {
+ to_delete.push_back(iter.first);
+ }
+ }
+ }
+
+ for (int id : to_delete) {
+ deferred_2d_draw_map.erase(id);
+ }
}
void Renderer3D::draw_impl() {
DrawText("Waiting...", 0, 0, 20, RAYWHITE);
}
+ for (auto &iter : deferred_2d_draw_map) {
+ if (iter.second.is_activated()) {
+ iter.second.draw();
+ }
+ }
+
EndDrawing();
}
break;
}
newAnim->push_anim(std::make_unique<AnimModelGrow>(
- p1_model, A3F{score * 2.0F - 1.0F, 0.0F, 0.0F}, A4C{255, 255, 255, 255}));
+ p1_model, A3F{score * 2.0F - 1.0F, 0.0F, 0.0F}, A4C{255, 200, 200, 255}));
newAnim->push_anim(std::make_unique<AnimModelGrow>(
- p2_model, A3F{score * 2.0F + 1.0F, 0.0F, 0.0F}, A4C{255, 255, 255, 255}));
+ p2_model, A3F{score * 2.0F + 1.0F, 0.0F, 0.0F}, A4C{200, 200, 255, 255}));
anims.push_anim(std::move(newAnim));
newAnim = std::make_unique<AnimConcurrent>(nullptr);
(flags.test(2) || flags.test(3)) ? opponent_choices.at(idx)
: choices.at(idx));
+ auto seqAnim = std::make_unique<AnimSequence>(nullptr);
+
+ A4F p1_dims = (flags.test(2) || flags.test(3))
+ ? Helpers::get_sprite_dims(choices.at(idx))
+ : Helpers::get_sprite_dims(opponent_choices.at(idx));
+ A4F p2_dims = (flags.test(2) || flags.test(3))
+ ? Helpers::get_sprite_dims(opponent_choices.at(idx))
+ : Helpers::get_sprite_dims(choices.at(idx));
+ Vector3 oldPos = camera.position;
+ camera.position = camera.target;
+ camera.position.z += 10.0F;
+ camera.position.y += 4.0F;
+ Vector2 p1_pos =
+ GetWorldToScreen({camera.target.x - 1.0F, 0.35F, 0.0F}, camera);
+ Vector2 p2_pos =
+ GetWorldToScreen({camera.target.x + 1.0F, 0.35F, 0.0F}, camera);
+ camera.position = oldPos;
+
+ // if (flags.test(2)) {
+ // std::cout << "p1_pos x is " << (score * 2.0F - 1.0F) << " or " <<
+ // p1_pos.x
+ // << std::endl;
+ // }
+
switch (result) {
case -1:
- newAnim->push_anim(std::make_unique<AnimModelStill>(
+ seqAnim->push_anim(std::make_unique<AnimModelStill>(
p1_model, A3F{score * 2.0F - 1.0F, 0.0F, 0.0F},
- A4C{255, 255, 255, 255},
- MODEL_ATTACK_TIME_0 + MODEL_ATTACK_TIME_1 + MODEL_ATTACK_TIME_2));
+ A4C{255, 200, 200, 255}, MODEL_ATTACK_TIME_0 + MODEL_ATTACK_TIME_1));
+ seqAnim->push_anim(std::make_unique<AnimFalling2D>(
+ A3F{p1_pos.x, p1_pos.y, 0.0F}, A4C{255, 200, 200, 255}, &spriteSheet,
+ p1_dims, false, &deferred_2d_draw_map));
newAnim->push_anim(std::make_unique<AnimModelAttack>(
p2_model, A3F{score * 2.0F + 1.0F, 0.0F, 0.0F},
- A4C{255, 255, 255, 255}, false));
+ A4C{200, 200, 255, 255}, false));
break;
case 1:
newAnim->push_anim(std::make_unique<AnimModelAttack>(
p1_model, A3F{score * 2.0F - 1.0F, 0.0F, 0.0F},
- A4C{255, 255, 255, 255}, true));
- newAnim->push_anim(std::make_unique<AnimModelStill>(
+ A4C{255, 200, 200, 255}, true));
+ seqAnim->push_anim(std::make_unique<AnimModelStill>(
p2_model, A3F{score * 2.0F + 1.0F, 0.0F, 0.0F},
- A4C{255, 255, 255, 255},
- MODEL_ATTACK_TIME_0 + MODEL_ATTACK_TIME_1 + MODEL_ATTACK_TIME_2));
+ A4C{200, 200, 255, 255}, MODEL_ATTACK_TIME_0 + MODEL_ATTACK_TIME_1));
+ seqAnim->push_anim(std::make_unique<AnimFalling2D>(
+ A3F{p2_pos.x, p2_pos.y, 0.0F}, A4C{200, 200, 255, 255}, &spriteSheet,
+ p2_dims, true, &deferred_2d_draw_map));
break;
case 0:
default:
}
if (result != 0) {
+ newAnim->push_anim(std::move(seqAnim));
anims.push_anim(std::move(newAnim));
}
newAnim = std::make_unique<AnimConcurrent>(nullptr);
- newAnim->push_anim(std::make_unique<AnimModelShrink>(
- p1_model, A3F{score * 2.0F - 1.0F, 0.0F, 0.0F}, A4C{255, 255, 255, 255}));
- newAnim->push_anim(std::make_unique<AnimModelShrink>(
- p2_model, A3F{score * 2.0F + 1.0F, 0.0F, 0.0F}, A4C{255, 255, 255, 255}));
+ if (result > 0) {
+ newAnim->push_anim(std::make_unique<AnimModelShrink>(
+ p1_model, A3F{score * 2.0F - 1.0F, 0.0F, 0.0F},
+ A4C{255, 200, 200, 255}));
+ } else if (result < 0) {
+ newAnim->push_anim(std::make_unique<AnimModelShrink>(
+ p2_model, A3F{score * 2.0F + 1.0F, 0.0F, 0.0F},
+ A4C{200, 200, 255, 255}));
+ } else {
+ newAnim->push_anim(std::make_unique<AnimModelShrink>(
+ p1_model, A3F{score * 2.0F - 1.0F, 0.0F, 0.0F},
+ A4C{255, 200, 200, 255}));
+ newAnim->push_anim(std::make_unique<AnimModelShrink>(
+ p2_model, A3F{score * 2.0F + 1.0F, 0.0F, 0.0F},
+ A4C{200, 200, 255, 255}));
+ }
using DataT = std::tuple<int *, int>;
DataT *data = new DataT{&received_pos, result};
overview_timer = OVERVIEW_TIMER_MAX;
set_random_overview();
camera.target.x = received_pos * 2.0F;
+
// if (flags.test(3)) {
// std::cerr << "RESET STATE for next round" << std::endl;
// }
// standard library includes
#include <array>
#include <bitset>
+#include <unordered_map>
// third party includes
#include <raylib.h>
// local includes
#include "3d/anim_sequence.h"
#include "3d/anims.h"
+#include "3d/deferred_2d_draw.h"
#include "3d/qm.h"
class Renderer3D : public GameRenderer {
public:
+ using Deferred2DMap = std::unordered_map<int, Deferred2DDraw>;
+
Renderer3D();
~Renderer3D() override;
std::array<QuestionMark, 2> qms;
+ Deferred2DMap deferred_2d_draw_map;
+
Camera camera;
Texture2D spriteSheet;
constexpr float MODEL_ATTACK_2_X = 0.0F;
constexpr float MODEL_ATTACK_2_Y = 0.0F;
+constexpr float MODEL_ATTACK_ANGLE_START = 0.0F;
+constexpr float MODEL_ATTACK_ANGLE_END = 90.0F;
+
+constexpr float MODEL_FALLING_2D_DX = 80.0F;
+constexpr float MODEL_FALLING_2D_DY = -30.0F;
+constexpr float MODEL_FALLING_2D_DDY = 150.0F;
+constexpr float MODEL_FALLING_2D_DA = 270.0F;
+
#endif
}
// void call_js_request_update() {
-//#ifdef __EMSCRIPTEN__
+// #ifdef __EMSCRIPTEN__
// js_request_update();
-//#else
+// #else
// std::clog
// << "WARNING: emscripten not enabled, cannot call js_request_update()!"
// << std::endl;
-//#endif
+// #endif
// }
void call_js_set_matchup_done() {
return 0;
}
}
+
+A4F Helpers::get_sprite_dims(char type) {
+ switch (type) {
+ case 'r':
+ return A4F{ROCK_DIMS[0], ROCK_DIMS[1], ROCK_DIMS[2], ROCK_DIMS[3]};
+ case 'p':
+ return A4F{PAPER_DIMS[0], PAPER_DIMS[1], PAPER_DIMS[2], PAPER_DIMS[3]};
+ case 's':
+ return A4F{SCISSORS_DIMS[0], SCISSORS_DIMS[1], SCISSORS_DIMS[2],
+ SCISSORS_DIMS[3]};
+ default:
+ return A4F{QUESTIONMARK_DIMS[0], QUESTIONMARK_DIMS[1],
+ QUESTIONMARK_DIMS[2], QUESTIONMARK_DIMS[3]};
+ }
+}
#ifndef ROCK_PAPER_SCISSORS_DUEL_HELPERS_H_
#define ROCK_PAPER_SCISSORS_DUEL_HELPERS_H_
+// local includes
+#include "3d/arrays.h"
+
// forard declarations
struct Vector3;
extern int a_vs_b(char a, char b);
+extern A4F get_sprite_dims(char type);
+
} // namespace Helpers
#endif
../src/3d_renderer.cc \
../src/constants.cc \
../src/3d/obj.cc \
- ../src/3d/a3f.cc \
- ../src/3d/a3f_conv.cc \
+ ../src/3d/arrays.cc \
+ ../src/3d/arrays_conv.cc \
../src/3d/qm.cc \
../src/3d/anims.cc \
../src/3d/anim_concurrent.cc \
../src/3d/anim_model_shrink.cc \
../src/3d/anim_model_grow.cc \
../src/3d/anim_model_attack.cc \
- ../src/3d/anim_model_still.cc
+ ../src/3d/anim_model_still.cc \
+ ../src/3d/anim_falling_2d.cc \
+ ../src/3d/deferred_2d_draw.cc
HEADERS = \
../src/constants.h \
../src/game_renderer.h \
../src/3d_renderer.h \
../src/3d/obj.h \
- ../src/3d/a3f.h \
- ../src/3d/a3f_conv.h \
+ ../src/3d/arrays.h \
+ ../src/3d/arrays_conv.h \
../src/3d/qm.h \
../src/3d/anims.h \
../src/3d/anim_concurrent.h \
../src/3d/anim_model_shrink.h \
../src/3d/anim_model_grow.h \
../src/3d/anim_model_attack.h \
- ../src/3d/anim_model_still.h
+ ../src/3d/anim_model_still.h \
+ ../src/3d/anim_falling_2d.h \
+ ../src/3d/deferred_2d_draw.h
CXX = source ${HOME}/git/emsdk/emsdk_env.sh && em++