62 lines
1.6 KiB
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;
|
|
}
|