|
Ivan Mahonin |
fdbd7d |
#ifndef PHISICS_H
|
|
Ivan Mahonin |
fdbd7d |
#define PHISICS_H
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
#include "common.h"
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
typedef struct PhLink PhLink;
|
|
Ivan Mahonin |
fdbd7d |
typedef struct PhNode PhNode;
|
|
Ivan Mahonin |
fdbd7d |
typedef struct PhGroup PhGroup;
|
|
Ivan Mahonin |
fdbd7d |
typedef struct Physics Physics;
|
|
Ivan Mahonin |
fdbd7d |
typedef PhLink *PhCell;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
struct PhLink {
|
|
Ivan Mahonin |
fdbd7d |
PhNode *node;
|
|
Ivan Mahonin |
fdbd7d |
PhCell *cell;
|
|
Ivan Mahonin |
fdbd7d |
PhLink *prev, *next;
|
|
Ivan Mahonin |
fdbd7d |
};
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
struct PhNode {
|
|
Ivan Mahonin |
fdbd7d |
PhGroup *group;
|
|
Ivan Mahonin |
fdbd7d |
PhNode *prev, *next;
|
|
Ivan Mahonin |
fdbd7d |
PhLink l[4];
|
|
Ivan Mahonin |
fdbd7d |
double r;
|
|
Ivan Mahonin |
fdbd7d |
Vec p, gp, gk;
|
|
Ivan Mahonin |
fdbd7d |
size_t mark; // temporary mark
|
|
Ivan Mahonin |
fdbd7d |
PhNode *chain; // temporary chain
|
|
Ivan Mahonin |
fdbd7d |
};
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
struct PhGroup {
|
|
Ivan Mahonin |
fdbd7d |
Physics *ph;
|
|
Ivan Mahonin |
fdbd7d |
PhGroup *prev, *next;
|
|
Ivan Mahonin |
fdbd7d |
PhNode *first, *last;
|
|
Ivan Mahonin |
fdbd7d |
int cnt;
|
|
Ivan Mahonin |
fdbd7d |
Vec go, o, dx;
|
|
Ivan Mahonin |
fdbd7d |
};
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
struct Physics {
|
|
Ivan Mahonin |
fdbd7d |
PhGroup *first, *last;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
double cs;
|
|
Ivan Mahonin |
fdbd7d |
int hw, hh;
|
|
Ivan Mahonin |
fdbd7d |
PhCell *cells;
|
|
Ivan Mahonin |
fdbd7d |
size_t lastMark;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
Vec b0, b1;
|
|
Ivan Mahonin |
fdbd7d |
int fixangle;
|
|
Ivan Mahonin |
fdbd7d |
};
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
void phLinkUnreg(PhLink *l);
|
|
Ivan Mahonin |
fdbd7d |
void phLinkReg(PhLink *l, PhCell *c);
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
void phNodeUnregCell(PhNode *n);
|
|
Ivan Mahonin |
fdbd7d |
void phNodeRegCell(PhNode *n, PhCell *c, int stride);
|
|
Ivan Mahonin |
fdbd7d |
void phNodeUpdateCell(PhNode *n);
|
|
Ivan Mahonin |
fdbd7d |
void phNodeUnreg(PhNode *n);
|
|
Ivan Mahonin |
fdbd7d |
void phNodeReg(PhNode *n, PhGroup *g);
|
|
Ivan Mahonin |
fdbd7d |
int phNodeBound(PhNode *n, Vec b0, Vec b1);
|
|
Ivan Mahonin |
fdbd7d |
int phNodeCollision(PhNode *n);
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
static inline Vec phGroupTrans(PhGroup *g, Vec gp) { return vtrans(vsub(gp, g->go), g->dx, g->o); }
|
|
Ivan Mahonin |
fdbd7d |
static inline Vec phGroupUntrans(PhGroup *g, Vec p) { return vadd(vuntrans(p, g->dx, g->o), g->go); }
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
void phGroupUpdateCells(PhGroup *g);
|
|
Ivan Mahonin |
fdbd7d |
void phGroupUnreg(PhGroup *g);
|
|
Ivan Mahonin |
fdbd7d |
void phGroupReg(PhGroup *g, Physics *ph);
|
|
Ivan Mahonin |
fdbd7d |
void phGroupRecalc(PhGroup *g);
|
|
Ivan Mahonin |
fdbd7d |
void phGroupPlaceNodes(PhGroup *g);
|
|
Ivan Mahonin |
fdbd7d |
void phGroupFix(PhGroup *g, int fixangle);
|
|
Ivan Mahonin |
fdbd7d |
void phGroupMove(PhGroup *g, Vec gp, Vec p, int fixangle);
|
|
Ivan Mahonin |
fdbd7d |
void phGroupMerge(PhGroup *a, PhGroup *b);
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
void physicsAlloc(Physics *ph, int hw, int hh, double cs);
|
|
Ivan Mahonin |
fdbd7d |
void physicsFree(Physics *ph);
|
|
Ivan Mahonin |
fdbd7d |
PhCell* physicsCell(Physics *ph, Vec p);
|
|
Ivan Mahonin |
fdbd7d |
void physicsClear(Physics *ph);
|
|
Ivan Mahonin |
fdbd7d |
int physicsUpdate(Physics *ph);
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
void physicsDrawDebug(Physics *ph);
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
#endif
|