"제출된 명령은 엔진이 확인하기 전엔 보이는 상태 변화가 아냐."
속도처럼 느껴지는 작은 거짓말
정지 버튼을 제일 빠르게-느껴지게 만드는 방법은, 사용자가 클릭하는 순간 UI 를 뒤집는 거야. isPaused = true 로 놓고, 그다음 엔진한테 정지하라고 하는 거지. 즉각적으로 느껴져. 진짜로 즉각이니까. UI 가 아무것도 안 기다렸거든. 근데 방금 작은 거짓말을 했어. 엔진은 아직 정지 안 했어. 보통은 몇 밀리초 뒤에 하고, 아무도 못 알아채. 근데 가끔은 안 해. 느린 프레임, 에러, race 때문에. 그럼 이제 버튼은 이 말을 하는데 영상은 저 짓을 하고 있어.
그걸 정지, seek, 트랙 선택, 속도, 전체화면에 걸쳐 곱해봐. 컨트롤이 일어난 것의 보고가 아니라 네가 요청한 것에 대한 이야기인 플레이어가 돼. 그 틈이 바로 사람 미치게 하는 버그가 사는 데야.
명령은 요청, 현실은 보고
고침은 코드이기 전에 사고방식이야. 네가 보내는 명령은 요청이고, 엔진의 관찰된 상태가 유일한 보고야. 보고 채널은 Track 2 에서 이미 깔았어. 관찰되는 속성. 이제 진짜로 쓰는 거야. 요청을 보내고, 엔진 값이 실제로 바뀔 때 관찰되는 속성이 UI 를 업데이트하게 둬. UI 는 예측을 멈추고 반영을 시작하고.
같은 기능을 거짓말로, 그리고 진실로 보면.
Pending 은 정직한 상태야
요청이랑 보고 사이엔 진짜, 이름 붙일 수 있는 순간이 있어. pending. Ashen Reel 은 그걸 보여주는 데 거리낌이 없어. 동작이 진행 중이라는 짧은 힌트지. pending 은 정직하고, 거짓 '완료' 는 안 정직하니까. 중간 상태에 이름을 붙이는 게 UI 가 진실을 끊김 없이 말하게 해줘. 요청됨, 그다음 pending, 그다음 엔진이 실제로 보고하는 뭐든. 어떤 단계도 나중 단계인 척 안 하고.