시뮬레이션 컨텍스트
SimulationContext
는 단일 Quantum 시뮬레이션 인스턴스와 관련된 모든 정보를 포함하는 컨테이너입니다. 또한 시뮬레이션 상태 위에서 작동하거나 시뮬레이션에 바인딩 된 SimulationContextService
인스턴스 목록도 포함되어 있습니다. 그 목적은 동시에 실행되는 여러 시뮬레이션과 모든 종속성을 엄격히 분리하는 것입니다.
이 분리는 리플레이와 같은 기능을 구현하는 데 핵심적입니다.
씬 서비스에 대한 노트
모든 씬 서비스(예: SceneUI
그리고 SceneCamera
)들은 SimulationContext
스위칭을 위해 준비되었습니다. 이들은 단일 SimulationContext
인스턴스를 수락하고 해당 인스턴스와 동기화한 다음 모든 중요한 이벤트를 자식에게 전달합니다.
기본적으로 SimulationContext
는 모든 씬 서비스에 등록됩니다. 각 서비스는 자신에게 제공된 정보의 사용 및/또는 전달 여부를 스스로 결정합니다. SceneUI
는 시뮬레이션 컨텍스트 인스턴스를 자식 UIView
에 전달하지만 사용자 지정 SimulationContext
를 특정 뷰에 등록하여 재정의할 수 있습니다.
컨텍스트 스위칭 패턴 - 리플레이 예제
리플레이는 특정 시간 오프셋에 스냅샷에서 시뮬레이션을 시작하고 기록된 입력을 적용하는 동일한 데이터를 포함하는 SimulationContext
의 또 다른 인스턴스일 뿐입니다. 즉, 리플레이를 사용하는 게임은 다음과 같이 컨텍스트 전환 패턴을 적용합니다:
- 게임 시작 시 메인
SimulationContext
는 게임 시작 시 모든 씬 서비스에 등록됩니다. - 리플레이가 시작되면 새 리플레이
SimulationContext
가 생성되어 모든 씬 서비스에 등록됩니다. 주의: 메인SimulationContext
는 씬의 뒤에서 계속 살아있는 상태입니다. - 리플레이가 완료되면 메인
SimulationContext
가 씬 서비스로 다시 스왑 되고 리플레이SimulationContext
가 삭제됩니다.