|
Ivan Mahonin |
fdbd7d |
#ifndef PUZZLE_H
|
|
Ivan Mahonin |
fdbd7d |
#define PUZZLE_H
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
#include "line.h"
|
|
Ivan Mahonin |
fdbd7d |
#include "tile.h"
|
|
Ivan Mahonin |
fdbd7d |
#include "phisics.h"
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
#define PF_RENDERED (1 << 0)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_BORDER_L (1 << 1)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_BORDER_R (1 << 2)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_BORDER_T (1 << 3)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_BORDER_B (1 << 4)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_HANDLE_L (1 << 5)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_HANDLE_R (1 << 6)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_HANDLE_T (1 << 7)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_HANDLE_B (1 << 8)
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
#define PF_BORDERS (PF_BORDER_L|PF_BORDER_R|PF_BORDER_T|PF_BORDER_B)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_RENDERING (PF_BORDERS|PF_RENDERED)
|
|
Ivan Mahonin |
fdbd7d |
#define PF_HANDLES (PF_HANDLE_L|PF_HANDLE_R|PF_HANDLE_T|PF_HANDLE_B)
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
#define PCP_BODY 1
|
|
Ivan Mahonin |
fdbd7d |
#define PCP_EDGE 2
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
typedef struct Puzzle Puzzle;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
typedef struct {
|
|
Ivan Mahonin |
fdbd7d |
Puzzle *pz;
|
|
Ivan Mahonin |
fdbd7d |
int r, c;
|
|
Ivan Mahonin |
fdbd7d |
Tile t;
|
|
Ivan Mahonin |
fdbd7d |
PhGroup *parent;
|
|
Ivan Mahonin |
fdbd7d |
PhGroup group;
|
|
Ivan Mahonin |
fdbd7d |
PhNode nodes[5];
|
|
Ivan Mahonin |
fdbd7d |
Flags flags;
|
|
Ivan Mahonin |
fdbd7d |
} Chunk;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
struct Puzzle {
|
|
Ivan Mahonin |
fdbd7d |
int rows, cols, turn;
|
|
Ivan Mahonin |
fdbd7d |
Vertex **hlines;
|
|
Ivan Mahonin |
fdbd7d |
Vertex **vlines;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
Physics ph;
|
|
Ivan Mahonin |
fdbd7d |
Chunk **chunks;
|
|
Ivan Mahonin |
fdbd7d |
int groups;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
Animation image;
|
|
Ivan Mahonin |
fdbd7d |
TileMap tm;
|
|
Ivan Mahonin |
fdbd7d |
Vec cs;
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
Chunk **chunksOrder;
|
|
Ivan Mahonin |
fdbd7d |
int activeChunks;
|
|
Ivan Mahonin |
fdbd7d |
Vec gmouse;
|
|
Ivan Mahonin |
fdbd7d |
int mousefix;
|
|
Ivan Mahonin |
dcf1b6 |
int longframe;
|
|
Ivan Mahonin |
fdbd7d |
};
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
static inline Vec chunkGroupPos(Chunk *c)
|
|
Ivan Mahonin |
fdbd7d |
{ return vmulv( vadd(vec(c->c, c->r), vecxy(0.5)), c->pz->cs ); }
|
|
Ivan Mahonin |
fdbd7d |
static inline Vec chunkWorldPos(Chunk *c)
|
|
Ivan Mahonin |
fdbd7d |
{ return phGroupTrans(c->parent, chunkGroupPos(c)); }
|
|
Ivan Mahonin |
dcf1b6 |
static inline int chunkId(Chunk *c)
|
|
Ivan Mahonin |
dcf1b6 |
{ return c - c->pz->chunks[0]; }
|
|
Ivan Mahonin |
dcf1b6 |
static inline int chunkGid(Chunk *c)
|
|
Ivan Mahonin |
dcf1b6 |
{ return chunkId( (Chunk*)((char*)c->parent - offsetof(Chunk, group)) ); }
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
dcf1b6 |
|
|
Ivan Mahonin |
fdbd7d |
unsigned int chunkCalcEdges(Chunk *c);
|
|
Ivan Mahonin |
fdbd7d |
void chunkDrawBase(Chunk *c, unsigned int edges);
|
|
Ivan Mahonin |
fdbd7d |
void chunkDraw(Chunk *c);
|
|
Ivan Mahonin |
fdbd7d |
void chunkDrawDebug(Chunk *c);
|
|
Ivan Mahonin |
fdbd7d |
void chunkRender(Chunk *c);
|
|
Ivan Mahonin |
fdbd7d |
void chunkMerge(Chunk *a, Chunk *b);
|
|
Ivan Mahonin |
fdbd7d |
void chunkTryMerge(Chunk *a, int dr, int dc);
|
|
Ivan Mahonin |
fdbd7d |
Flags chunkCheckPoint(Chunk *c, Vec p);
|
|
Ivan Mahonin |
fdbd7d |
int chunkCheckEdge(Chunk *c, Vec p);
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
void puzzleAlloc(Puzzle *pz, int rows, int cols);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleFree(Puzzle *pz);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleClearImages(Puzzle *pz);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleGenLines(Puzzle *pz, double cellw, double cellh, double jitter, double depth);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleRecalcGroups(Puzzle *pz);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleGenChunks(Puzzle *pz);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleRenderChunks(Puzzle *pz, int size, double m);
|
|
Ivan Mahonin |
dcf1b6 |
int puzzlePopupGroup(Puzzle *pz, PhGroup *g);
|
|
Ivan Mahonin |
fdbd7d |
int puzzleChooseChunks(Puzzle *pz, Vec mouse);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleReleaseChunks(Puzzle *pz);
|
|
Ivan Mahonin |
fdbd7d |
void puzzleUpdate(Puzzle *pz, Vec hs, Vec mouse);
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
|
|
Ivan Mahonin |
fdbd7d |
#endif
|