MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / updateCamera

Method updateCamera

source/client/StarClientApplication.cpp:1236–1313  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1234}
1235
1236void ClientApplication::updateCamera(float dt) {
1237 if (!m_universeClient->worldClient())
1238 return;
1239
1240 WorldCamera& camera = m_worldPainter->camera();
1241 camera.update(dt);
1242
1243 if (m_mainInterface->fixedCamera())
1244 return;
1245
1246 auto assets = m_root->assets();
1247
1248 const float triggerRadius = 100.0f;
1249 const float deadzone = 0.1f;
1250 const float panFactor = 1.5f;
1251 float cameraSpeedFactor = 30.0f / m_root->configuration()->get("cameraSpeedFactor").toFloat();
1252 cameraSpeedFactor /= (dt * 60.f);
1253
1254 auto playerCameraPosition = m_player->cameraPosition();
1255
1256 if (isActionTaken(InterfaceAction::CameraShift)) {
1257 m_snapBackCameraOffset = false;
1258 m_cameraOffsetDownTime += dt;
1259 Vec2F aim = m_universeClient->worldClient()->geometry().diff(m_mainInterface->cursorWorldPosition(), playerCameraPosition);
1260
1261 float magnitude = aim.magnitude() / (triggerRadius / camera.pixelRatio());
1262 if (magnitude > deadzone) {
1263 float cameraXOffset = aim.x() / magnitude;
1264 float cameraYOffset = aim.y() / magnitude;
1265 magnitude = (magnitude - deadzone) / (1.0 - deadzone);
1266 if (magnitude > 1)
1267 magnitude = 1;
1268 cameraXOffset *= magnitude * 0.5f * camera.pixelRatio() * panFactor;
1269 cameraYOffset *= magnitude * 0.5f * camera.pixelRatio() * panFactor;
1270 m_cameraXOffset = (m_cameraXOffset * (cameraSpeedFactor - 1.0) + cameraXOffset) / cameraSpeedFactor;
1271 m_cameraYOffset = (m_cameraYOffset * (cameraSpeedFactor - 1.0) + cameraYOffset) / cameraSpeedFactor;
1272 }
1273 } else {
1274 if (m_cameraOffsetDownTime > 0.0f && m_cameraOffsetDownTime < 0.333333f)
1275 m_snapBackCameraOffset = true;
1276 if (m_snapBackCameraOffset) {
1277 m_cameraXOffset = (m_cameraXOffset * (cameraSpeedFactor - 1.0)) / cameraSpeedFactor;
1278 m_cameraYOffset = (m_cameraYOffset * (cameraSpeedFactor - 1.0)) / cameraSpeedFactor;
1279 }
1280 m_cameraOffsetDownTime = 0.f;
1281 }
1282 Vec2F newCameraPosition;
1283
1284 newCameraPosition.setX(playerCameraPosition.x());
1285 newCameraPosition.setY(playerCameraPosition.y());
1286
1287 auto baseCamera = newCameraPosition;
1288
1289 const float cameraSmoothRadius = assets->json("/interface.config:cameraSmoothRadius").toFloat();
1290 const float cameraSmoothFactor = assets->json("/interface.config:cameraSmoothFactor").toFloat();
1291
1292 auto cameraSmoothDistance = m_universeClient->worldClient()->geometry().diff(m_cameraPositionSmoother, newCameraPosition).magnitude();
1293 if (cameraSmoothDistance > cameraSmoothRadius) {

Callers

nothing calls this directly

Calls 15

worldClientMethod · 0.80
assetsMethod · 0.80
toFloatMethod · 0.80
configurationMethod · 0.80
cameraPositionMethod · 0.80
cursorWorldPositionMethod · 0.80
pixelRatioMethod · 0.80
xMethod · 0.80
yMethod · 0.80
setXMethod · 0.80
setYMethod · 0.80
jsonMethod · 0.80

Tested by

no test coverage detected