kettek2/wiki/games/newsboy/Newsboy_0x00/engine/MetaBit.c

62 lines
1.6 KiB
C

#include "MetaBit.h"
#include <math.h>
#include <stdlib.h>
struct MetaBit *newMetaBit(int type, int owner, struct Vector *home, struct Phys phys) {
struct MetaBit *metabit = malloc(sizeof(struct MetaBit));
metabit->type = type;
metabit->home = home;
metabit->phys = phys;
metabit->l_phys = phys;
metabit->speed = 2.0f;
metabit->turn_rate = 0.1f;
metabit->owner = owner;
cleanVector(&metabit->home_offset);
metabit->target = NULL;
cleanVector(&metabit->target_offset);
cleanAnim(&metabit->animation);
metabit->attack_id = 0;
metabit->move_id = 0;
metabit->cmd = CMD_HOME;
metabit->r = 1.0f;
metabit->g = 1.0f;
metabit->b = 1.0f;
metabit->a = 1.0f;
return metabit;
}
struct MetaBit *freeMetaBit(struct MetaBit *metabit) {
free(metabit);
return NULL;
}
int setMetaBitAnim(struct MetaBit *metabit, struct AnimData* data) {
metabit->animation.anim = data;
setAnimSet(&metabit->animation, "spin");
setAnimFace(&metabit->animation, "s");
setAnimFrame(&metabit->animation, 0);
return 0;
}
// runs logic and influences velocity towards target
int handleMetaBit(struct MetaBit *metabit) {
Vector target;
if (metabit->target != NULL) {
target = addVector(*metabit->target, metabit->target_offset);
} else if (metabit->home != NULL) {
target = addVector(*metabit->home, metabit->home_offset);
} else {
target = metabit->phys.position;
}
// randomize movement
target.x += (-60 + (rand()%120));
target.y += (-60 + (rand()%120));
turnToVector(&metabit->phys, target, metabit->turn_rate);
addForce(&metabit->phys, metabit->speed + (rand()%(int)metabit->speed));
return 0;
}