|
@@ -34,18 +34,6 @@
|
|
#include "servers/physics_server_2d.h"
|
|
#include "servers/physics_server_2d.h"
|
|
#define _SEGMENT_IS_VALID_SUPPORT_THRESHOLD 0.99998
|
|
#define _SEGMENT_IS_VALID_SUPPORT_THRESHOLD 0.99998
|
|
|
|
|
|
-/*
|
|
|
|
-
|
|
|
|
-SHAPE_WORLD_MARGIN, ///< plane:"plane"
|
|
|
|
-SHAPE_SEGMENT, ///< real_t:"length"
|
|
|
|
-SHAPE_CIRCLE, ///< real_t:"radius"
|
|
|
|
-SHAPE_RECTANGLE, ///< vec3:"extents"
|
|
|
|
-SHAPE_CONVEX_POLYGON, ///< array of planes:"planes"
|
|
|
|
-SHAPE_CONCAVE_POLYGON, ///< Vector2 array:"triangles" , or Dictionary with "indices" (int array) and "triangles" (Vector2 array)
|
|
|
|
-SHAPE_CUSTOM, ///< Server-Implementation based custom shape, calling shape_create() with this value will result in an error
|
|
|
|
-
|
|
|
|
-*/
|
|
|
|
-
|
|
|
|
class Shape2DSW;
|
|
class Shape2DSW;
|
|
|
|
|
|
class ShapeOwner2DSW {
|
|
class ShapeOwner2DSW {
|
|
@@ -137,19 +125,19 @@ public:
|
|
};
|
|
};
|
|
|
|
|
|
//let the optimizer do the magic
|
|
//let the optimizer do the magic
|
|
-#define DEFAULT_PROJECT_RANGE_CAST \
|
|
|
|
- virtual void project_range_castv(const Vector2 &p_cast, const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { \
|
|
|
|
- project_range_cast(p_cast, p_normal, p_transform, r_min, r_max); \
|
|
|
|
- } \
|
|
|
|
- _FORCE_INLINE_ void project_range_cast(const Vector2 &p_cast, const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { \
|
|
|
|
- real_t mina, maxa; \
|
|
|
|
- real_t minb, maxb; \
|
|
|
|
- Transform2D ofsb = p_transform; \
|
|
|
|
- ofsb.elements[2] += p_cast; \
|
|
|
|
- project_range(p_normal, p_transform, mina, maxa); \
|
|
|
|
- project_range(p_normal, ofsb, minb, maxb); \
|
|
|
|
- r_min = MIN(mina, minb); \
|
|
|
|
- r_max = MAX(maxa, maxb); \
|
|
|
|
|
|
+#define DEFAULT_PROJECT_RANGE_CAST \
|
|
|
|
+ virtual void project_range_castv(const Vector2 &p_cast, const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override { \
|
|
|
|
+ project_range_cast(p_cast, p_normal, p_transform, r_min, r_max); \
|
|
|
|
+ } \
|
|
|
|
+ _FORCE_INLINE_ void project_range_cast(const Vector2 &p_cast, const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { \
|
|
|
|
+ real_t mina, maxa; \
|
|
|
|
+ real_t minb, maxb; \
|
|
|
|
+ Transform2D ofsb = p_transform; \
|
|
|
|
+ ofsb.elements[2] += p_cast; \
|
|
|
|
+ project_range(p_normal, p_transform, mina, maxa); \
|
|
|
|
+ project_range(p_normal, ofsb, minb, maxb); \
|
|
|
|
+ r_min = MIN(mina, minb); \
|
|
|
|
+ r_max = MAX(maxa, maxb); \
|
|
}
|
|
}
|
|
|
|
|
|
class WorldMarginShape2DSW : public Shape2DSW {
|
|
class WorldMarginShape2DSW : public Shape2DSW {
|
|
@@ -160,17 +148,17 @@ public:
|
|
_FORCE_INLINE_ Vector2 get_normal() const { return normal; }
|
|
_FORCE_INLINE_ Vector2 get_normal() const { return normal; }
|
|
_FORCE_INLINE_ real_t get_d() const { return d; }
|
|
_FORCE_INLINE_ real_t get_d() const { return d; }
|
|
|
|
|
|
- virtual PhysicsServer2D::ShapeType get_type() const { return PhysicsServer2D::SHAPE_WORLD_MARGIN; }
|
|
|
|
|
|
+ virtual PhysicsServer2D::ShapeType get_type() const override { return PhysicsServer2D::SHAPE_WORLD_MARGIN; }
|
|
|
|
|
|
- virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
- virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const;
|
|
|
|
|
|
+ virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
+ virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const override;
|
|
|
|
|
|
- virtual bool contains_point(const Vector2 &p_point) const;
|
|
|
|
- virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const;
|
|
|
|
- virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const;
|
|
|
|
|
|
+ virtual bool contains_point(const Vector2 &p_point) const override;
|
|
|
|
+ virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const override;
|
|
|
|
+ virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const override;
|
|
|
|
|
|
- virtual void set_data(const Variant &p_data);
|
|
|
|
- virtual Variant get_data() const;
|
|
|
|
|
|
+ virtual void set_data(const Variant &p_data) override;
|
|
|
|
+ virtual Variant get_data() const override;
|
|
|
|
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
//real large
|
|
//real large
|
|
@@ -178,7 +166,7 @@ public:
|
|
r_max = 1e10;
|
|
r_max = 1e10;
|
|
}
|
|
}
|
|
|
|
|
|
- virtual void project_range_castv(const Vector2 &p_cast, const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
|
|
|
|
+ virtual void project_range_castv(const Vector2 &p_cast, const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override {
|
|
project_range_cast(p_cast, p_normal, p_transform, r_min, r_max);
|
|
project_range_cast(p_cast, p_normal, p_transform, r_min, r_max);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -199,20 +187,20 @@ public:
|
|
_FORCE_INLINE_ const Vector2 &get_b() const { return b; }
|
|
_FORCE_INLINE_ const Vector2 &get_b() const { return b; }
|
|
_FORCE_INLINE_ const Vector2 &get_normal() const { return n; }
|
|
_FORCE_INLINE_ const Vector2 &get_normal() const { return n; }
|
|
|
|
|
|
- virtual PhysicsServer2D::ShapeType get_type() const { return PhysicsServer2D::SHAPE_SEGMENT; }
|
|
|
|
|
|
+ virtual PhysicsServer2D::ShapeType get_type() const override { return PhysicsServer2D::SHAPE_SEGMENT; }
|
|
|
|
|
|
_FORCE_INLINE_ Vector2 get_xformed_normal(const Transform2D &p_xform) const {
|
|
_FORCE_INLINE_ Vector2 get_xformed_normal(const Transform2D &p_xform) const {
|
|
return (p_xform.xform(b) - p_xform.xform(a)).normalized().orthogonal();
|
|
return (p_xform.xform(b) - p_xform.xform(a)).normalized().orthogonal();
|
|
}
|
|
}
|
|
- virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
- virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const;
|
|
|
|
|
|
+ virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
+ virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const override;
|
|
|
|
|
|
- virtual bool contains_point(const Vector2 &p_point) const;
|
|
|
|
- virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const;
|
|
|
|
- virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const;
|
|
|
|
|
|
+ virtual bool contains_point(const Vector2 &p_point) const override;
|
|
|
|
+ virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const override;
|
|
|
|
+ virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const override;
|
|
|
|
|
|
- virtual void set_data(const Variant &p_data);
|
|
|
|
- virtual Variant get_data() const;
|
|
|
|
|
|
+ virtual void set_data(const Variant &p_data) override;
|
|
|
|
+ virtual Variant get_data() const override;
|
|
|
|
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
//real large
|
|
//real large
|
|
@@ -239,17 +227,17 @@ class CircleShape2DSW : public Shape2DSW {
|
|
public:
|
|
public:
|
|
_FORCE_INLINE_ const real_t &get_radius() const { return radius; }
|
|
_FORCE_INLINE_ const real_t &get_radius() const { return radius; }
|
|
|
|
|
|
- virtual PhysicsServer2D::ShapeType get_type() const { return PhysicsServer2D::SHAPE_CIRCLE; }
|
|
|
|
|
|
+ virtual PhysicsServer2D::ShapeType get_type() const override { return PhysicsServer2D::SHAPE_CIRCLE; }
|
|
|
|
|
|
- virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
- virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const;
|
|
|
|
|
|
+ virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
+ virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const override;
|
|
|
|
|
|
- virtual bool contains_point(const Vector2 &p_point) const;
|
|
|
|
- virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const;
|
|
|
|
- virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const;
|
|
|
|
|
|
+ virtual bool contains_point(const Vector2 &p_point) const override;
|
|
|
|
+ virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const override;
|
|
|
|
+ virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const override;
|
|
|
|
|
|
- virtual void set_data(const Variant &p_data);
|
|
|
|
- virtual Variant get_data() const;
|
|
|
|
|
|
+ virtual void set_data(const Variant &p_data) override;
|
|
|
|
+ virtual Variant get_data() const override;
|
|
|
|
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
//real large
|
|
//real large
|
|
@@ -272,17 +260,17 @@ class RectangleShape2DSW : public Shape2DSW {
|
|
public:
|
|
public:
|
|
_FORCE_INLINE_ const Vector2 &get_half_extents() const { return half_extents; }
|
|
_FORCE_INLINE_ const Vector2 &get_half_extents() const { return half_extents; }
|
|
|
|
|
|
- virtual PhysicsServer2D::ShapeType get_type() const { return PhysicsServer2D::SHAPE_RECTANGLE; }
|
|
|
|
|
|
+ virtual PhysicsServer2D::ShapeType get_type() const override { return PhysicsServer2D::SHAPE_RECTANGLE; }
|
|
|
|
|
|
- virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
- virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const;
|
|
|
|
|
|
+ virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
+ virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const override;
|
|
|
|
|
|
- virtual bool contains_point(const Vector2 &p_point) const;
|
|
|
|
- virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const;
|
|
|
|
- virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const;
|
|
|
|
|
|
+ virtual bool contains_point(const Vector2 &p_point) const override;
|
|
|
|
+ virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const override;
|
|
|
|
+ virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const override;
|
|
|
|
|
|
- virtual void set_data(const Variant &p_data);
|
|
|
|
- virtual Variant get_data() const;
|
|
|
|
|
|
+ virtual void set_data(const Variant &p_data) override;
|
|
|
|
+ virtual Variant get_data() const override;
|
|
|
|
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
// no matter the angle, the box is mirrored anyway
|
|
// no matter the angle, the box is mirrored anyway
|
|
@@ -346,17 +334,17 @@ public:
|
|
_FORCE_INLINE_ const real_t &get_radius() const { return radius; }
|
|
_FORCE_INLINE_ const real_t &get_radius() const { return radius; }
|
|
_FORCE_INLINE_ const real_t &get_height() const { return height; }
|
|
_FORCE_INLINE_ const real_t &get_height() const { return height; }
|
|
|
|
|
|
- virtual PhysicsServer2D::ShapeType get_type() const { return PhysicsServer2D::SHAPE_CAPSULE; }
|
|
|
|
|
|
+ virtual PhysicsServer2D::ShapeType get_type() const override { return PhysicsServer2D::SHAPE_CAPSULE; }
|
|
|
|
|
|
- virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
- virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const;
|
|
|
|
|
|
+ virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
+ virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const override;
|
|
|
|
|
|
- virtual bool contains_point(const Vector2 &p_point) const;
|
|
|
|
- virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const;
|
|
|
|
- virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const;
|
|
|
|
|
|
+ virtual bool contains_point(const Vector2 &p_point) const override;
|
|
|
|
+ virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const override;
|
|
|
|
+ virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const override;
|
|
|
|
|
|
- virtual void set_data(const Variant &p_data);
|
|
|
|
- virtual Variant get_data() const;
|
|
|
|
|
|
+ virtual void set_data(const Variant &p_data) override;
|
|
|
|
+ virtual Variant get_data() const override;
|
|
|
|
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
// no matter the angle, the box is mirrored anyway
|
|
// no matter the angle, the box is mirrored anyway
|
|
@@ -399,17 +387,17 @@ public:
|
|
return (p_xform.xform(b) - p_xform.xform(a)).normalized().orthogonal();
|
|
return (p_xform.xform(b) - p_xform.xform(a)).normalized().orthogonal();
|
|
}
|
|
}
|
|
|
|
|
|
- virtual PhysicsServer2D::ShapeType get_type() const { return PhysicsServer2D::SHAPE_CONVEX_POLYGON; }
|
|
|
|
|
|
+ virtual PhysicsServer2D::ShapeType get_type() const override { return PhysicsServer2D::SHAPE_CONVEX_POLYGON; }
|
|
|
|
|
|
- virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
- virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const;
|
|
|
|
|
|
+ virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override { project_range(p_normal, p_transform, r_min, r_max); }
|
|
|
|
+ virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const override;
|
|
|
|
|
|
- virtual bool contains_point(const Vector2 &p_point) const;
|
|
|
|
- virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const;
|
|
|
|
- virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const;
|
|
|
|
|
|
+ virtual bool contains_point(const Vector2 &p_point) const override;
|
|
|
|
+ virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const override;
|
|
|
|
+ virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const override;
|
|
|
|
|
|
- virtual void set_data(const Variant &p_data);
|
|
|
|
- virtual Variant get_data() const;
|
|
|
|
|
|
+ virtual void set_data(const Variant &p_data) override;
|
|
|
|
+ virtual Variant get_data() const override;
|
|
|
|
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
_FORCE_INLINE_ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
if (!points || point_count <= 0) {
|
|
if (!points || point_count <= 0) {
|
|
@@ -437,7 +425,7 @@ public:
|
|
|
|
|
|
class ConcaveShape2DSW : public Shape2DSW {
|
|
class ConcaveShape2DSW : public Shape2DSW {
|
|
public:
|
|
public:
|
|
- virtual bool is_concave() const { return true; }
|
|
|
|
|
|
+ virtual bool is_concave() const override { return true; }
|
|
typedef void (*Callback)(void *p_userdata, Shape2DSW *p_convex);
|
|
typedef void (*Callback)(void *p_userdata, Shape2DSW *p_convex);
|
|
|
|
|
|
virtual void cull(const Rect2 &p_local_aabb, Callback p_callback, void *p_userdata) const = 0;
|
|
virtual void cull(const Rect2 &p_local_aabb, Callback p_callback, void *p_userdata) const = 0;
|
|
@@ -474,23 +462,31 @@ class ConcavePolygonShape2DSW : public ConcaveShape2DSW {
|
|
int _generate_bvh(BVH *p_bvh, int p_len, int p_depth);
|
|
int _generate_bvh(BVH *p_bvh, int p_len, int p_depth);
|
|
|
|
|
|
public:
|
|
public:
|
|
- virtual PhysicsServer2D::ShapeType get_type() const { return PhysicsServer2D::SHAPE_CONCAVE_POLYGON; }
|
|
|
|
|
|
+ virtual PhysicsServer2D::ShapeType get_type() const override { return PhysicsServer2D::SHAPE_CONCAVE_POLYGON; }
|
|
|
|
|
|
- virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { /*project_range(p_normal,p_transform,r_min,r_max);*/
|
|
|
|
|
|
+ virtual void project_rangev(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const override {
|
|
|
|
+ r_min = 0;
|
|
|
|
+ r_max = 0;
|
|
|
|
+ ERR_FAIL_MSG("Unsupported call to project_rangev in ConcavePolygonShape2DSW");
|
|
}
|
|
}
|
|
- virtual void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const { /*project_range(p_normal,p_transform,r_min,r_max);*/
|
|
|
|
|
|
+
|
|
|
|
+ void project_range(const Vector2 &p_normal, const Transform2D &p_transform, real_t &r_min, real_t &r_max) const {
|
|
|
|
+ r_min = 0;
|
|
|
|
+ r_max = 0;
|
|
|
|
+ ERR_FAIL_MSG("Unsupported call to project_range in ConcavePolygonShape2DSW");
|
|
}
|
|
}
|
|
- virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const;
|
|
|
|
|
|
|
|
- virtual bool contains_point(const Vector2 &p_point) const;
|
|
|
|
- virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const;
|
|
|
|
|
|
+ virtual void get_supports(const Vector2 &p_normal, Vector2 *r_supports, int &r_amount) const override;
|
|
|
|
+
|
|
|
|
+ virtual bool contains_point(const Vector2 &p_point) const override;
|
|
|
|
+ virtual bool intersect_segment(const Vector2 &p_begin, const Vector2 &p_end, Vector2 &r_point, Vector2 &r_normal) const override;
|
|
|
|
|
|
- virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const { return 0; }
|
|
|
|
|
|
+ virtual real_t get_moment_of_inertia(real_t p_mass, const Size2 &p_scale) const override { return 0; }
|
|
|
|
|
|
- virtual void set_data(const Variant &p_data);
|
|
|
|
- virtual Variant get_data() const;
|
|
|
|
|
|
+ virtual void set_data(const Variant &p_data) override;
|
|
|
|
+ virtual Variant get_data() const override;
|
|
|
|
|
|
- virtual void cull(const Rect2 &p_local_aabb, Callback p_callback, void *p_userdata) const;
|
|
|
|
|
|
+ virtual void cull(const Rect2 &p_local_aabb, Callback p_callback, void *p_userdata) const override;
|
|
|
|
|
|
DEFAULT_PROJECT_RANGE_CAST
|
|
DEFAULT_PROJECT_RANGE_CAST
|
|
};
|
|
};
|