45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import type { Encounter, FacingDirection } from '../types';
|
|
|
|
const DEFAULT_NPC_SCENE_OVERLAY_OFFSETS = {
|
|
hpTop: -40,
|
|
nameTop: -20,
|
|
dialogueTop: -56,
|
|
};
|
|
|
|
const GENERIC_NPC_SCENE_OVERLAY_OFFSETS = {
|
|
hpTop: -24,
|
|
nameTop: -8,
|
|
dialogueTop: -48,
|
|
};
|
|
|
|
export const GENERIC_NPC_SCENE_FOOT_OFFSET_PX = -30;
|
|
|
|
export function isGenericNpcEncounter(encounter: Encounter | null | undefined) {
|
|
return Boolean(encounter && encounter.kind !== 'treasure' && !encounter.characterId && !encounter.monsterPresetId);
|
|
}
|
|
|
|
export function invertFacing(facing: FacingDirection): FacingDirection {
|
|
return facing === 'left' ? 'right' : 'left';
|
|
}
|
|
|
|
export function getRenderableNpcFacing(
|
|
encounter: Encounter | null | undefined,
|
|
facing: FacingDirection,
|
|
options?: { medievalVisual?: boolean },
|
|
): FacingDirection {
|
|
const medieval =
|
|
options?.medievalVisual ??
|
|
Boolean(encounter && encounter.kind !== 'treasure' && isGenericNpcEncounter(encounter));
|
|
return medieval ? invertFacing(facing) : facing;
|
|
}
|
|
|
|
export function getNpcSceneFootOffset(encounter: Encounter | null | undefined) {
|
|
return isGenericNpcEncounter(encounter) ? GENERIC_NPC_SCENE_FOOT_OFFSET_PX : 0;
|
|
}
|
|
|
|
export function getNpcSceneOverlayOffsets(encounter: Encounter | null | undefined) {
|
|
return isGenericNpcEncounter(encounter)
|
|
? GENERIC_NPC_SCENE_OVERLAY_OFFSETS
|
|
: DEFAULT_NPC_SCENE_OVERLAY_OFFSETS;
|
|
}
|