forked from NotAShelf/rogged
Compare commits
No commits in common. "0cb0ca17ffdc914d1ef07325fe718ebced3ebfd7" and "d01a54161d4b89ea15845b9e47a4cc61a5c3c7b3" have entirely different histories.
0cb0ca17ff
...
d01a54161d
3 changed files with 19 additions and 5 deletions
|
|
@ -446,10 +446,8 @@ static int handle_movement_input(GameState *gs) {
|
||||||
MoveResult result =
|
MoveResult result =
|
||||||
try_move_entity(&gs->player.position, direction, &gs->map, &gs->player, gs->enemies, gs->enemy_count, true);
|
try_move_entity(&gs->player.position, direction, &gs->map, &gs->player, gs->enemies, gs->enemy_count, true);
|
||||||
if (result == MOVE_RESULT_MOVED) {
|
if (result == MOVE_RESULT_MOVED) {
|
||||||
if (target != NULL) {
|
player_on_move(&gs->player);
|
||||||
player_on_move(&gs->player);
|
action = 1;
|
||||||
action = 1;
|
|
||||||
}
|
|
||||||
} else if (result == MOVE_RESULT_BLOCKED_ENEMY) {
|
} else if (result == MOVE_RESULT_BLOCKED_ENEMY) {
|
||||||
target = player_find_enemy_at(gs->enemies, gs->enemy_count, new_x, new_y);
|
target = player_find_enemy_at(gs->enemies, gs->enemy_count, new_x, new_y);
|
||||||
player_attack(&gs->player, target);
|
player_attack(&gs->player, target);
|
||||||
|
|
|
||||||
16
src/player.c
16
src/player.c
|
|
@ -2,6 +2,7 @@
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "items.h"
|
#include "items.h"
|
||||||
|
#include "movement.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
@ -46,6 +47,21 @@ Enemy *player_find_enemy_at(Enemy *enemies, int count, int x, int y) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int player_move(Player *p, Vec2 direction, Map *map, Enemy *enemies, int enemy_count) {
|
||||||
|
MoveResult result = try_move_entity(&p->position, direction, map, p, enemies, enemy_count, true);
|
||||||
|
if (result != MOVE_RESULT_MOVED)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
p->step_count += 1;
|
||||||
|
if (p->step_count % REGEN_STEP_INTERVAL == 0 && p->hp < p->max_hp &&
|
||||||
|
!combat_has_effect(p->effects, p->effect_count, EFFECT_POISON) &&
|
||||||
|
!combat_has_effect(p->effects, p->effect_count, EFFECT_BLEED) &&
|
||||||
|
!combat_has_effect(p->effects, p->effect_count, EFFECT_BURN)) {
|
||||||
|
p->hp += 1;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void player_on_move(Player *p) {
|
void player_on_move(Player *p) {
|
||||||
p->step_count += 1;
|
p->step_count += 1;
|
||||||
if (p->step_count % REGEN_STEP_INTERVAL == 0 && p->hp < p->max_hp &&
|
if (p->step_count % REGEN_STEP_INTERVAL == 0 && p->hp < p->max_hp &&
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
// Initialize player at position
|
// Initialize player at position
|
||||||
void player_init(Player *p, int x, int y);
|
void player_init(Player *p, int x, int y);
|
||||||
|
|
||||||
// Apply status effects, healing, etc
|
// Apply status effect, healing ect
|
||||||
void player_on_move(Player *p);
|
void player_on_move(Player *p);
|
||||||
|
|
||||||
// Find a living enemy at tile (x, y); returns NULL if none
|
// Find a living enemy at tile (x, y); returns NULL if none
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue