mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-13 07:45:39 +07:00
collider gizmos
This commit is contained in:
@@ -136,6 +136,7 @@ namespace e2d
|
||||
static const char* title;
|
||||
|
||||
void operator()(gcomponent<rect_collider>& c) const;
|
||||
void operator()(gcomponent<rect_collider>& c, gizmos_context& ctx) const;
|
||||
};
|
||||
|
||||
template <>
|
||||
@@ -144,6 +145,7 @@ namespace e2d
|
||||
static const char* title;
|
||||
|
||||
void operator()(gcomponent<circle_collider>& c) const;
|
||||
void operator()(gcomponent<circle_collider>& c, gizmos_context& ctx) const;
|
||||
};
|
||||
|
||||
template <>
|
||||
@@ -152,6 +154,7 @@ namespace e2d
|
||||
static const char* title;
|
||||
|
||||
void operator()(gcomponent<polygon_collider>& c) const;
|
||||
void operator()(gcomponent<polygon_collider>& c, gizmos_context& ctx) const;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -90,6 +90,11 @@ namespace e2d::math
|
||||
return deg * deg_to_rad<T>();
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
rad<T> deg_to_rad(const deg<T>& deg) noexcept {
|
||||
return rad<T>(deg_to_rad(deg.value));
|
||||
}
|
||||
|
||||
//
|
||||
// rad_to_deg
|
||||
//
|
||||
@@ -111,6 +116,11 @@ namespace e2d::math
|
||||
rad_to_deg(T rad) noexcept {
|
||||
return rad * rad_to_deg<T>();
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
deg<T> rad_to_deg(const rad<T>& rad) noexcept {
|
||||
return deg<T>(rad_to_deg(rad.value));
|
||||
}
|
||||
}
|
||||
|
||||
namespace e2d
|
||||
@@ -129,7 +139,7 @@ namespace e2d
|
||||
struct unit_converter<rad_tag, deg_tag> {
|
||||
template < typename T >
|
||||
deg<T> operator()(const rad<T>& u) const noexcept {
|
||||
return make_deg(math::rad_to_deg(u.value));
|
||||
return math::rad_to_deg(u);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -138,7 +148,7 @@ namespace e2d
|
||||
public:
|
||||
template < typename T >
|
||||
rad<T> operator()(const deg<T>& u) const noexcept {
|
||||
return make_rad(math::deg_to_rad(u.value));
|
||||
return math::deg_to_rad(u);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -154,11 +164,21 @@ namespace e2d::math
|
||||
return u.template convert_to<deg_tag>();
|
||||
}
|
||||
|
||||
template < typename T, typename Tag >
|
||||
T to_deg_v(const unit<T, Tag>& u) noexcept {
|
||||
return to_deg(u).value;
|
||||
}
|
||||
|
||||
template < typename T, typename Tag >
|
||||
rad<T> to_rad(const unit<T, Tag>& u) noexcept {
|
||||
return u.template convert_to<rad_tag>();
|
||||
}
|
||||
|
||||
template < typename T, typename Tag >
|
||||
T to_rad_v(const unit<T, Tag>& u) noexcept {
|
||||
return to_rad(u).value;
|
||||
}
|
||||
|
||||
//
|
||||
// cos/sin/tan
|
||||
//
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
},
|
||||
"rect_collider" : {
|
||||
"size" : [66,113]
|
||||
},
|
||||
"circle_collider" : {
|
||||
"radius" : 33
|
||||
}
|
||||
}
|
||||
},{
|
||||
@@ -52,6 +55,14 @@
|
||||
},
|
||||
"rect_collider" : {
|
||||
"size" : [66,113]
|
||||
},
|
||||
"polygon_collider" : {
|
||||
"points" : [
|
||||
[-20,0],
|
||||
[20,0],
|
||||
[30,-50],
|
||||
[-30,-50]
|
||||
]
|
||||
}
|
||||
}
|
||||
},{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"texture" : "ships.png",
|
||||
"pivot" : { "x" : 441, "y" : 340 },
|
||||
"pivot" : { "x" : 441, "y" : 340.5 },
|
||||
"texrect" : { "x" : 408, "y" : 284, "w" : 66, "h" : 113 }
|
||||
}
|
||||
|
||||
@@ -6,4 +6,15 @@ cloc \
|
||||
$SCRIPT_DIR/../samples/bin \
|
||||
$SCRIPT_DIR/../samples/sources \
|
||||
$SCRIPT_DIR/../untests/bin \
|
||||
$SCRIPT_DIR/../untests/sources
|
||||
$SCRIPT_DIR/../untests/sources \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/sources \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/ecs.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/ecs.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/enum.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/enum.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/flat.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/flat.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/promise.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/promise.hpp/untests
|
||||
|
||||
@@ -2,4 +2,10 @@
|
||||
SCRIPT_DIR=`dirname "$BASH_SOURCE"`
|
||||
cloc \
|
||||
$SCRIPT_DIR/../headers/enduro2d \
|
||||
$SCRIPT_DIR/../sources/enduro2d
|
||||
$SCRIPT_DIR/../sources/enduro2d \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/sources \
|
||||
$SCRIPT_DIR/../modules/ecs.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/enum.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/flat.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/promise.hpp/headers
|
||||
|
||||
14
scripts/cloc_modules.sh
Executable file
14
scripts/cloc_modules.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
SCRIPT_DIR=`dirname "$BASH_SOURCE"`
|
||||
cloc \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/sources \
|
||||
$SCRIPT_DIR/../modules/curly.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/ecs.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/ecs.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/enum.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/enum.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/flat.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/flat.hpp/untests \
|
||||
$SCRIPT_DIR/../modules/promise.hpp/headers \
|
||||
$SCRIPT_DIR/../modules/promise.hpp/untests
|
||||
@@ -240,6 +240,20 @@ namespace e2d
|
||||
|
||||
collider_base_inspector(*c);
|
||||
}
|
||||
|
||||
void component_inspector<rect_collider>::operator()(
|
||||
gcomponent<rect_collider>& c,
|
||||
gizmos_context& ctx) const
|
||||
{
|
||||
const v2f& p = c->offset() - c->size() * 0.5f;
|
||||
const v2f& s = c->size();
|
||||
ctx.draw_wire_rect(
|
||||
p,
|
||||
p + s * v2f::unit_x(),
|
||||
p + s,
|
||||
p + s * v2f::unit_y(),
|
||||
ctx.selected() ? color32::cyan() : color32::green());
|
||||
}
|
||||
}
|
||||
|
||||
namespace e2d
|
||||
@@ -255,6 +269,17 @@ namespace e2d
|
||||
|
||||
collider_base_inspector(*c);
|
||||
}
|
||||
|
||||
void component_inspector<circle_collider>::operator()(
|
||||
gcomponent<circle_collider>& c,
|
||||
gizmos_context& ctx) const
|
||||
{
|
||||
ctx.draw_wire_circle(
|
||||
c->offset(),
|
||||
c->radius(),
|
||||
math::to_rad_v(math::two_pi<f32>()) * c->radius() * 0.2f,
|
||||
ctx.selected() ? color32::cyan() : color32::green());
|
||||
}
|
||||
}
|
||||
|
||||
namespace e2d
|
||||
@@ -288,4 +313,18 @@ namespace e2d
|
||||
|
||||
collider_base_inspector(*c);
|
||||
}
|
||||
|
||||
void component_inspector<polygon_collider>::operator()(
|
||||
gcomponent<polygon_collider>& c,
|
||||
gizmos_context& ctx) const
|
||||
{
|
||||
const v2f& o = c->offset();
|
||||
const vector<v2f>& points = c->points();
|
||||
for ( std::size_t i = 0, e = c->points().size(); i < e; ++i ) {
|
||||
ctx.draw_line(
|
||||
o + points[i],
|
||||
o + (i + 1u == e ? points[0] : points[i + 1u]),
|
||||
ctx.selected() ? color32::cyan() : color32::green());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,17 +5,17 @@
|
||||
|
||||
"rect_collider" : {
|
||||
"size" : [1,2],
|
||||
"pivot" : [2,4]
|
||||
"offset" : [2,4]
|
||||
},
|
||||
|
||||
"circle_collider" : {
|
||||
"radius" : 5,
|
||||
"pivot" : [4,2]
|
||||
"offset" : [4,2]
|
||||
},
|
||||
|
||||
"polygon_collider" : {
|
||||
"points" : [[1,2],[2,3],[3,4]],
|
||||
"pivot" : [8,4]
|
||||
"offset" : [8,4]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,15 +255,15 @@ TEST_CASE("library"){
|
||||
|
||||
REQUIRE(e.exists_component<rect_collider>());
|
||||
REQUIRE(e.get_component<rect_collider>().size() == v2f(1.f,2.f));
|
||||
REQUIRE(e.get_component<rect_collider>().pivot() == v2f(2.f,4.f));
|
||||
REQUIRE(e.get_component<rect_collider>().offset() == v2f(2.f,4.f));
|
||||
|
||||
REQUIRE(e.exists_component<circle_collider>());
|
||||
REQUIRE(math::approximately(e.get_component<circle_collider>().radius(), 5.f));
|
||||
REQUIRE(e.get_component<circle_collider>().pivot() == v2f(4.f,2.f));
|
||||
REQUIRE(e.get_component<circle_collider>().offset() == v2f(4.f,2.f));
|
||||
|
||||
REQUIRE(e.exists_component<polygon_collider>());
|
||||
REQUIRE(e.get_component<polygon_collider>().points() == vector<v2f>{{1,2},{2,3},{3,4}});
|
||||
REQUIRE(e.get_component<polygon_collider>().pivot() == v2f(8.f,4.f));
|
||||
REQUIRE(e.get_component<polygon_collider>().offset() == v2f(8.f,4.f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user