enemy no longer moves trough walls!

This commit is contained in:
Magnus Küderli
2025-10-30 21:23:04 +01:00
parent a07d1cdc89
commit 068e38f232
9 changed files with 81 additions and 14 deletions
+7
View File
@@ -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
View File
@@ -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
View File
@@ -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();
+19
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
BIN
View File
Binary file not shown.
+14
View File
@@ -0,0 +1,14 @@
# ITEMS
## meele
-> sword
-> awe
-> lance
Shared properties (meele_data):
- damage
- animation
- animation timer
- hurtbox
- attack speed