Skip to main content

개요

CharacterModules/CharacterInfo/Wrapper

책임

  • CharacterInfo 폴더가 규칙을 따르는지 검증한다.
  • 컴포넌트별 래퍼를 생성하고 수명 주기를 추적해 중복 생성, 누수, 스트리밍 지연을 방지한다.
  • 컴포넌트 이름 기반 조회 API를 제공해 호출자가 폴더 구조를 직접 순회하지 않도록 캡슐화한다.
  • 스트리밍 지연으로 하위 폴더가 늦게 도착하는 경우에도 지연 등록/콜백을 통해 일관된 접근을 제공한다.

Constructors

fromFolder

(characterInfoFolder: Folder) -> (CharacterInfoWrapper) CharacterInfo 폴더를 직접 전달받아 래퍼를 생성한다. 폴더 명이 CharacterInfo 가 아니거나 Folder 가 아닌 경우 에러를 발생시킨다. 기존 하위 폴더를 즉시 스캔해 컴포넌트를 등록한다.

fromCharacterModel

(characterModel: Model) -> (CharacterInfoWrapper) Model 인스턴스에서 CharacterInfo 하위 폴더를 찾은 뒤 래핑한다. 폴더가 없거나 모델이 CollectionService 의 Character 태그를 갖지 않으면 에러르 반환한다.

Properties

Instance

Instance 래핑 중인 CharacterInfo 폴더. 외부에서 직접 수정하지 않고 조회 전용으로 사용한다. 직접 Attribute 를 :SetAttribute 로 조정하면, 잘못된 Attribute 값을 넣을 경우 검증이나 디버깅이 어렵기 때문. 또한 GetAttribute 의 경우 테이블이나 저장하지 못하는 값이 있기 때문에 직렬화->저장->역직렬화 순서를 거쳐야할 수 있기에, 내부 메소드인 :SetProperty:GetProperty를 사용해야한다.

CharacterModel

Model? CharacterInfo 를 소유한 캐릭터 모델. 아직 캐릭터 모델에 들어가지 않았거나, fromFolder 로만 생성된 경우 nil 일 수 있다.

Maid

Maid 컴포넌트 파괴, 이벤트 연결 해제를 담당하는 정리자. Destroy 호출 시 전부 정리한다.

IsDestroyed

boolean Destroy 호출로 래퍼가 해제되었는지 명시적으로 추적한다.

Methods

GetComponents

() -> (CharacterInfoComponentMap) 등록된 모든 컴포넌트를 복제한 테이블로 반환한다. 수정 시 래퍼 내부 상태에는 영향을 미치지 않는다.

AddComponent

(component: CharacterInfoComponent) -> (CharacterInfoComponent) 새 컴포넌트를 등록한다. 동일 이름이 이미 존재하면 기존 인스턴스를 반환하며 새 인스턴스는 Destroy 된다.

GetComponent

(componentType: string) -> (CharacterInfoComponent) 필수 컴포넌트를 조회한다. 존재하지 않는 경우 에러를 발생시킨다.

FindComponent

(componentType: string) -> (CharacterInfoComponent?) 선택적 컴포넌트를 조회한다. 없으면 nil 을 반환한다.

FindOrCreateComponent

(componentType: string, params: any?) 지정한 컴포넌트가 없으면 ComponentType 에 맞는 생성자를 호출하고 params를 넘겨 생성하고 AddComponent 로 등록한다. 존재하면 기존 인스턴스를 즉시 반환한다.

Destroy

() -> () Maid 를 정리하고 모든 컴포넌트의 Destroy 를 호출한 뒤 IsDestroyed 를 true 로 마킹한다. 중복 호출은 무시한다.