fix berserk camera

This commit is contained in:
Askou
2021-06-20 10:27:08 +02:00
parent 13af8732bc
commit d18e125127
+16 -6
View File
@@ -49,8 +49,7 @@ namespace BBM
}
void CameraSystem::onUpdate(WAL::ViewEntity<CameraComponent, PositionComponent> &entity,
std::chrono::nanoseconds dtime)
{
std::chrono::nanoseconds dtime) {
if (Runner::gameState.currentScene != GameState::GameScene || !introAnimation(entity))
return;
auto &pos = entity.get<PositionComponent>();
@@ -60,14 +59,19 @@ namespace BBM
float maxDist = 0;
float lowerXDist = 0;
float lowerZDist = 0;
for (auto &[player, position, _] : this->_wal.getScene()->view<PositionComponent, TagComponent<Player>>()) {
playerPos.emplace_back(position.position);
}
if (pos.position.x > Runner::mapWidth || pos.position.z > Runner::mapHeight) {
pos.position.x = Runner::mapWidth / 2;
pos.position.y = (Runner::mapHeight / 2) - 1;
}
if (playerPos.size() == 1)
newCameraPos = playerPos[0];
for (size_t i = 0; i < playerPos.size(); i++)
for (size_t j = 0; j < playerPos.size(); j++) {
if (i == j)
continue;
if (maxDist < playerPos[i].distance(playerPos[j])) {
maxDist = playerPos[i].distance(playerPos[j]);
newCameraPos = (playerPos[i] + playerPos[j]) / 2;
@@ -78,19 +82,25 @@ namespace BBM
lowerZDist = std::abs((playerPos[i].z - playerPos[j].z));
}
maxDist += (lowerXDist + lowerZDist) / 2;
if (maxDist < 1)
return;
if (maxDist < 14)
maxDist = 14;
if (maxDist > 23)
maxDist = 23;
Vector3f pos2d(pos.position.abs().x,0, pos.position.abs().z);
Vector3f newPos2d(newCameraPos.abs().x, 0, pos.position.abs().z);
for (auto &[other, backPos, _] : this->_wal.getScene()->view<PositionComponent, TagComponent<Background>>()) {
backPos.position = cam.target;
}
newCameraPos.y = 0;
if (lowerXDist < 0.5)
newCameraPos.x = pos.position.x;
if (lowerZDist < 0.5)
newCameraPos.z = pos.position.z;
cam.target += (newCameraPos.abs() - cam.target.abs()) / 10;
cam.target = cam.target.abs();
newCameraPos.y = maxDist;
newCameraPos.z -= newCameraPos.z > 1 ? 1 : 0;
if (lowerZDist > 0.5 || cam.target.z >= pos.position.z)
newCameraPos.z = cam.target.z > 1 ? newCameraPos.z - 1 : 0;
pos.position += (newCameraPos.abs() - pos.position.abs()) / 10;
}
}