|
|
3f9996 |
|
|
|
3f9996 |
#include <assert.h></assert.h>
|
|
|
3f9996 |
#include <string.h></string.h>
|
|
|
3f9996 |
#include <stdlib.h></stdlib.h>
|
|
|
8535a3 |
#include <stdio.h></stdio.h>
|
|
|
3f9996 |
#include <ctype.h></ctype.h>
|
|
|
3f9996 |
#include <math.h></math.h>
|
|
|
3f9996 |
|
|
|
8535a3 |
#include <cairo.h></cairo.h>
|
|
|
8535a3 |
|
|
|
3f9996 |
#include "common.h"
|
|
|
3f9996 |
#include "sprite.h"
|
|
|
3f9996 |
|
|
|
3f9996 |
|
|
|
8535a3 |
// globals
|
|
|
3f9996 |
|
|
|
8535a3 |
extern cairo_t *heliCairo;
|
|
|
3f9996 |
|
|
|
3f9996 |
|
|
|
3f9996 |
// string
|
|
|
3f9996 |
|
|
|
8535a3 |
char* heliStringCopy(const char *x);
|
|
|
8535a3 |
char* heliStringConcat3(const char *a, const char *b, const char *c);
|
|
|
8535a3 |
int heliStringEndsWithLowcase(const char *s, const char *tail);
|
|
|
3f9996 |
void heliLowercase(char *x);
|
|
|
8535a3 |
void heliParseColor(const char *x, double *color);
|
|
|
3f9996 |
|
|
|
3f9996 |
// pointer array
|
|
|
3f9996 |
|
|
|
8535a3 |
typedef void (*HeliFreeCallback)(void*);
|
|
|
8535a3 |
|
|
|
8535a3 |
typedef struct _HeliPair {
|
|
|
8535a3 |
void *key;
|
|
|
8535a3 |
void *value;
|
|
|
8535a3 |
HeliFreeCallback freeKey;
|
|
|
8535a3 |
HeliFreeCallback freeValue;
|
|
|
8535a3 |
} HeliPair;
|
|
|
8535a3 |
|
|
|
3f9996 |
typedef struct _HeliArray {
|
|
|
8535a3 |
HeliPair *items;
|
|
|
3f9996 |
int count;
|
|
|
3f9996 |
int allocated;
|
|
|
3f9996 |
} HeliArray;
|
|
|
3f9996 |
|
|
|
8535a3 |
void heliPairInit(HeliPair *p);
|
|
|
8535a3 |
void heliPairDestroy(HeliPair *p);
|
|
|
8535a3 |
|
|
|
07b70f |
void heliArrayInit(HeliArray *a);
|
|
|
8535a3 |
void heliArrayClear(HeliArray *a);
|
|
|
07b70f |
void heliArrayDestroy(HeliArray *a);
|
|
|
8535a3 |
HeliPair* heliArrayGet(HeliArray *a, int i);
|
|
|
8535a3 |
void* heliArrayGetKey(HeliArray *a, int i);
|
|
|
8535a3 |
void* heliArrayGetValue(HeliArray *a, int i);
|
|
|
8535a3 |
HeliPair* heliArrayInsert(HeliArray *a, int i, void *v, HeliFreeCallback fv);
|
|
|
8535a3 |
HeliPair* heliArrayInsertPair(HeliArray *a, int i, void *k, void *v, HeliFreeCallback fk, HeliFreeCallback fv);
|
|
|
8535a3 |
void heliArrayRemove(HeliArray *a, int i);
|
|
|
8535a3 |
|
|
|
8535a3 |
HeliPair* heliStringmapFind(HeliArray *a, const char *k, int *gtOrEqIndex);
|
|
|
8535a3 |
HeliPair* heliStringmapGet(HeliArray *a, const char *k);
|
|
|
8535a3 |
HeliPair* heliStringmapAdd(HeliArray *a, const char *k, void *v, HeliFreeCallback fv);
|
|
|
8535a3 |
int heliStringmapRemove(HeliArray *a, const char *k);
|
|
|
3f9996 |
|
|
|
8535a3 |
|
|
|
8535a3 |
// animation
|
|
|
8535a3 |
|
|
|
8535a3 |
typedef struct _HeliAnimation {
|
|
|
8535a3 |
char *path;
|
|
|
8535a3 |
HeliArray frames;
|
|
|
8535a3 |
int refcount;
|
|
|
8535a3 |
} HeliAnimation;
|
|
|
8535a3 |
|
|
|
8535a3 |
HeliAnimation *heliCreateAnimation(const char *path);
|
|
|
8535a3 |
void heliAnimationUnref(HeliAnimation *a);
|
|
|
07b70f |
void heliAnimationFinish();
|
|
|
3f9996 |
|
|
|
3f9996 |
|
|
|
3f9996 |
// collider
|
|
|
3f9996 |
|
|
|
3f9996 |
typedef struct _HeliCollider {
|
|
|
3f9996 |
Collider type;
|
|
|
3f9996 |
double x;
|
|
|
3f9996 |
double y;
|
|
|
3f9996 |
double radius;
|
|
|
3f9996 |
double width;
|
|
|
3f9996 |
double height;
|
|
|
3f9996 |
double rotation;
|
|
|
3f9996 |
} HeliCollider;
|
|
|
3f9996 |
|
|
|
3f9996 |
int heliCheckCollision(HeliCollider *a, HeliCollider *b, double *normX, double *normY);
|
|
|
3f9996 |
int heliPointCollision(HeliCollider *c, double x, double y);
|
|
|
3f9996 |
|
|
|
8535a3 |
|
|
|
8535a3 |
// sprite
|
|
|
8535a3 |
|
|
|
07b70f |
typedef void (*HeliSpriteEashInt)(Sprite, int);
|
|
|
07b70f |
typedef void (*HeliSpriteEashDouble)(Sprite, double);
|
|
|
07b70f |
typedef void (*HeliSpriteEashString)(Sprite, const char*);
|
|
|
8535a3 |
HeliArray* heliSpriteGetGroups(Sprite sprite);
|
|
|
07b70f |
void heliSpriteUpdate(double dt);
|
|
|
07b70f |
void heliSpriteFinish();
|
|
|
8535a3 |
|
|
|
07b70f |
|
|
|
07b70f |
// drawing
|
|
|
07b70f |
|
|
|
07b70f |
void heliDrawingPrepareFrame();
|
|
|
07b70f |
void heliDrawingFinish();
|