123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #ifndef bumpshape_H_INCLUDED
- #define bumpshape_H_INCLUDED
- /** Shapes and bounds boxes for the bump physics system.
- * These are all small structs intended to be used as value types.
- */
- #include <stdarg.h>
- #include "bevec.h"
- struct BumpAABB;
- typedef struct BumpAABB_ BumpAABB;
- typedef struct BumpCircle_ BumpCircle;
- typedef struct BumpSegment_ BumpSegment;
- typedef struct BumpShapeHeader_ BumpShapeHeader;
- typedef struct BumpBoxShape_ BumpBoxShape;
- typedef struct BumpCircleShape_ BumpCircleShape;
- typedef struct BumpSegmentShape_ BumpSegmentShape;
- typedef struct BumpErrorShape_ BumpErrorShape;
- typedef union BumpShape_ BumpShape;
- /* Axis Aligned bounds box. */
- struct BumpAABB_ { BeVec p; BeVec hs; };
- /* Circle. */
- struct BumpCircle_ { BeVec p; double radius; };
- /* Line segment. Segment stretches from p1 to p2 */
- struct BumpSegment_ { BeVec p1; BeVec p2; };
- /* Types of BumpShapes */
- enum BumpShapeType_ {
- BUMPSHAPE_BOX = 0,
- BUMPSHAPE_CIRCLE = 1,
- BUMPSHAPE_SEGMENT = 2,
- BUMPSHAPE_MAX = 3,
- BUMPSHAPE_ERROR = 69,
- };
- struct BumpShapeHeader_ {
- int type;
- };
- /* Shapes */
- struct BumpErrorShape_ {
- int type;
- int code;
- };
- /* Shapes */
- struct BumpBoxShape_ {
- int type;
- BumpAABB shape;
- };
- /* Shapes */
- struct BumpCircleShape_ {
- int type;
- BumpCircle shape;
- };
- /* Shapes */
- struct BumpSegmentShape_ {
- int type;
- BumpSegment shape;
- };
- /* Shape type. Uses the overlapping structs in a union trick. */
- union BumpShape_ {
- BumpShapeHeader header;
- BumpBoxShape box;
- BumpCircleShape circle;
- BumpSegmentShape segment;
- BumpErrorShape error;
- };
- BumpAABB bumpaabb(double cx, double cy, double w, double h);
- BumpAABB bumpaabb_make_int(int x, int y, int w, int h);
- BumpCircle bumpcircle(double cx, double cy, double radius);
- BumpCircle bumpcircle_make_int(int x, int y, int radius);
- BumpSegment bumpsegment(double x1, double y1, double x2, double y2);
- BumpSegment bumpsegment_make_int(int x1, int y1, int x2, int y2);
- BumpShape bumpcircleshape(double cx, double cy, double radius);
- BumpShape bumpsegmentshape(double x1, double y1, double x2, double y2);
- BumpShape bumpboxshape(double cx, double cy, double w, double h);
- BumpShape bumperrorshape(int errorcode);
- BumpShape bumpshape_va(int type, va_list args);
- BumpShape bumpshape(int type, ...);
- double bumpaabb_left(BumpAABB * self);
- double bumpaabb_right(BumpAABB * self);
- double bumpaabb_top(BumpAABB * self);
- double bumpaabb_down(BumpAABB * self);
- double bumpaabb_width(BumpAABB * self);
- double bumpaabb_height(BumpAABB * self);
- double bumpaabb_overlap_x(BumpAABB self, BumpAABB other);
- /* Returns overlap of the bounds boxes of self and other in y direction.
- * May be zero or negative if no overlap.
- */
- double bumpaabb_overlap_y(BumpAABB self, BumpAABB other);
- /* Returns overlap of the bounds boxes of self and other in x direction.
- * May be zero or negative if no overlap.
- */
- double bumpaabb_overlap_x_raw(BumpAABB self, BumpAABB other);
- /* Returns overlap of the bounds boxes of self and other in y direction.
- * May be zero or negative if no overlap.
- */
- double bumpaabb_overlap_y_raw(BumpAABB self, BumpAABB other);
- /* Returns the overlap vector between two bounds boxes. */
- BeVec bumpaabb_overlap_vector(BumpAABB self, BumpAABB other);
- /* Returns whether or not there is overlap between two bounds boxes. */
- int bumpaabb_overlap_p(BumpAABB self, BumpAABB other);
- #endif
|