enemy no longer moves trough walls!
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# BUGS
|
||||
[ ] Enemy teleporting to player when no path availible
|
||||
|
||||
# TODO
|
||||
[ ] Fully integrated item system
|
||||
[ ] Camera stopping at map border
|
||||
[ ] Allow dynamic object placement
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 300 B After Width: | Height: | Size: 324 B |
@@ -5,6 +5,11 @@
|
||||
typedef struct Player player_t;
|
||||
typedef struct World world_t;
|
||||
|
||||
typedef struct ItemTransl {
|
||||
Vector2 position;
|
||||
float rotation;
|
||||
} item_transl_t;
|
||||
|
||||
typedef enum ItemType {
|
||||
MEELE_WEAPON,
|
||||
} itemtype_t;
|
||||
|
||||
+14
-4
@@ -1,9 +1,19 @@
|
||||
# pragma once
|
||||
|
||||
# include <raylib.h>
|
||||
|
||||
#include "../include/item.h"
|
||||
|
||||
typedef struct ItemDataMeele {
|
||||
int damage;
|
||||
|
||||
item_transl_t animation[10];
|
||||
int used_animation_frames;
|
||||
|
||||
Rectangle hurtbox;
|
||||
float attack_speed;
|
||||
} itemdata_meele_t;
|
||||
|
||||
itemdata_meele_t* get_meele_data(void* data) {
|
||||
return (itemdata_meele_t*) data;
|
||||
}
|
||||
|
||||
itemdata_meele_t* get_meele_data(void* data);
|
||||
|
||||
item_t* create_meele_item_base();
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# include <stdlib.h>
|
||||
# include <assert.h>
|
||||
|
||||
# include "../include/item_meele.h"
|
||||
# include "../include/item.h"
|
||||
|
||||
itemdata_meele_t* get_meele_data(void* data) {
|
||||
return (itemdata_meele_t*) data;
|
||||
}
|
||||
|
||||
item_t* create_meele_item_base() {
|
||||
item_t* item_p = malloc(sizeof(item_t));
|
||||
assert(item_p);
|
||||
|
||||
item_p->item_data = (itemdata_meele_t*)malloc(sizeof(itemdata_meele_t));
|
||||
assert(item_p->item_data);
|
||||
|
||||
return item_p;
|
||||
}
|
||||
|
||||
+2
-6
@@ -5,17 +5,13 @@
|
||||
# include "../include/item.h"
|
||||
# include "../include/item_meele.h"
|
||||
|
||||
|
||||
item_t* create_item_sword() {
|
||||
item_t* item_p = malloc(sizeof(item_t));
|
||||
assert(item_p);
|
||||
|
||||
item_p->item_data = (itemdata_meele_t*)malloc(sizeof(itemdata_meele_t));
|
||||
assert(item_p->item_data);
|
||||
item_t* item_p = create_meele_item_base();
|
||||
|
||||
// item_p->icon = LoadTexture("");
|
||||
item_p->sprite = LoadTexture("assets/sprites/items/sword.png");
|
||||
item_p->render_offset = (Vector2) { 6, -6 };
|
||||
item_p->render_offset = (Vector2) { 4, -5 };
|
||||
|
||||
item_p->type = MEELE_WEAPON;
|
||||
item_p->item_action = NULL;
|
||||
|
||||
+20
-4
@@ -1,4 +1,5 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../include/world.h"
|
||||
@@ -11,10 +12,12 @@
|
||||
#include "../include/enemy.h"
|
||||
|
||||
# define TARGET_DIST 5
|
||||
# define SPEED_CAP 20
|
||||
|
||||
int enemy_follow_path(enemy_t* enemy, player_t* player, world_t* world) {
|
||||
if (enemy->path.finished) {
|
||||
// target is reached
|
||||
// target is reached or unreachable
|
||||
|
||||
Vector2 player_pos = get_entity_center(&player->entity);
|
||||
Vector2 p_to_e = Vector2Subtract(get_entity_center(&enemy->entity), player_pos);
|
||||
Vector2 p_to_e_len_5 = Vector2Scale(Vector2Normalize(p_to_e), 5.0);
|
||||
@@ -23,9 +26,22 @@ int enemy_follow_path(enemy_t* enemy, player_t* player, world_t* world) {
|
||||
|
||||
Vector2 dir_target = Vector2Subtract(target_point, get_entity_center(&enemy->entity));
|
||||
float speed = 2.0;
|
||||
Vector2 step = Vector2Scale(dir_target, GetFrameTime() * speed);
|
||||
enemy->entity.position = Vector2Add(enemy->entity.position, step);
|
||||
enemy->path.currently_moving = Vector2Length(step) > 0.001;
|
||||
Vector2 step = Vector2Scale(dir_target, GetFrameTime() * speed * 1000);
|
||||
float step_len = Vector2Length(step);
|
||||
if (step_len < 0.1) {
|
||||
set_entity_center(&enemy->entity, target_point);
|
||||
}
|
||||
float max_len = SPEED_CAP * 1000 * GetFrameTime();
|
||||
if (step_len > max_len) {
|
||||
step = Vector2Scale(Vector2Normalize(step), max_len);
|
||||
}
|
||||
printf("step: %f\n", step_len);
|
||||
enemy->path.currently_moving = step_len > 0.1;
|
||||
|
||||
// enemy->entity.position = Vector2Add(enemy->entity.position, step);
|
||||
enemy->entity.velocity = step;
|
||||
entity_move_and_collide(&enemy->entity, world);
|
||||
enemy->entity.velocity = (Vector2){ 0, 0 };
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user