import type { CharacterKeysOf, ImageKeysOf, PointsOf } from '../types/config'; import type { ZoomPreset, CameraEffectPreset } from './camera'; import type { LeviarObject, EasingType } from 'leviar'; export type CharacterPositionPreset = 'inherit' | 'far-left' | 'left' | 'center' | 'right' | 'far-right' | (string & {}); /** * 캐릭터를 등장 또는 이동시키거나 퇴장시킨다 */ export type CharacterCmd = { [Name in CharacterKeysOf]: { /** 캐릭터에 수행할 동작입니다. ('show') */ action: 'show'; /** 조작할 캐릭터의 이름(키)입니다. */ name: Name; /** 캐릭터의 위치 프리셋입니다. */ position?: CharacterPositionPreset; /** 표시할 캐릭터 이미지의 키입니다. */ image?: ImageKeysOf; /** 캐릭터 등장 시 카메라를 해당 캐릭터에 포커스할지 여부입니다. */ focus?: boolean | PointsOf | (string & {}); /** 등장 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 등장 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; } | { /** 캐릭터에 수행할 동작입니다. ('remove') */ action: 'remove'; /** 조작할 캐릭터의 이름(키)입니다. */ name: Name; /** 퇴장 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 퇴장 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; }; }[CharacterKeysOf]; /** 카메라를 캐릭터에 포커스한다 */ export type CharacterFocusCmd = { [Name in CharacterKeysOf]: { /** 포커스할 캐릭터의 이름입니다. */ name: Name; /** 포커스할 포인트(부위)의 키 또는 'inherit'입니다. */ point?: PointsOf | 'inherit' | (string & {}); /** 줌 배율 프리셋입니다. */ zoom?: ZoomPreset; /** 포커스 이동 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 포커스 이동 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; }; }[CharacterKeysOf]; /** 캐릭터를 컷인(전면) 레이어로 올리거나 복원한다 */ export type CharacterHighlightCmd = { [Name in CharacterKeysOf]: { /** 하이라이트할 캐릭터의 이름입니다. */ name: Name; /** 하이라이트 효과를 켜거나 끕니다. */ action: 'on' | 'off'; /** 전환 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 전환 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; }; }[CharacterKeysOf]; /** 캐릭터 효과(흔들림 등)를 재생한다 */ export interface CharacterEffectCmd { /** 효과를 적용할 캐릭터의 이름입니다. */ name: CharacterKeysOf; /** 연출 효과의 프리셋 이름입니다. */ preset: CameraEffectPreset; /** 효과의 전체 지속 시간(ms)입니다. */ duration?: number; /** 효과의 강도입니다. 프리셋의 기본값을 덮어씁니다. */ intensity?: number; /** 효과를 반복할 횟수입니다. (기본값: 1, 음수일 경우 무한반복) */ repeat?: number; } export interface CharacterSchema { /** @internal name → { position, imageKey } 맵 */ _characters: Record; /** @internal 최근 전환 애니메이션 지속 시간 (ms) */ _lastDuration?: number; /** @internal 최근 전환 애니메이션 이징 함수 이름 */ _lastEase?: string; } export interface CharacterRenderObj extends LeviarObject, Record> { _currentBaseKey?: string; _currentEmotionKey?: string; /** pointKey → part LeviarObject */ _partObjs?: Record, Record>>; transition?: (src: string, dur: number) => void; __activeCharEffectStop?: (() => void) | null; } /** * 캐릭터 모듈. `novel.config`의 `modules: { 'character': characterModule }` 형태로 등록합니다. */ declare const characterModule: import("..").NovelModule<{ /** 캐릭터에 수행할 동작입니다. ('show') */ action: "show"; /** 조작할 캐릭터의 이름(키)입니다. */ name: string; /** 캐릭터의 위치 프리셋입니다. */ position?: CharacterPositionPreset; /** 표시할 캐릭터 이미지의 키입니다. */ image?: `${string}:${string}` | undefined; /** 캐릭터 등장 시 카메라를 해당 캐릭터에 포커스할지 여부입니다. */ focus?: string | boolean | (string & {}) | undefined; /** 등장 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 등장 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; } | { /** 캐릭터에 수행할 동작입니다. ('remove') */ action: "remove"; /** 조작할 캐릭터의 이름(키)입니다. */ name: string; /** 퇴장 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 퇴장 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; }, CharacterSchema, import("..").DefaultHook>; export default characterModule; export interface CharacterFocusSchema { _unused: undefined; } declare const characterFocusModule: import("..").NovelModule<{ /** 포커스할 캐릭터의 이름입니다. */ name: string; /** 포커스할 포인트(부위)의 키 또는 'inherit'입니다. */ point?: string | (string & {}) | undefined; /** 줌 배율 프리셋입니다. */ zoom?: ZoomPreset; /** 포커스 이동 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 포커스 이동 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; }, CharacterFocusSchema, import("..").DefaultHook>; export { characterFocusModule }; export interface CharacterHighlightSchema { _unused: undefined; } declare const characterHighlightModule: import("..").NovelModule<{ /** 하이라이트할 캐릭터의 이름입니다. */ name: string; /** 하이라이트 효과를 켜거나 끕니다. */ action: "on" | "off"; /** 전환 애니메이션의 지속 시간(ms)입니다. */ duration?: number; /** 전환 애니메이션의 이징 함수 이름입니다. */ ease?: EasingType; }, CharacterHighlightSchema, import("..").DefaultHook>; export { characterHighlightModule }; export interface CharacterEffectSchema { _activeEffects: Record; } declare const characterEffectModule: import("..").NovelModule, CharacterEffectSchema, import("..").DefaultHook>; export { characterEffectModule };