Test(Player, look_empty) { player_t *pl = player_create_at((vector2d_t){9, 9}); game_t *gm = game_create(20, 20, 7, 5); cr_assert(pl); cr_assert(gm); game_add_team(gm, "pandas"); pl->p_teamname = strdup("pandas"); cr_assert_neq(game_register_player(gm, pl), -1); dynbuf_t *buf = player_look(pl, gm); cr_assert(buf); cr_log_info(buf->b_data); cr_assert(strstr(buf->b_data, "player")); cr_assert_eq(count_char(buf->b_data, ','), 3); pl->p_lvl = 2; dynbuf_delete(buf); buf = player_look(pl, gm); cr_log_info(buf->b_data); cr_assert(strstr(buf->b_data, "player")); cr_assert_eq(count_char(buf->b_data, ','), 8); dynbuf_delete(buf); pl->p_lvl = 3; buf = player_look(pl, gm); cr_log_info(buf->b_data); cr_assert(strstr(buf->b_data, "player")); cr_assert_eq(count_char(buf->b_data, ','), 15); dynbuf_delete(buf); game_delete(gm); }
Test(Player, look_up) { player_t *pl = player_create_at((vector2d_t){9, 9}); game_t *gm = game_create(20, 20, 7, 5); cr_assert(pl); cr_assert(gm); game_add_team(gm, "pandas"); pl->p_teamname = strdup("pandas"); cr_assert_neq(game_register_player(gm, pl), -1); pl->p_dir = (vector2d_t){0, -1}; board_put_resource(gm->ga_board, (vector2d_t){9, 9}, SIBUR); board_put_resource(gm->ga_board, (vector2d_t){8, 8}, THYSTAME); board_put_resource(gm->ga_board, (vector2d_t){9, 8}, LINEMATE); board_put_resource(gm->ga_board, (vector2d_t){10, 8}, DERAUMERE); board_inc_food(gm->ga_board, (vector2d_t){10, 8}); board_inc_food(gm->ga_board, (vector2d_t){10, 8}); dynbuf_t *buf = player_look(pl, gm); cr_assert(buf); cr_log_info(buf->b_data); cr_assert(strstr(buf->b_data, "player")); cr_assert_eq(count_char(buf->b_data, ','), 3); cr_assert_str_eq(buf->b_data, "[sibur player,thystame,linemate,food food deraumere]"); dynbuf_delete(buf); game_delete(gm); }
void flight_move(struct player *p, float dt) { struct inputstate *in = &game.input; player_look(dt); float speed = pv.flyspeed; vec3_t movedir = {0, 0, 0}; if (in->move_left) movedir.x -= 1.f; if (in->move_right) movedir.x += 1.f; if (in->move_forward) movedir.z -= 1.f; if (in->move_backward) movedir.z += 1.f; if (in->move_jump) movedir.y += 1.f; if (in->move_crouch) movedir.y -= 1.f; //if (in->move_sprint) speed += pv.sprintspeed; if (movedir.x != 0 || movedir.y != 0 || movedir.z != 0) { // normalize move dir? but strafing feels good! mat44_t m; m_setidentity(&m); m_rotate(&m, game.camera.yaw, 0, 1.f, 0); vec3_t movevec = m_vec3scale(m_matmulvec3(&m, &movedir), speed*dt); p->vel = m_vec3add(p->vel, movevec); } player_dumb_collide(); // drag p->vel = m_vec3scale(p->vel, 1.f - pv.flyfriction); p->pos.x += p->vel.x * dt; p->pos.y += p->vel.y * dt; p->pos.z += p->vel.z * dt; }
int main(int argc, char *argv[]) { int k; struct coord c; unsigned int i; unsigned char turn_taken = 1, running = 0; seed_rng(); display_init(); if(player_init() == -1) return 0; level_init(&levels[0], 8); player_set_level(&levels[0]); while(1) { main_clear(); player_see(); player_status(); turn_taken = 0; if(!running) k = display_getch(); msg_clear(); switch(k) { case '8': case '9': case '6': case '3': case '2': case '1': case '4': case '7': case KEY_UP: case KEY_DOWN: case KEY_LEFT: case KEY_RIGHT: c = key_to_direction(k); if(!player_move(c.x, c.y)) running = 0; turn_taken = 1; break; case 'c': c = key_to_direction(ask_key("In which direction?")); msg_clear(); player_close(c.x, c.y); turn_taken = 1; break; case 'o': c = key_to_direction(ask_key("In which direction?")); msg_clear(); player_open(c.x, c.y); turn_taken = 1; break; case 'k': c = key_to_direction(ask_key("In which direction?")); msg_clear(); player_kick(c.x, c.y); turn_taken = 1; break; case 'g': case 'G': k = ask_key("In which direction?"); c = key_to_direction(k); if((c.x || c.y) && player_move(c.x, c.y)) running = 1; turn_taken = 1; break; case ':': player_look(); break; case ';': msg_printf("Pick an object..."); c = player_select_square(); msg_clear(); player_remote_look(c.x, c.y); break; case '.': turn_taken = 1; break; } if(turn_taken) { if(player_poll()) running = 0; for(i = 0; i < levels[0].nmonst; i++) if(monster_poll(levels[0].monsters[i])) running = 0; } } return 0; }