GALAXY 맵에서 고른 행성을 카메라가 따라가 화면 가운데에 유지
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/// 선택 행성을 화면 한가운데로 데려오는 변환.
|
||||
|
||||
Reference in New Issue
Block a user