Collision detection outline. More...
#include <collision_outline.h>
Public Member Functions | |
Construction | |
CollisionOutline () | |
Construct a collision outline. More... | |
CollisionOutline (const PixelBuffer &pbuf, int alpha_limit=128, OutlineAccuracy accuracy=accuracy_medium) | |
Construct a collision outline. More... | |
CollisionOutline (const std::string &fullname, int alpha_limit=128, OutlineAccuracy accuracy=accuracy_medium, bool get_insides=true) | |
Construct a collision outline. More... | |
CollisionOutline (IODevice &file, const std::string &file_extension, int alpha_limit=128, OutlineAccuracy accuracy=accuracy_medium, bool get_insides=true) | |
Constructs a CollisionOutline. More... | |
CollisionOutline (const std::string &filename, const FileSystem &file_system, int alpha_limit=128, OutlineAccuracy accuracy=accuracy_medium, bool get_insides=true) | |
Constructs a CollisionOutline. More... | |
CollisionOutline (const std::vector< Contour > &contours, const Size &size, OutlineAccuracy accuracy) | |
Construct a collision outline. More... | |
~CollisionOutline () | |
Attributes | |
const Contour & | get_object_bounding_box () const |
Returns the contour used as an object bounding box. (an rotated rectangle) More... | |
Circlef | get_minimum_enclosing_disc () const |
Returns the radius of the outline. More... | |
bool | get_inside_test () const |
Returns true if completely-inside test is used. More... | |
std::vector< Contour > & | get_contours () |
Returns the contours in the outline. More... | |
const std::vector< Contour > & | get_contours () const |
Pointf | get_translation () const |
Returns the position of the outline. More... | |
Pointf | get_scale () const |
Returns the scaling factor. More... | |
float | get_angle () const |
Returns the rotation angle. More... | |
unsigned int | get_width () const |
Returns the width of the image this outline was created from. More... | |
unsigned int | get_height () const |
Returns the height of the image this outline was created from. More... | |
void | get_alignment (Origin &origin, float &x, float &y) const |
Get the translation origin and hotspot of the outline. More... | |
void | get_rotation_hotspot (Origin &origin, float &x, float &y) const |
Get the rotation hotspot of the outline. More... | |
const std::vector < CollidingContours > & | get_collision_info () const |
Return the info about the collisions. (collision points, normals, pointers to contours, and indexes to lines that intersected) More... | |
void | get_collision_info_state (bool &points, bool &normals, bool &metadata, bool &pendepth) const |
Fetch the state of the collision testing variables. More... | |
Static Public Member Functions | |
Resources | |
static Resource< CollisionOutline > | resource (const std::string &id, const ResourceManager &resources) |
Retrieves a CollisionOutline from the resource manager. More... | |
static CollisionOutline | load (const std::string &id, const XMLResourceDocument &doc) |
Loads a CollisionOutline from a XML resource definition. More... | |
Operations | |
CollisionOutline | clone () const |
Makes a copy of the current collision outline. More... | |
void | optimize (unsigned char check_distance=3, float corner_angle=PI/5.0) |
Optimize the outline by removing redundant points. More... | |
void | draw (float x, float y, const Colorf &color, Canvas &canvas) |
Draw outline on graphic context. More... | |
void | draw_sub_circles (float x, float y, const Colorf &color, Canvas &canvas) |
Draw the subcircles surrounding the linesegments on graphic context. More... | |
void | draw_smallest_enclosing_disc (float x, float y, const Colorf &color, Canvas &canvas) |
Draw the disc enclosing the entire outline. More... | |
void | set_alignment (Origin origin, float x=0, float y=0) |
Set the translation hotspot of the outline. More... | |
void | set_rotation_hotspot (Origin origin, float x=0, float y=0) |
Set the rotation hotspot of the outline. More... | |
void | set_translation (float x, float y) |
Set the position of the outline. More... | |
void | set_scale (float x, float y) |
Set the scale of the outline. More... | |
void | set_angle (const Angle &angle) |
Set the angle (in degrees) of the outline. More... | |
void | rotate (const Angle &angle) |
Rotate the outline by angle (in degrees). More... | |
void | set_inside_test (bool value) |
Set to true if completely-inside test should be done. More... | |
void | enable_collision_info (bool points=true, bool normals=false, bool metadata=false, bool pen_depth=false) |
Enable collision info gathering. More... | |
void | set_collision_info (const std::vector< CollidingContours > &colinfo) |
This will set the collision info of the outline. More... | |
void | clean_collision_info () |
This will empty the collision-info vector. More... | |
void | calculate_radius () |
(Re)calculate the radius of the outline. More... | |
void | calculate_sub_circles (float radius_multiplier=3.5) |
(Re)calculate the subcircle segmentation of the outline. More... | |
void | calculate_smallest_enclosing_discs () |
(Re)calculate the smallest circles enclosing every contour in the outline. More... | |
void | calculate_convex_hulls () |
(Re)calculate the convex hull for every contour in the outline More... | |
void | save (const std::string &fullname) const |
Write the outline to a file. More... | |
void | save (const std::string &filename, FileSystem &file_system) const |
Save. More... | |
void | save (IODevice &file) const |
Save. More... | |
bool | collide (const CollisionOutline &outline, bool remove_old_collision_info=true) |
Returns true if outlines overlap. More... | |
bool | point_inside (const Pointf &point) const |
Returns true if a point is inside the outline. More... | |
static void | calculate_penetration_depth (std::vector< CollidingContours > &collision_info) |
Will calculate the penetration_depth and penetration_normal for all colliding contours. More... | |
Collision detection outline.
A collision outline is used in collision detection
void clan::CollisionOutline::calculate_convex_hulls | ( | ) |
(Re)calculate the convex hull for every contour in the outline
|
static |
Will calculate the penetration_depth and penetration_normal for all colliding contours.
void clan::CollisionOutline::calculate_radius | ( | ) |
(Re)calculate the radius of the outline.
void clan::CollisionOutline::calculate_smallest_enclosing_discs | ( | ) |
(Re)calculate the smallest circles enclosing every contour in the outline.
void clan::CollisionOutline::calculate_sub_circles | ( | float | radius_multiplier = 3.5 | ) |
(Re)calculate the subcircle segmentation of the outline.
void clan::CollisionOutline::clean_collision_info | ( | ) |
This will empty the collision-info vector.
CollisionOutline clan::CollisionOutline::clone | ( | ) | const |
Makes a copy of the current collision outline.
bool clan::CollisionOutline::collide | ( | const CollisionOutline & | outline, |
bool | remove_old_collision_info = true |
||
) |
Returns true if outlines overlap.
outline | = Outline to test against. |
remove_old_collision_info | = set to true to remove old collision info |
Draw outline on graphic context.
Actual rendering position depends on the anchor and the alignment mode.
x | = Anchor position of where to render sprite. |
y | = Anchor y position |
color | = The color |
gc | = Graphic context on which to render upon. |
void clan::CollisionOutline::draw_smallest_enclosing_disc | ( | float | x, |
float | y, | ||
const Colorf & | color, | ||
Canvas & | canvas | ||
) |
Draw the disc enclosing the entire outline.
Actual rendering position depends on the anchor and the alignment mode.
x | = Anchor position of where to render the cirle. |
y | = Anchor y position |
color | = The color |
gc | = Graphic context on which to render upon. |
void clan::CollisionOutline::draw_sub_circles | ( | float | x, |
float | y, | ||
const Colorf & | color, | ||
Canvas & | canvas | ||
) |
Draw the subcircles surrounding the linesegments on graphic context.
Actual rendering position depends on the anchor and the alignment mode.
x | = Anchor position of where to render cirles. |
y | = Anchor y position |
color | = The color |
gc | = Graphic context on which to render upon. |
void clan::CollisionOutline::enable_collision_info | ( | bool | points = true , |
bool | normals = false , |
||
bool | metadata = false , |
||
bool | pen_depth = false |
||
) |
Enable collision info gathering.
void clan::CollisionOutline::get_alignment | ( | Origin & | origin, |
float & | x, | ||
float & | y | ||
) | const |
Get the translation origin and hotspot of the outline.
float clan::CollisionOutline::get_angle | ( | ) | const |
Returns the rotation angle.
const std::vector<CollidingContours>& clan::CollisionOutline::get_collision_info | ( | ) | const |
Return the info about the collisions. (collision points, normals, pointers to contours, and indexes to lines that intersected)
void clan::CollisionOutline::get_collision_info_state | ( | bool & | points, |
bool & | normals, | ||
bool & | metadata, | ||
bool & | pendepth | ||
) | const |
Fetch the state of the collision testing variables.
std::vector<Contour>& clan::CollisionOutline::get_contours | ( | ) |
Returns the contours in the outline.
const std::vector<Contour>& clan::CollisionOutline::get_contours | ( | ) | const |
unsigned int clan::CollisionOutline::get_height | ( | ) | const |
Returns the height of the image this outline was created from.
bool clan::CollisionOutline::get_inside_test | ( | ) | const |
Returns true if completely-inside test is used.
Circlef clan::CollisionOutline::get_minimum_enclosing_disc | ( | ) | const |
Returns the radius of the outline.
float get_radius() const;
const Contour& clan::CollisionOutline::get_object_bounding_box | ( | ) | const |
Returns the contour used as an object bounding box. (an rotated rectangle)
void clan::CollisionOutline::get_rotation_hotspot | ( | Origin & | origin, |
float & | x, | ||
float & | y | ||
) | const |
Get the rotation hotspot of the outline.
Pointf clan::CollisionOutline::get_scale | ( | ) | const |
Returns the scaling factor.
Pointf clan::CollisionOutline::get_translation | ( | ) | const |
Returns the position of the outline.
unsigned int clan::CollisionOutline::get_width | ( | ) | const |
Returns the width of the image this outline was created from.
void clan::CollisionOutline::optimize | ( | unsigned char | check_distance = 3 , |
float | corner_angle = PI/5.0 |
||
) |
Optimize the outline by removing redundant points.
check_distance | = the distance of points compared on the outline |
corner_angle | = angle for a corner |
bool clan::CollisionOutline::point_inside | ( | const Pointf & | point | ) | const |
Returns true if a point is inside the outline.
point | = the point to test. |
void clan::CollisionOutline::rotate | ( | const Angle & | angle | ) |
Rotate the outline by angle (in degrees).
void clan::CollisionOutline::save | ( | const std::string & | fullname | ) | const |
Write the outline to a file.
fullname | = Name of file. |
void clan::CollisionOutline::save | ( | const std::string & | filename, |
FileSystem & | file_system | ||
) | const |
Save.
filename | = The filename |
directory | = Virtual Directory |
void clan::CollisionOutline::save | ( | IODevice & | file | ) | const |
Save.
file | = The file |
void clan::CollisionOutline::set_alignment | ( | Origin | origin, |
float | x = 0 , |
||
float | y = 0 |
||
) |
Set the translation hotspot of the outline.
void clan::CollisionOutline::set_angle | ( | const Angle & | angle | ) |
Set the angle (in degrees) of the outline.
void clan::CollisionOutline::set_collision_info | ( | const std::vector< CollidingContours > & | colinfo | ) |
This will set the collision info of the outline.
void clan::CollisionOutline::set_inside_test | ( | bool | value | ) |
Set to true if completely-inside test should be done.
void clan::CollisionOutline::set_rotation_hotspot | ( | Origin | origin, |
float | x = 0 , |
||
float | y = 0 |
||
) |
Set the rotation hotspot of the outline.
void clan::CollisionOutline::set_scale | ( | float | x, |
float | y | ||
) |
Set the scale of the outline.
void clan::CollisionOutline::set_translation | ( | float | x, |
float | y | ||
) |
Set the position of the outline.