이모트.한선 — 감정표현/손잡기 정본
개요
스카이(구름을 향해) 스타일의 무언 감정소통(이모트·손잡기)을 위한 한선씨 정본. 게임슬라이스 프레즌스 패킷에
emote/
hold 필드를 얹는 스펙과, 카탈로그 데이터(json)를 생성하는 파일.
무엇을 했는지
- 이모트 카탈로그 12종 —
{id, key, label(한국어), anim(애니키), frames(지속프레임)}. 장면3D.한선과 동일한 시작()/항목()/끝() 파일쓰기 패턴으로 data/이모트.json에 생성.
- 인사(wave,60) 앉기(sit,-1=취소까지 루프) 박수(clap,90) 춤(dance,150) 웃음(laugh,80) 명상(meditate,-1) 환호(cheer,70) 절(bow,60) 생각(think,90) 하트(heart,60) 눈물(cry,80) 놀람(surprise,50)
- 프레즌스 state 확장 스펙 (파일 상단 주석 + 함수로 명시) — 기존 위치(x,z)/채팅(chat) 패킷에:
-
emote: 현재 표출 중인 이모트 id, 0=없음
-
hold: 손잡기 대상 peerId, 0=없음
- 판정 함수 2종:
-
이모트유효(id) — 1~12 범위검증, 참=1/거짓=-1
-
손잡기가능(내x,내z,상대x,상대z,반경) — 제곱거리 비교(루트 회피), 참=1/거짓=-1
컴파일/실행 검증
cd /Users/ef/CrownyOS/os-site/게임슬라이스
CROWNY_STRICT=1 /Users/ef/CrownyOS/crownyc/hanseonc_high 이모트.한선 > .../이모트.toau 2> .../이모트.err
exit=0, toau 61,544B, STRICT 경고 0건(정보로그 3줄만)
crownyc run 실행 결과:
[이모트] 카탈로그 → 이모트.json (12종)
이모트유효(1)=1 / (12)=1 / (13)=-1 / (0)=-1 — 경계 정확
손잡기가능(0,0,1,1,3)=1 / (0,0,10,10,3)=-1 — 근접/원거리 정확
data/이모트.json valid JSON(python -m json.tool 검증)village.js 연동 방법 (런북, 미배선 — 신규파일만 생성 지시에 따라 라이브 파일 미접촉)
- 송신측
send(): 로컬 상태 객체에 기존 {x, z, chat}와 같은 프레임으로 emote(현재이모트id, 기본0), hold(잡은대상 peerId, 기본0) 추가해 브로드캐스트.
js const state = { x, z, chat, emote: currentEmoteId || 0, hold: heldPeerId || 0 }
수신측 peer state 렌더:
peer.emote != 0 → data/이모트.json에서 해당 id의 anim/frames를 찾아 그 시간 동안 애니메이션 재생(frames=-1은 명시적 취소 전까지 루프).
peer.hold != 0 이고 상호(그 대상의 hold도 나를 가리킴)일 때만 두 아바타 사이 손 연결선을 그린다. 일방 hold는 "요청 중" 표시만(수락 UX는 클라이언트 정책).
근접/유효성은 클라·서버 양쪽에서 이모트유효()/손잡기가능()과 동일 규칙(제곱거리)으로 재검증 가능하도록 로직을 그대로 포팅해 쓴다(현재는 한선씨 정본 — JS 포팅 시 이 파일을 원본으로 대응 함수 작성).관련 파일
- 정본:
/Users/ef/CrownyOS/os-site/게임슬라이스/이모트.한선
- 산출 데이터:
/Users/ef/CrownyOS/os-site/게임슬라이스/data/이모트.json
- 참조 패턴(파일쓰기 관용구 원본):
/Users/ef/CrownyOS/스튜디오/장면3D.한선
- 학습 등록:
crownycode-learn.sh add "이모트_감정표현_손잡기_프레즌스확장" (별칭: 이모트)
잔여 이슈
- village.js 실배선(emote/hold 필드 송수신 + 렌더)은 아직 미적용 — 라이브 서비스 파일 무접촉 지시에 따라 이 문서를 런북으로 남김. 다음 세션이 village.js에 위 스펙대로 적용.
- 손잡기 "수락" UX(상대가 명시적으로 승인 클릭할지, 근접만으로 자동 성사할지)는 정책 미확정 — 현재 함수는 근접 판정만 제공, 상호 hold 매칭은 클라이언트/서버 로직에서 조합.
- 이모트 발동 트리거(UI 버튼/단축키)는 스코프 밖 — 카탈로그 데이터만 정본화.