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 ); }
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 ); }
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)))); }
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; }