eobish
annotate src/player.c @ 8:c0e8bbf96849
merged
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 19 Jan 2015 15:49:36 +0200 |
parents | |
children |
rev | line source |
---|---|
nuclear@4 | 1 #include <stdio.h> |
nuclear@4 | 2 #include "player.h" |
nuclear@4 | 3 #include "level.h" |
nuclear@4 | 4 |
nuclear@4 | 5 static char *dirnames[] = { |
nuclear@4 | 6 "north", "east", "south", "west" |
nuclear@4 | 7 }; |
nuclear@4 | 8 |
nuclear@4 | 9 void player_init(struct player *p, struct level *lvl) |
nuclear@4 | 10 { |
nuclear@4 | 11 p->x = lvl->start_pos[0]; |
nuclear@4 | 12 p->y = lvl->start_pos[1]; |
nuclear@4 | 13 p->lvl = lvl; |
nuclear@4 | 14 p->dir = DIR_NORTH; |
nuclear@4 | 15 } |
nuclear@4 | 16 |
nuclear@4 | 17 int player_move(struct player *p, int dfwd, int dside) |
nuclear@4 | 18 { |
nuclear@4 | 19 int nx, ny; |
nuclear@4 | 20 int dx, dy; |
nuclear@4 | 21 |
nuclear@4 | 22 player_dir_vec(p, &dx, &dy); |
nuclear@4 | 23 nx = p->x + dx * dfwd - dy * dside; |
nuclear@4 | 24 ny = p->y + dy * dfwd + dx * dside; |
nuclear@4 | 25 |
nuclear@4 | 26 if(level_cell(p->lvl, nx, ny) == '#') { |
nuclear@4 | 27 return -1; |
nuclear@4 | 28 } |
nuclear@4 | 29 p->x = nx; |
nuclear@4 | 30 p->y = ny; |
nuclear@4 | 31 return 0; |
nuclear@4 | 32 } |
nuclear@4 | 33 |
nuclear@4 | 34 void player_turn(struct player *p, int angle) |
nuclear@4 | 35 { |
nuclear@4 | 36 int dir = (p->dir + angle) % 4; |
nuclear@4 | 37 if(dir < 0) dir += 4; |
nuclear@4 | 38 |
nuclear@4 | 39 printf("turn(%d): %s -> %s\n", angle, dirnames[p->dir], dirnames[dir]); |
nuclear@4 | 40 p->dir = dir; |
nuclear@4 | 41 } |
nuclear@4 | 42 |
nuclear@4 | 43 void player_dir_vec(struct player *p, int *dx, int *dy) |
nuclear@4 | 44 { |
nuclear@4 | 45 *dx = p->dir == DIR_EAST ? 1 : (p->dir == DIR_WEST ? -1 : 0); |
nuclear@4 | 46 *dy = p->dir == DIR_NORTH ? -1 : (p->dir == DIR_SOUTH ? 1 : 0); |
nuclear@4 | 47 } |