Esempio n. 1
0
void gkJoystickController::moveCamera(void)
{
	gkGamePlayer::Data& data = m_player->getData();

	gkScalar crAxUD = (m_camRot.m_normal.x * gkPih) * gkAppData::gkFixedTickDelta2;
	gkScalar crAxLR = (m_camRot.m_normal.y * gkPih) * gkAppData::gkFixedTickDelta2;


	data.m_xRot->pitch(gkRadian(crAxUD));

	if (m_camRot.isDeadUD())
	{
		// Auto rebound pitch.
		gkScalar cPitch = data.m_xRot->getRotation().x.valueRadians();

		cPitch = -gkAppData::gkJoyReboundFac * cPitch;
		data.m_xRot->pitch(gkDegree(cPitch));
	}

	if (!m_camRot.isDeadLR())
		data.m_zRot->roll(gkRadian(crAxLR));

	data.m_zRot->translate(
	    (data.m_physics->getPosition() - (data.m_zRot->getPosition() +
	                                      gkVector3(0, 0, -gkAppData::gkPlayerHeadZ))
	    ) * gkAppData::gkCameraTol
	);
}
Esempio n. 2
0
void gkDefaultController::moveCamera(void)
{
	gkGamePlayer::Data& data = m_player->getData();


	if (m_mouse->mouseMoved())
	{
		const gkScalar tick = gkAppData::gkFixedTickDelta * .25f;

		if (m_mouse->relative.x!= 0.f)
			data.m_zRot->roll(-gkRadian(m_mouse->relative.x * tick));
		if (m_mouse->relative.y!= 0.f)
			data.m_xRot->pitch(-gkRadian(m_mouse->relative.y * tick));
	}
	else
	{
		// Auto rebound pitch.
		gkScalar cPitch = data.m_xRot->getRotation().x.valueRadians();

		cPitch = -gkAppData::gkJoyReboundFac * cPitch;
		data.m_xRot->pitch(gkDegree(cPitch));

	}

	data.m_zRot->translate(
	    (data.m_physics->getPosition() - (data.m_zRot->getPosition() +
	                                      gkVector3(0, 0, -gkAppData::gkPlayerHeadZ))
	    ) * gkAppData::gkCameraTol
	);

}
Esempio n. 3
0
void gkBlenderSceneConverter::convertObjectLamp(gkGameObject* gobj, Blender::Object* bobj)
{
	GK_ASSERT(gobj->getType() == GK_LIGHT && bobj->data);

	gkLight* obj = static_cast<gkLight*>(gobj);

	gkLightProperties& props = obj->getLightProperties();
	Blender::Lamp* la = static_cast<Blender::Lamp*>(bobj->data);

	props.m_diffuse = gkColor(la->r, la->g, la->b);
	if (la->mode & LA_NO_DIFF)
		props.m_diffuse = gkColor::Black;

	props.m_specular = gkColor(la->r, la->g, la->b);
	if (la->mode & LA_NO_SPEC)
		props.m_specular = gkColor::Black;

	props.m_power = la->energy;
	if (la->mode & LA_NEG)
		props.m_power = -props.m_power;

	props.m_linear    = la->att1 / la->dist;
	props.m_constant  = 1.f;
	props.m_quadratic = la->att2 / (la->dist * la->dist);


	props.m_type = gkLightProperties::LI_POINT;
	if (la->type != LA_LOCAL)
		props.m_type = la->type == LA_SPOT ? gkLightProperties::LI_SPOT : gkLightProperties::LI_DIR;

	
	props.m_spot.y  = la->spotsize > 128 ? 128 : la->spotsize;
	props.m_spot.x  = gkMax(gkRadian(la->spotblend).valueDegrees(), props.m_spot.y);
	props.m_falloff = 128.f * la->spotblend;

	props.m_casts = (la->type != LA_HEMI && 
		((la->mode & LA_SHAD_RAY) ||
		 (la->type == LA_SPOT && (la->mode & LA_SHAD_BUF))));		
}
Esempio n. 4
0
bool VariableOpNode::evaluate(gkScalar tick)
{
	if (!m_prop || !GET_SOCKET_VALUE(SET))
		return false;

	gkScalar a = m_prop->getValueReal();
	gkScalar b = GET_SOCKET_VALUE(VALUE).getValueReal();
	gkScalar d = 0.0;

	switch (m_function)
	{
	case MTH_NO_FUNC:
		d = 0.0;
		break;
	case MTH_ADD:
		d = a + b;
		break;
	case MTH_SUBTRACT:
		d = a - b;
		break;
	case MTH_MULTIPLY:
		d = a * b;
		break;
	case MTH_DIVIDE:
		d = (b == 0.0) ? 0.0 : a / b;
		break;
	case MTH_SINE:
		{
			d = gkMath::Sin(gkRadian(a));
			if (m_deg) d = d * gkMath::fRad2Deg;
		}
		break;
	case MTH_COSINE:
		{
			d = gkMath::Cos(gkRadian(a));
			if (m_deg) d = d * gkMath::fRad2Deg;
		}
		break;
	case MTH_TANGENT:
		{
			d = gkMath::Tan(gkRadian(a));
			if (m_deg) d = d * gkMath::fRad2Deg;
		}
		break;
	case MTH_ARCSINE:
		{
			if (a <= 1 && a >= -1)
				d = gkMath::ASin(a).valueRadians();
			else
				d = 0.0;

			if (m_deg) d = d * gkMath::fRad2Deg;

		}
		break;
	case MTH_ARCCOSINE:
		{
			a = gkRadian(a).valueRadians();
			b = gkRadian(b).valueRadians();
			if (a <= 1 && a >= -1)
				d = gkMath::ACos(a).valueRadians();
			else
				d = 0.0;

			if (m_deg) d = d * gkMath::fRad2Deg;
		}
		break;
	case MTH_ARCTANGENT:
		{
			a = gkRadian(a).valueRadians();
			d = gkMath::ATan(a).valueRadians();

			if (m_deg) d = d * gkMath::fRad2Deg;
		}
		break;
	case MTH_POWER:
		d = a > 0 ? gkMath::Pow(a, b) : 0.0;
		break;
	case MTH_LOGARITHM:
		{
			if (a > 0 && b > 0)
				d = gkMath::Log(a) / gkMath::Log(b);
			else d = 0.0;
		}
		break;
	case MTH_MINIMUM:
		{
			d = (a < b) ? a : b;
		}
		break;
	case MTH_MAXIMUM:
		{
			d = (a > b) ? a : b;
		}
		break;
	case MTH_ROUND:
		{
			gkScalar base = gkMath::Floor(a);
			gkScalar dec = base - a;
			d = dec > 0.5 ? base + 1 : base;
		}
		break;
	case MTH_LESS_THAN:
		{
			d = (a < b) ? 1.0 : 0.0;
		}
		break;
	case MTH_GREATER_THAN:
		{
			d = (a > b) ? 1.0 : 0.0;
		}
		break;
	case MTH_SQRT:
		{
			d = gkMath::Sqrt(a);
		}
		break;
	case MTH_SQR:
		{
			d = a * a;
		}
		break;
	default:
		break;
	}

	if (gkFuzzy(d))     d = 0.0;
	if (gkNan(d))       d = 0.0;
	if (!gkFinite(d))   d = 0.0;
	m_prop->setValue(d);
	SET_SOCKET_VALUE(RESULT, *m_prop);
	return false;
}