2011-04-26 12:04:45 +02:00
|
|
|
/*
|
|
|
|
* This software is licensed under the terms of the MIT-License
|
|
|
|
* See COPYING for further information.
|
|
|
|
* ---
|
|
|
|
* Copyright (C) 2011, Lukas Weber <laochailan@web.de>
|
|
|
|
*/
|
|
|
|
|
2011-04-29 10:26:37 +02:00
|
|
|
#ifndef ENEMY_H
|
|
|
|
#define ENEMY_H
|
2011-04-26 12:04:45 +02:00
|
|
|
|
|
|
|
#include "animation.h"
|
|
|
|
#include <complex.h>
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
struct Enemy;
|
|
|
|
typedef void (*EnemyLogicRule)(struct Enemy*, int t);
|
|
|
|
typedef EnemyLogicRule EnemyDrawRule;
|
|
|
|
|
|
|
|
enum {
|
|
|
|
ENEMY_IMMUNE = -9000,
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct Enemy {
|
|
|
|
struct Enemy *next;
|
|
|
|
struct Enemy *prev;
|
|
|
|
|
|
|
|
long birthtime;
|
|
|
|
|
|
|
|
complex pos;
|
|
|
|
complex pos0;
|
|
|
|
|
|
|
|
int dir; // TODO: deprecate those
|
|
|
|
int moving;
|
|
|
|
|
|
|
|
EnemyLogicRule logic_rule;
|
|
|
|
EnemyDrawRule draw_rule;
|
|
|
|
|
|
|
|
int hp;
|
|
|
|
|
|
|
|
void *parent;
|
|
|
|
complex args[4];
|
|
|
|
} Enemy;
|
|
|
|
|
|
|
|
#define create_enemyg(drule, lrule, pos, hp, par, args) (create_enemy(&global.enemies, drule, lrule, pos, hp, par, args))
|
|
|
|
void create_enemy(Enemy **enemies, EnemyDrawRule draw_rule, EnemyLogicRule logic_rule,
|
|
|
|
complex pos, int hp, void *parent, complex args, ...);
|
|
|
|
void delete_enemy(Enemy **enemies, Enemy* enemy);
|
|
|
|
void draw_enemies(Enemy *enemies);
|
2011-04-26 22:39:50 +02:00
|
|
|
void delete_enemies(Enemy **enemies);
|
2011-04-26 12:04:45 +02:00
|
|
|
|
|
|
|
void process_enemies(Enemy **enemies);
|
|
|
|
|
|
|
|
void Fairy(Enemy*, int t);
|
|
|
|
#endif
|