GALAXY 맵에서 고른 행성을 카메라가 따라가 화면 가운데에 유지

This commit is contained in:
Sn-Kinos
2026-10-05 14:17:44 +09:00
parent 8a0297eb92
commit 5ad229b971
2 changed files with 91 additions and 20 deletions
@@ -172,6 +172,27 @@ class _GalaxyScreenState extends State<GalaxyScreen>
_lastTick = now;
// 프레임을 오래 건너뛴 뒤(백그라운드 복귀 등) 한 번에 확 도는 것을 막는다.
_clock.advance(dt.clamp(0.0, 1 / 20));
_follow();
}
/// 고른 행성을 화면 가운데에 붙든다(프로토타입 `galaxyGroup.position = -myPos` 추적).
/// 중심 전환이 끝난 뒤에도 궤도는 공전·끌기 관성으로 계속 도므로, 한 번 옮기고 말면
/// 고른 행성이 화면 밖으로 흘러가고 장면이 밀린 채 남는다(10/5 실기기). 배율은 사용자
/// 핀치 값을 그대로 두고 평행 이동만 맞춘다.
void _follow() {
final p = _selected;
if (p == null || _viewport.isEmpty || _fly.isAnimating) return;
final at = GalaxyField.positionOf(p, _selectedIndex, _clock.spin, _outerRank);
final s = _view.value.getMaxScaleOnAxis();
final tx = _viewport.width / 2 - at.dx * s;
final ty = _viewport.height / 2 - at.dy * s;
final m = _view.value;
if ((m.storage[12] - tx).abs() < 0.01 && (m.storage[13] - ty).abs() < 0.01) {
return;
}
_view.value = m.clone()
..setEntry(0, 3, tx)
..setEntry(1, 3, ty);
}
/// 선택 행성을 화면 한가운데로 데려오는 변환.