コード例 #1
0
ファイル: player.c プロジェクト: krig/roam
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;
}
コード例 #2
0
ファイル: ui.c プロジェクト: Nuos/crawler
void ui_debug_aabb(vec3_t center, vec3_t extent, uint32_t clr)
{
	vec3_t maxp = m_vec3add(center, extent);
	vec3_t minp = m_vec3sub(center, extent);
	vec3_t corners[8] = {
		{ minp.x, minp.y, minp.z },
		{ maxp.x, minp.y, minp.z },
		{ maxp.x, minp.y, maxp.z },
		{ minp.x, minp.y, maxp.z },

		{ minp.x, maxp.y, minp.z },
		{ maxp.x, maxp.y, minp.z },
		{ maxp.x, maxp.y, maxp.z },
		{ minp.x, maxp.y, maxp.z },
	};
	ui_debug_line(corners[0], corners[1], clr);
	ui_debug_line(corners[1], corners[2], clr);
	ui_debug_line(corners[2], corners[3], clr);
	ui_debug_line(corners[3], corners[0], clr);

	ui_debug_line(corners[4], corners[5], clr);
	ui_debug_line(corners[5], corners[6], clr);
	ui_debug_line(corners[6], corners[7], clr);
	ui_debug_line(corners[7], corners[4], clr);

	ui_debug_line(corners[0], corners[4], clr);
	ui_debug_line(corners[1], corners[5], clr);
	ui_debug_line(corners[2], corners[6], clr);
	ui_debug_line(corners[3], corners[7], clr);
}