mirror of
https://github.com/zoriya/Bomberman.git
synced 2026-05-30 01:05:24 +00:00
fix berserk camera
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user