aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--game/prefab/ZapperObject.cpp35
-rw-r--r--game/prefab/ZapperObject.h5
-rw-r--r--src/crepe/api/Vector2.h39
-rw-r--r--src/crepe/api/Vector2.hpp10
-rw-r--r--src/test/Vector2Test.cpp10
5 files changed, 70 insertions, 29 deletions
diff --git a/game/prefab/ZapperObject.cpp b/game/prefab/ZapperObject.cpp
index e63a5f2..fcc6467 100644
--- a/game/prefab/ZapperObject.cpp
+++ b/game/prefab/ZapperObject.cpp
@@ -1,3 +1,5 @@
+#include <crepe/api/Transform.h>
+
#include "ZapperObject.h"
#include "Config.h"
@@ -11,8 +13,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_OBSTACLES,
.order_in_layer = 1,
- .size = vec2 {0, 1} * SCALE,
- .position_offset = {0, 100},
+ .size = vec2(0, 42) * SCALE,
}
),
.orb_end = add_component<Sprite>(
@@ -21,8 +22,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)
.flip = {true, true},
.sorting_in_layer = SORT_IN_LAY_OBSTACLES,
.order_in_layer = 1,
- .size = vec2 {0, 1} * SCALE,
- .position_offset = {0, -100},
+ .size = vec2(0, 42) * SCALE,
}
),
.glow_start = add_component<Sprite>(
@@ -30,8 +30,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_OBSTACLES,
.order_in_layer = -1,
- .size = vec2 {2, 2} * SCALE,
- .position_offset = {0, 100},
+ .size = vec2(128, 128) * SCALE,
}
),
.glow_end = add_component<Sprite>(
@@ -40,8 +39,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)
.flip = {true, true},
.sorting_in_layer = SORT_IN_LAY_OBSTACLES,
.order_in_layer = -1,
- .size = vec2 {2, 2} * SCALE,
- .position_offset = {0, -100},
+ .size = vec2(128, 128) * SCALE,
}
),
.beam = add_component<Sprite>(
@@ -49,7 +47,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_OBSTACLES,
.order_in_layer = 0,
- .size = vec2 {200, 50},
+ .size = vec2(0, 40 * SCALE),
.angle_offset = 90,
}
),
@@ -75,4 +73,21 @@ ZapperObject::ZapperObject(crepe::GameObject && base)
.glow_end = add_component<Animator>(
sprite.glow_end, ivec2(128, 128), uvec2(16, 1), animator.glow_start.data
),
- } {}
+ } {
+ this->place(this->transform.position, 0, 300);
+ }
+
+void ZapperObject::place(const crepe::vec2 & position, float rotation, float length) {
+ this->transform.position = position;
+ this->transform.rotation = rotation;
+
+ vec2 offset = vec2(0, 1) * length / 2;
+
+ this->sprite.orb_start.data.position_offset = offset;
+ this->sprite.glow_start.data.position_offset = offset;
+ this->sprite.orb_end.data.position_offset = -offset;
+ this->sprite.glow_end.data.position_offset = -offset;
+
+ this->sprite.beam.data.size.x = length;
+}
+
diff --git a/game/prefab/ZapperObject.h b/game/prefab/ZapperObject.h
index cc2d37c..b4bb942 100644
--- a/game/prefab/ZapperObject.h
+++ b/game/prefab/ZapperObject.h
@@ -30,5 +30,8 @@ public:
// crepe::BoxCollider & collider;
private:
- static constexpr int SCALE = 60;
+ static constexpr float SCALE = 0.8;
+
+public:
+ void place(const crepe::vec2 & position, float rotation, float length);
};
diff --git a/src/crepe/api/Vector2.h b/src/crepe/api/Vector2.h
index 52e1bb6..0f46964 100644
--- a/src/crepe/api/Vector2.h
+++ b/src/crepe/api/Vector2.h
@@ -11,55 +11,55 @@ struct Vector2 {
T y = 0;
//! Subtracts another vector from this vector and returns the result.
- Vector2 operator-(const Vector2<T> & other) const;
+ Vector2<T> operator-(const Vector2<T> & other) const;
//! Subtracts a scalar value from both components of this vector and returns the result.
- Vector2 operator-(T scalar) const;
+ Vector2<T> operator-(T scalar) const;
//! Adds another vector to this vector and returns the result.
- Vector2 operator+(const Vector2<T> & other) const;
+ Vector2<T> operator+(const Vector2<T> & other) const;
//! Adds a scalar value to both components of this vector and returns the result.
- Vector2 operator+(T scalar) const;
+ Vector2<T> operator+(T scalar) const;
//! Multiplies this vector by another vector element-wise and returns the result.
- Vector2 operator*(const Vector2<T> & other) const;
+ Vector2<T> operator*(const Vector2<T> & other) const;
//! Multiplies this vector by a scalar and returns the result.
- Vector2 operator*(T scalar) const;
+ Vector2<T> operator*(T scalar) const;
//! Divides this vector by another vector element-wise and returns the result.
- Vector2 operator/(const Vector2<T> & other) const;
+ Vector2<T> operator/(const Vector2<T> & other) const;
//! Divides this vector by a scalar and returns the result.
- Vector2 operator/(T scalar) const;
+ Vector2<T> operator/(T scalar) const;
//! Adds another vector to this vector and updates this vector.
- Vector2 & operator+=(const Vector2<T> & other);
+ Vector2<T> & operator+=(const Vector2<T> & other);
//! Adds a scalar value to both components of this vector and updates this vector.
- Vector2 & operator+=(T other);
+ Vector2<T> & operator+=(T other);
//! Subtracts another vector from this vector and updates this vector.
- Vector2 & operator-=(const Vector2<T> & other);
+ Vector2<T> & operator-=(const Vector2<T> & other);
//! Subtracts a scalar value from both components of this vector and updates this vector.
- Vector2 & operator-=(T other);
+ Vector2<T> & operator-=(T other);
//! Multiplies this vector by another vector element-wise and updates this vector.
- Vector2 & operator*=(const Vector2<T> & other);
+ Vector2<T> & operator*=(const Vector2<T> & other);
//! Multiplies this vector by a scalar and updates this vector.
- Vector2 & operator*=(T other);
+ Vector2<T> & operator*=(T other);
//! Divides this vector by another vector element-wise and updates this vector.
- Vector2 & operator/=(const Vector2<T> & other);
+ Vector2<T> & operator/=(const Vector2<T> & other);
//! Divides this vector by a scalar and updates this vector.
- Vector2 & operator/=(T other);
+ Vector2<T> & operator/=(T other);
//! Returns the negation of this vector.
- Vector2 operator-() const;
+ Vector2<T> operator-() const;
//! Checks if this vector is equal to another vector.
bool operator==(const Vector2<T> & other) const;
@@ -89,10 +89,13 @@ struct Vector2 {
T distance_squared(const Vector2<T> & other) const;
//! Returns the perpendicular vector to this vector.
- Vector2 perpendicular() const;
+ Vector2<T> perpendicular() const;
//! Checks if both components of the vector are NaN.
bool is_nan() const;
+
+ //! Rotate this vector clockwise by \c deg degrees
+ Vector2<T> rotate(float deg) const;
};
} // namespace crepe
diff --git a/src/crepe/api/Vector2.hpp b/src/crepe/api/Vector2.hpp
index e195760..a4ce641 100644
--- a/src/crepe/api/Vector2.hpp
+++ b/src/crepe/api/Vector2.hpp
@@ -168,4 +168,14 @@ bool Vector2<T>::is_nan() const {
return std::isnan(x) && std::isnan(y);
}
+template <class T>
+Vector2<T> Vector2<T>::rotate(float deg) const {
+ float rad = -deg / 180 * M_PI;
+ return {
+ x * std::cos(rad) - y * std::sin(rad),
+ x * std::sin(rad) + y * std::cos(rad),
+ };
+}
+
+
} // namespace crepe
diff --git a/src/test/Vector2Test.cpp b/src/test/Vector2Test.cpp
index 1e21af9..b17f95a 100644
--- a/src/test/Vector2Test.cpp
+++ b/src/test/Vector2Test.cpp
@@ -1,6 +1,7 @@
#include <gtest/gtest.h>
#include <crepe/api/Vector2.h>
+#include <crepe/types.h>
using namespace crepe;
@@ -530,3 +531,12 @@ TEST_F(Vector2Test, Perpendicular) {
EXPECT_FLOAT_EQ(result4.x, -4.0f);
EXPECT_FLOAT_EQ(result4.y, 3.0f);
}
+
+TEST_F(Vector2Test, Rotate) {
+ vec2 foo {0, 1};
+
+ foo = foo.rotate(90);
+ const float GOOD_ENOUGH = 0.001;
+ EXPECT_NEAR(foo.x, 1, GOOD_ENOUGH);
+ EXPECT_NEAR(foo.y, 0, GOOD_ENOUGH);
+}