Skip to content

Latest commit

 

History

History
97 lines (65 loc) · 3.88 KB

File metadata and controls

97 lines (65 loc) · 3.88 KB

실시간 동행 / 운동 기록 분리 원칙

핵심 원칙

Runimal은 러닝 경험을 두 층으로 분리한다.

  1. 실시간 동행
  2. 러닝 종료 후 남는 운동 데이터 코어

둘은 연결되지만 같은 것이 아니다.

1. 실시간 동행

러닝을 시작할 때 선택한 동행은 함께 달리는 대상이다.

역할:

  • 워치 화면의 시각적 동행
  • 심박 / 케이던스 / 페이스 / 지형 / 야간 구간에 대한 반응
  • 라이브 피드백과 순간 이벤트의 감정적 주체
  • 유대, 공명, 시즌/변이 적합 보너스의 기준점

중요:

  • 실시간 동행은 러닝 중 반응을 만들지만, 러닝이 끝났다고 해서 결과 데이터가 자동으로 쓰이지는 않는다.

2. 운동 기록

러닝 종료 후 남는 운동 데이터는 운동 기록으로 저장된다.

구성:

  • 거리
  • 시간
  • 심박 / 케이던스 / 페이스
  • 고도
  • 환경 신호
  • 경로 / 지도 흔적
  • 월드 / 에피소드 반응

역할:

  • 인벤토리에 남는 성장 재료
  • 아무 동행에게나 먹일 수 있는 기록
  • 알 생성 / 알 인큐베이트 / 동행 성장에 공용 사용
  • 외부 HealthKit / FIT / 기타 가져온 운동 데이터와 같은 규칙으로 취급

중요:

  • 운동 기록은 자동 귀속되지 않는다.
  • 플레이어가 누구에게 먹일지 선택한다.

3. 왜 이렇게 나누는가

이 분리는 세 가지 이유 때문에 필요하다.

A. 실제 러닝 감정선 보존

데리고 나간 동행은 러닝 중 반응하는 존재여야 한다. 그래야 “함께 달린다”는 감각이 살아난다.

B. 성장 재료의 자유도 보존

러닝 후 남는 데이터는 특정 동행에 잠기면 안 된다. 그래야 플레이어가 전략적으로 다른 동행, 알, 변이 루트에 재료를 배분할 수 있다.

C. 외부 운동 데이터와 규칙 통일

외부에서 가져온 러닝 데이터도 같은 성장 재료로 써야 자연스럽다. 그래서 워치 실러닝 / HealthKit 가져오기 / FIT 가져오기가 모두 같은 운동 기록 규칙으로 모인다.

4. 시스템 규칙

  • 워치 선택 동행은 라이브 반응과 연출에만 직접 영향
  • 완료 러닝은 항상 미할당 운동 기록으로 저장
  • 미할당 운동 기록만 먹이 / 알 생성 / 인큐베이트에 사용 가능
  • 성장 반영은 항상 수동 선택 액션으로만 발생
  • 외부 운동 데이터도 동일하게 미할당 운동 기록으로 저장
  • 함께 달린 동행에게는 자동 성장 대신 잠재 성장치를 저장하고, 나중에 그 동행에게 먹일 때 일부가 보너스로 붙음

5. 현재 구현 기준

  • 워치 대표 선택은 함께 달릴 동행에 대한 실시간 컨텍스트를 보낸다.
  • 완료 러닝은 CompletedRunRecord로 저장된다.
  • 성장은 feedActiveCompanion(with:) 호출 시점에만 일어난다.
  • 알 생성은 forgeEgg(from:), 알 인큐베이트는 incubateMainEgg(with:) 호출 시점에만 일어난다.
  • 함께 달린 동행은 러닝 중 반응량에 따라 작은 잠재 성장치를 따로 쌓는다.
  • 현재 잠재 이벤트는 페이스 유지, 고케이던스, 오르막 반응, 야간 감응, 경로 안정, 현장 이벤트, 변이 공명, 월드 신호 계열로 명시한다.
  • 즉 현재 구조는 자동 귀속이 아니라 수동 배분형 운동 기록 + 저장형 잠재 성장치에 가깝다.

6. UX 문구 원칙

  • “대표 선택”은 누구를 기본 대상으로 둘지 고르는 화면에서만 사용
  • “함께 달린 동행”은 라이브 반응 문맥에서만 사용
  • “지금 선택한 동행 / 지금 선택한 알”은 운동 기록을 실제로 나눠 쓰는 문맥에서 사용
  • “운동 기록”은 저장 / 성장 반영 / 새 알 만들기 / 부화 준비 문맥에서 사용
  • “자동 성장”, “자동 흡수” 같은 표현은 사용하지 않음