배경
배치된 슬롯에서 산업을 갈아 끼울 수단이 없다.
작업슬롯 설정 화면의 3단계(Character Setting Panel)에는 산업 버튼 5개가 늘 보인다.
배치된 슬롯에서 다른 산업을 누르면 버튼 색만 바뀌고 아무 일도 일어나지 않는다 —
WorkStationSelectPresenter.SelectIndustry가 요청을 보내지 않기 때문이다.
지금 산업을 바꾸려면 해제하고 캐릭터를 다시 고르는 길밖에 없다.
이건 새로 발견된 것이 아니라 적어 두고 일감으로 만들지 않은 것이다.
WorkStationSelectPresenter의 클래스 주석이 "일감 작업슬롯 선택 패널"을 가리키는데
그 일감이 tasks/에 존재한 적이 없다. 이번에 이 번호로 세운다.
전제가 하나 더 깨져 있다
Open이 _selectedIndustry를 슬롯의 실제 산업으로 맞추지 않는다.
화면이 들고 있는 값은 "직전에 누른 버튼"이라, 슬롯 목록으로 나갔다 다른 슬롯을 열면
불이 켜진 버튼과 실제로 배치된 산업이 어긋난다.
교체 UI는 "지금 켜진 버튼 = 지금 돌고 있는 산업"을 전제로 하므로, 동기화가 먼저다. 안 그러면 교체 기능이 엉뚱한 산업에서 출발한다.
✅ 서버는 이미 준비돼 있다 — 요청은 한 방이면 된다
User.AssignWorkStation(Server/WSGameServer/User/User.WorkStation.cs:149)은
이미 배치된 슬롯을 그대로 덮어쓴다 — 정산(SettleWorkStation) → slot.Assign →
속도 재계산(ApplyWorkSpeed) 순으로 갈아 끼운다.
⚠️ 해제 → 배치 2연발로 보내지 않는다. 정산이 두 번 돌고, 그 사이 빈 슬롯 상태가 클라에 한 번 반영된다(칸이 깜빡인다).
C_WorkStationAssignRequest한 번이면 교체가 끝난다.
그래서 이 일감에 서버 작업은 없다. 필요해지면 그때 요청한다.
할 일
전 항목이 메인 시스템이다 — 연출·리소스(🎨)가 하나도 없다. 선행도 없어서 클라가 지금 진행할 수 있는 몇 안 되는 일감이다.
- [x] 세팅 단계 진입 시
_selectedIndustry를 슬롯의 실제 산업으로 동기화 →SyncSelectedIndustryToSlot을Refresh의 세팅 분기에서 부른다. 진입 시 한 번이 아니라 그릴 때마다 맞추는 자리로 잡았다 — 그래야 슬롯이 바뀌어도 저절로 따라온다 - [x] 세팅 단계에서 산업 버튼을 누르면 배치 요청 한 번으로 교체 (
RequestIndustryChange) — 캐릭터는 지금 배치된 그대로, 산업만 바꿔 보낸다 - [x] 같은 산업을 다시 누르면 보내지 않는다 — 정산만 한 번 더 도는 무의미한 왕복이다
- [x] 1단계(캐릭터 목록)에서는 지금 동작을 유지한다 —
SelectIndustry가 단계로 갈라지고, 두 단계가 같은 버튼을 다르게 쓰는 이유를 그 자리 주석에 남겼다 - [x] 교체 실패 응답 처리 — 물러나지 않기로 정했다. 배치 실패는 대개 열리지 않은 슬롯이라
그 칸에 남을 이유가 없지만, 교체 실패는 이미 열린 칸에서 난다(적성 0 등).
알림만 띄우고 세팅에 남는다 →
OnAssignCompleted의Replace분기 - [x] ✅ 에디터 실측 통과 (2026-09-10) — 컴파일 에러·경고 0, 유니티에서 동작 확인
완료 조건
배치된 슬롯의 설정 화면에서 다른 산업 버튼을 한 번 누르면 그 산업으로 바뀌고, 슬롯 목록·위젯 스트립에 바뀐 산업이 반영된다. 화면에 빈 슬롯이 스치는 순간이 없다.
막고 있는 것 / 선행 일감
- 없음. 서버 지원은 확인됐고(
AssignWorkStation덮어쓰기), 패킷도 이미 있다
남은 것 (이 일감에 넣지 않는다)
- 적성 0 산업 사전 차단 — 지금은 눌러 보고 서버 거절(
NoAptitude)로 안다. 클라는 배치된 캐릭터의 적성을 이미 알고 있어(CharacterInfo.Aptitudes) 막을 수 있지만, T-006의 "남은 것"에 같은 항목이 이미 있다. 두 곳에서 따로 만들지 않도록, 착수할 때 한쪽으로 합친다 → T-046이 이 자리를 이어받았다 (적성 필터가 곧 사전 차단이다) - 산업 레벨 칸 — 교체 시 레벨도 함께 고르는 화면은
T-016·T-021이 정해진 뒤다. 지금은 전원 Lv1이라IndustryLevel을 안 채워 보내도 서버가 기본 레벨로 돌린다
관련 커밋
533cce6— 코드 전부. 문서·일감 갱신은 뒤 커밋에 있다
참고
Assets/Scripts_Client/UI/Main/WorkStationSelectPresenter/WorkStationSelectPresenter.cs—SelectIndustry·Open·OnRowAssignClicked·OnAssignCompletedAssets/Scripts_Client/UI/Main/Main 규칙.md— "전환 층은 하나다"(세 단계 흐름)Assets/Scripts_Client/UI/UI 배치 현황.md3장 — 작업슬롯 화면 흐름