eobish

annotate src/player.c @ 4:ce0548d24918

mostly works
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 18 Jan 2015 13:30:30 +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 }