prosperon/source/engine/2dphysics.h

116 lines
2.7 KiB
C
Raw Normal View History

2021-11-30 21:29:18 -06:00
#ifndef TWODPHYSICS_H
#define TWODPHYSICS_H
2022-01-21 11:26:22 -06:00
#include <chipmunk/chipmunk.h>
2023-01-11 16:57:34 -06:00
#include "script.h"
2021-11-30 21:29:18 -06:00
extern float phys2d_gravity;
extern int physOn;
extern cpSpace *space;
struct phys2d_shape {
cpShape *shape;
2023-01-12 17:41:54 -06:00
int go;
void *data;
void (*debugdraw)(void *data);
2021-11-30 21:29:18 -06:00
};
struct phys2d_circle {
float radius;
float offset[2];
struct phys2d_shape shape;
};
struct phys2d_segment {
float a[2];
float b[2];
float thickness;
struct phys2d_shape shape;
};
struct phys2d_box {
float w;
float h;
float offset[2];
2022-08-17 00:01:51 -05:00
float r;
2021-11-30 21:29:18 -06:00
struct phys2d_shape shape;
};
struct phys2d_edge {
int n;
float *points;
float thickness;
cpShape **shapes;
struct phys2d_shape shape;
};
struct phys2d_poly {
int n;
float *points;
float radius;
struct phys2d_shape shape;
};
2023-01-12 17:41:54 -06:00
struct phys2d_circle *Make2DCircle(int go);
2022-08-28 22:34:33 -05:00
void phys2d_circledel(struct phys2d_circle *c);
2021-11-30 21:29:18 -06:00
void phys2d_applycircle(struct phys2d_circle *circle);
void phys2d_dbgdrawcircle(struct phys2d_circle *circle);
2022-08-12 14:03:56 -05:00
void circle_gui(struct phys2d_circle *circle);
2021-11-30 21:29:18 -06:00
2023-01-12 17:41:54 -06:00
struct phys2d_segment *Make2DSegment(int go);
2022-08-28 22:34:33 -05:00
void phys2d_segdel(struct phys2d_segment *seg);
2021-11-30 21:29:18 -06:00
void phys2d_applyseg(struct phys2d_segment *seg);
void phys2d_dbgdrawseg(struct phys2d_segment *seg);
2022-08-12 14:03:56 -05:00
void segment_gui(struct phys2d_segment *seg);
2021-11-30 21:29:18 -06:00
2023-01-12 17:41:54 -06:00
struct phys2d_box *Make2DBox(int go);
2022-08-28 22:34:33 -05:00
void phys2d_boxdel(struct phys2d_box *box);
2021-11-30 21:29:18 -06:00
void phys2d_applybox(struct phys2d_box *box);
void phys2d_dbgdrawbox(struct phys2d_box *box);
2022-08-12 14:03:56 -05:00
void box_gui(struct phys2d_box *box);
2021-11-30 21:29:18 -06:00
2023-01-12 17:41:54 -06:00
struct phys2d_poly *Make2DPoly(int go);
2022-08-28 22:34:33 -05:00
void phys2d_polydel(struct phys2d_poly *poly);
2021-11-30 21:29:18 -06:00
void phys2d_applypoly(struct phys2d_poly *poly);
void phys2d_dbgdrawpoly(struct phys2d_poly *poly);
void phys2d_polyaddvert(struct phys2d_poly *poly);
2022-08-12 14:03:56 -05:00
void poly_gui(struct phys2d_poly *poly);
2021-11-30 21:29:18 -06:00
2023-01-12 17:41:54 -06:00
struct phys2d_edge *Make2DEdge(int go);
2022-08-28 22:34:33 -05:00
void phys2d_edgedel(struct phys2d_edge *edge);
2021-11-30 21:29:18 -06:00
void phys2d_applyedge(struct phys2d_edge *edge);
void phys2d_edgeshapeapply(struct phys2d_shape *mshape, cpShape * shape);
void phys2d_dbgdrawedge(struct phys2d_edge *edge);
void phys2d_edgeaddvert(struct phys2d_edge *edge);
2022-08-12 14:03:56 -05:00
void edge_gui(struct phys2d_edge *edge);
2021-11-30 21:29:18 -06:00
void phys2d_init();
void phys2d_update(float deltaT);
2023-01-11 16:57:34 -06:00
struct phys_cbs {
struct callee begin;
struct callee separate;
};
2023-01-12 17:41:54 -06:00
void phys2d_add_handler_type(int cmd, int go, struct callee c);
2023-01-11 16:57:34 -06:00
void register_collide(void *sym);
2023-01-10 17:23:11 -06:00
void phys2d_set_gravity(cpVect v);
2022-12-20 08:16:26 -06:00
cpShape *id2shape(int id);
2023-01-16 02:16:39 -06:00
struct color {
unsigned char r;
unsigned char g;
unsigned char b;
};
void set_dbg_color(struct color);
void set_trigger_color(struct color);
2022-08-12 14:03:56 -05:00
void shape_gui(struct phys2d_shape *shape);
2021-11-30 21:29:18 -06:00
void phys2d_reindex_body(cpBody *body);
2021-11-30 21:29:18 -06:00
#endif