naev 0.12.6
collision.h
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
4#pragma once
5
6#include "nxml.h" // IWYU pragma: keep
7#include "opengl_tex.h"
8#include "vec2.h"
9
13typedef struct CollPolyView_ {
14 float *x;
15 float *y;
16 float xmin;
17 float xmax;
18 float ymin;
19 float ymax;
20 int npt;
22
23typedef struct CollPoly_ {
24 CollPolyView *views;
25 double dir_inc;
26 double dir_off;
27} CollPoly;
28
29/* Loads a polygon data from xml. */
30void poly_load( CollPoly *polygon, xmlNodePtr node, const char *name );
31void poly_free( CollPoly *polygon );
32
33/* Rotates a polygon. */
34void poly_rotate( CollPolyView *rpolygon, const CollPolyView *ipolygon,
35 float theta );
36
37/* Gets a polygon view for an angle. */
38const CollPolyView *poly_view( const CollPoly *poly, double dir );
39
40/* Returns 1 if collision is detected */
41int CollideSprite( const glTexture *at, const int asx, const int asy,
42 const vec2 *ap, const glTexture *bt, const int bsx,
43 const int bsy, const vec2 *bp, vec2 *crash );
44int CollideLineLine( double s1x, double s1y, double e1x, double e1y, double s2x,
45 double s2y, double e2x, double e2y, vec2 *crash );
46int CollideLineSprite( const vec2 *ap, double ad, double al,
47 const glTexture *bt, const int bsx, const int bsy,
48 const vec2 *bp, vec2 crash[2] );
49int CollideCirclePolygon( const vec2 *ap, double ar, const CollPolyView *bt,
50 const vec2 *bp, vec2 crash[2] );
51int CollideCircleSprite( const vec2 *ap, double ar, const glTexture *bt,
52 const int bsx, const int bsy, const vec2 *bp,
53 vec2 *crash );
54int CollideLinePolygon( const vec2 *ap, double ad, double al,
55 const CollPolyView *bt, const vec2 *bp, vec2 crash[2] );
56int CollideSpritePolygon( const CollPolyView *apoly, const vec2 *ap,
57 const glTexture *bt, const int bsx, const int bsy,
58 const vec2 *bp, vec2 *crash );
59int CollidePolygon( const CollPolyView *at, const vec2 *ap,
60 const CollPolyView *bt, const vec2 *bp, vec2 *crash );
61int CollideLineCircle( const vec2 *p1, const vec2 *p2, const vec2 *cc,
62 double cr, vec2 crash[2] );
63int CollideCircleCircle( const vec2 *p1, double r1, const vec2 *p2, double r2,
64 vec2 crash[2] );
65
66/* Intersection area. */
67double CollideCircleIntersection( const vec2 *p1, double r1, const vec2 *p2,
68 double r2 );
int CollideCircleCircle(const vec2 *p1, double r1, const vec2 *p2, double r2, vec2 crash[2])
Computes the collision between two circles.
Definition collision.c:1142
int CollideSpritePolygon(const CollPolyView *at, const vec2 *ap, const glTexture *bt, int bsx, int bsy, const vec2 *bp, vec2 *crash)
Checks whether or not a sprite collides with a polygon.
Definition collision.c:233
void poly_rotate(CollPolyView *rpolygon, const CollPolyView *ipolygon, float theta)
Rotates a polygon.
Definition collision.c:385
int CollideLineCircle(const vec2 *p1, const vec2 *p2, const vec2 *cc, double cr, vec2 crash[2])
Checks to see if a line collides with a circle.
Definition collision.c:1030
int CollideLineSprite(const vec2 *ap, double ad, double al, const glTexture *bt, const int bsx, const int bsy, const vec2 *bp, vec2 crash[2])
Checks to see if a line collides with a sprite.
Definition collision.c:578
int CollideCircleSprite(const vec2 *ap, double ar, const glTexture *bt, const int bsx, const int bsy, const vec2 *bp, vec2 *crash)
Checks whether or not a sprite collides with a polygon.
Definition collision.c:941
int CollideCirclePolygon(const vec2 *ap, double ar, const CollPolyView *bt, const vec2 *bp, vec2 crash[2])
Checks to see if a circle collides with a polygon.
Definition collision.c:862
int CollideLinePolygon(const vec2 *ap, double ad, double al, const CollPolyView *bt, const vec2 *bp, vec2 crash[2])
Checks to see if a line collides with a polygon.
Definition collision.c:729
int CollideLineLine(double s1x, double s1y, double e1x, double e1y, double s2x, double s2y, double e2x, double e2y, vec2 *crash)
Checks to see if two lines collide.
Definition collision.c:526
void poly_load(CollPoly *polygon, xmlNodePtr base, const char *name)
Loads a polygon from an xml node.
Definition collision.c:37
int CollideSprite(const glTexture *at, const int asx, const int asy, const vec2 *ap, const glTexture *bt, const int bsx, const int bsy, const vec2 *bp, vec2 *crash)
Checks whether or not two sprites collide.
Definition collision.c:148
double CollideCircleIntersection(const vec2 *p1, double r1, const vec2 *p2, double r2)
Calculates the area of intersection between two circles.
Definition collision.c:1159
int CollidePolygon(const CollPolyView *at, const vec2 *ap, const CollPolyView *bt, const vec2 *bp, vec2 *crash)
Checks whether or not two polygons collide. /!\ The function is not symmetric: the points of polygon ...
Definition collision.c:311
Represents a polygon used for collision detection.
Definition collision.h:13
float * x
Definition collision.h:14
float * y
Definition collision.h:15
Abstraction for rendering sprite sheets.
Definition opengl_tex.h:43
Represents a 2d vector.
Definition vec2.h:45