Updated entities.
This commit is contained in:
parent
699c66485c
commit
a29e81d131
65
src/defs.h
65
src/defs.h
|
@ -81,18 +81,56 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#define MAX_WIDGET_OPTIONS 8
|
#define MAX_WIDGET_OPTIONS 8
|
||||||
|
|
||||||
#define ET_ENEMY 0
|
enum
|
||||||
#define ET_KEY 1
|
{
|
||||||
#define ET_MIA 2
|
ET_EFFECT,
|
||||||
#define ET_BOB 3
|
ET_TRAP,
|
||||||
#define ET_DESTRUCTABLE 4
|
ET_BOB,
|
||||||
#define ET_BOSS 5
|
ET_ENEMY,
|
||||||
|
ET_TEEKA,
|
||||||
|
ET_BOSS,
|
||||||
|
ET_HEART_CELL,
|
||||||
|
ET_KEY,
|
||||||
|
ET_ITEM,
|
||||||
|
ET_CONSUMABLE,
|
||||||
|
ET_MIA,
|
||||||
|
ET_DECORATION,
|
||||||
|
ET_DOOR,
|
||||||
|
ET_LIFT,
|
||||||
|
ET_PUSHBLOCK,
|
||||||
|
ET_DESTRUCTABLE,
|
||||||
|
ET_POWER_POINT,
|
||||||
|
ET_CARD_READER,
|
||||||
|
ET_PRESSURE_PLATE,
|
||||||
|
ET_TELEPORTER,
|
||||||
|
ET_ITEM_PAD,
|
||||||
|
ET_POOL,
|
||||||
|
ET_EXIT,
|
||||||
|
ET_INFO_POINT
|
||||||
|
};
|
||||||
|
|
||||||
#define EF_NONE 0
|
#define EF_NONE 0
|
||||||
#define EF_HEART_CELL (2 << 0)
|
#define EF_WEIGHTLESS (2 << 0)
|
||||||
#define EF_WEIGHTLESS (2 << 1)
|
#define EF_BOUNCES (2 << 1)
|
||||||
#define EF_BOMB_SHIELD (2 << 2)
|
#define EF_TELEPORTING (2 << 2)
|
||||||
#define EF_IMMUNE (2 << 3)
|
#define EF_NO_ENVIRONMENT (2 << 3)
|
||||||
|
#define EF_SWIMS (2 << 4)
|
||||||
|
#define EF_HALT_AT_EDGE (2 << 5)
|
||||||
|
#define EF_NO_CLIP (2 << 6)
|
||||||
|
#define EF_EXPLODES (2 << 7)
|
||||||
|
#define EF_IGNORE_BULLETS (2 << 8)
|
||||||
|
#define EF_FLICKER (2 << 9)
|
||||||
|
#define EF_FRICTIONLESS (2 << 10)
|
||||||
|
#define EF_WATER_BREATHING (2 << 11)
|
||||||
|
#define EF_IMMUNE (2 << 12)
|
||||||
|
#define EF_BOMB_SHIELD (2 << 13)
|
||||||
|
#define EF_GONE (2 << 14)
|
||||||
|
#define EF_KILL_OFFSCREEN (2 << 15)
|
||||||
|
#define EF_ALWAYS_PROCESS (2 << 16)
|
||||||
|
#define EF_NO_TELEPORT (2 << 17)
|
||||||
|
|
||||||
|
#define GRAVITY_POWER 0.5f
|
||||||
|
#define FRICTION 0.75f
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -153,6 +191,11 @@ enum
|
||||||
PLANE_FOREGROUND
|
PLANE_FOREGROUND
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
ENV_AIR
|
||||||
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PT_LINE,
|
PT_LINE,
|
||||||
|
|
|
@ -84,6 +84,7 @@ typedef struct {
|
||||||
} Delegate;
|
} Delegate;
|
||||||
|
|
||||||
struct Entity {
|
struct Entity {
|
||||||
|
unsigned long uniqueId;
|
||||||
char name[MAX_NAME_LENGTH];
|
char name[MAX_NAME_LENGTH];
|
||||||
int type;
|
int type;
|
||||||
float x;
|
float x;
|
||||||
|
@ -91,9 +92,12 @@ struct Entity {
|
||||||
int w;
|
int w;
|
||||||
int h;
|
int h;
|
||||||
int health;
|
int health;
|
||||||
|
int healthMax;
|
||||||
int alive;
|
int alive;
|
||||||
float dx;
|
float dx;
|
||||||
float dy;
|
float dy;
|
||||||
|
int tx;
|
||||||
|
int ty;
|
||||||
int reload;
|
int reload;
|
||||||
int isOnGround;
|
int isOnGround;
|
||||||
int facing;
|
int facing;
|
||||||
|
@ -101,6 +105,11 @@ struct Entity {
|
||||||
int weaponType;
|
int weaponType;
|
||||||
int shotsToFire;
|
int shotsToFire;
|
||||||
int isSolid;
|
int isSolid;
|
||||||
|
int environment;
|
||||||
|
int isStatic;
|
||||||
|
int isMissionTarget;
|
||||||
|
int thinkTime;
|
||||||
|
int plane;
|
||||||
int value;
|
int value;
|
||||||
long flags;
|
long flags;
|
||||||
SDL_Rect bounds;
|
SDL_Rect bounds;
|
||||||
|
@ -219,6 +228,7 @@ typedef struct {
|
||||||
int enemiesKilled;
|
int enemiesKilled;
|
||||||
int missionsPlayed;
|
int missionsPlayed;
|
||||||
long timePlayed;
|
long timePlayed;
|
||||||
|
unsigned long entityCounter;
|
||||||
char worldId[MAX_NAME_LENGTH];
|
char worldId[MAX_NAME_LENGTH];
|
||||||
int isResumingMission;
|
int isResumingMission;
|
||||||
int isComplete;
|
int isComplete;
|
||||||
|
|
|
@ -29,9 +29,116 @@ Entity *createEntity(void)
|
||||||
world.entityTail->next = e;
|
world.entityTail->next = e;
|
||||||
world.entityTail = e;
|
world.entityTail = e;
|
||||||
|
|
||||||
|
e->uniqueId = game.entityCounter++;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initEntity(Entity *e)
|
||||||
|
{
|
||||||
|
e->sprite[0] = e->sprite[1] = e->sprite[2] = -1;
|
||||||
|
|
||||||
|
e->environment = ENV_AIR;
|
||||||
|
e->alive = ALIVE_ALIVE;
|
||||||
|
|
||||||
|
e->isOnGround = 0;
|
||||||
|
e->isSolid = 0;
|
||||||
|
e->isStatic = 0;
|
||||||
|
e->isMissionTarget = 0;
|
||||||
|
|
||||||
|
e->health = e->healthMax = 1;
|
||||||
|
|
||||||
|
e->facing = FACING_LEFT;
|
||||||
|
|
||||||
|
e->spriteFrame = -1;
|
||||||
|
e->spriteTime = 0;
|
||||||
|
|
||||||
|
e->dx = e->dy = 0;
|
||||||
|
|
||||||
|
e->flags = 0;
|
||||||
|
|
||||||
|
e->owner = NULL;
|
||||||
|
|
||||||
|
e->thinkTime = 0;
|
||||||
|
|
||||||
|
e->plane = PLANE_BACKGROUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Rect *getEntityBounds(Entity *e)
|
||||||
|
{
|
||||||
|
e->bounds.x = e->x;
|
||||||
|
e->bounds.y = e->y;
|
||||||
|
e->bounds.w = e->w;
|
||||||
|
e->bounds.h = e->h;
|
||||||
|
|
||||||
|
return &e->bounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getCurrentEntitySprite(Entity *e)
|
||||||
|
{
|
||||||
|
return e->sprite[e->facing];
|
||||||
|
}
|
||||||
|
|
||||||
|
void animateEntity(Entity *e)
|
||||||
|
{
|
||||||
|
Sprite *spr;
|
||||||
|
|
||||||
|
if (e->spriteTime != -1)
|
||||||
|
{
|
||||||
|
e->spriteTime--;
|
||||||
|
|
||||||
|
if (e->spriteTime <= 0)
|
||||||
|
{
|
||||||
|
spr = getSpriteByIndex(getCurrentEntitySprite(e));
|
||||||
|
e->spriteFrame = wrap(e->spriteFrame + 1, 0, 1);
|
||||||
|
e->spriteTime = 0;
|
||||||
|
e->w = spr->w;
|
||||||
|
e->h = spr->h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setEntitySize(Entity *e)
|
||||||
|
{
|
||||||
|
Sprite *spr;
|
||||||
|
|
||||||
|
spr = getSpriteByIndex(getCurrentEntitySprite(e));
|
||||||
|
e->w = spr->w;
|
||||||
|
e->h = spr->h;
|
||||||
|
}
|
||||||
|
|
||||||
|
float bounce(Entity *e, float x)
|
||||||
|
{
|
||||||
|
if (!(e->flags & EF_BOUNCES))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (e->flags & EF_FRICTIONLESS)
|
||||||
|
{
|
||||||
|
return -x;
|
||||||
|
}
|
||||||
|
|
||||||
|
x = -x * FRICTION;
|
||||||
|
|
||||||
|
if (x > -1 && x < 1)
|
||||||
|
{
|
||||||
|
e->flags &= ~EF_BOUNCES;
|
||||||
|
x = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
void teleport(Entity *e, float tx, float ty)
|
||||||
|
{
|
||||||
|
e->tx = tx;
|
||||||
|
e->ty = ty;
|
||||||
|
|
||||||
|
e->flags |= EF_TELEPORTING;
|
||||||
|
|
||||||
|
addTeleportStars(e);
|
||||||
|
}
|
||||||
|
|
||||||
void activateEntities(char *names, int activate)
|
void activateEntities(char *names, int activate)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,4 +20,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "../common.h"
|
#include "../common.h"
|
||||||
|
|
||||||
|
extern Sprite *getSpriteByIndex(int x);
|
||||||
|
extern float wrap(float value, float low, float high);
|
||||||
|
extern void addTeleportStars(Entity *e);
|
||||||
|
|
||||||
|
extern Game game;
|
||||||
extern World world;
|
extern World world;
|
||||||
|
|
|
@ -173,7 +173,7 @@ static int isMissingHeartCell(char *targetName)
|
||||||
{
|
{
|
||||||
if (e->alive == ALIVE_ALIVE)
|
if (e->alive == ALIVE_ALIVE)
|
||||||
{
|
{
|
||||||
if (e->flags & EF_HEART_CELL)
|
if (e->type == ET_HEART_CELL)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue