@league-of-foundry-developers/foundry-vtt-types
Version:
TypeScript type definitions for Foundry VTT
318 lines (255 loc) • 6.94 kB
text/typescript
import type { GetKey, ValueOf } from "#utils";
declare global {
/** @deprecated {@link AVSettings.Data | `AVSettings.Data`} */
type AVSettingsData = AVSettings.Data;
class AVSettings {
constructor();
/** @internal */
protected _set: <T>(key: string, value: T) => void;
/** @internal */
protected _change: () => void;
client: AVSettings.ClientSettings;
world: AVSettings.WorldSettings;
protected _original: AVSettings.Settings;
/**
* WebRTC Mode, Disabled, Audio only, Video only, Audio & Video
*/
static AV_MODES: {
DISABLED: 0;
AUDIO: 1;
VIDEO: 2;
AUDIO_VIDEO: 3;
};
/**
* Voice modes: Always-broadcasting, voice-level triggered, push-to-talk.
*/
static VOICE_MODES: AVSettings.VoiceModes;
/**
* Displayed nameplate options: Off entirely, animate between player and character name, player name only, character
* name only.
*/
static NAMEPLATE_MODES: AVSettings.NameplateModes;
/**
* AV dock positions.
*/
static DOCK_POSITIONS: AVSettings.DockPositions;
/**
* Default Client Settings
*/
static DEFAULT_CLIENT_SETTINGS: {
/**
* @defaultValue `"default"`
*/
videoSrc: string;
/**
* @defaultValue `"default"`
*/
audioSrc: string;
/**
* @defaultValue `"default"`
*/
audioSink: string;
/**
* @defaultValue `"bottom"`
*/
dockPosition: AVSettings.DOCK_POSITIONS;
/**
* @defaultValue `false`
*/
hidePlayerList: boolean;
/**
* @defaultValue `false`
*/
hideDock: boolean;
/**
* @defaultValue `false`
*/
muteAll: boolean;
/**
* @defaultValue `false`
*/
disableVideo: boolean;
/**
* @defaultValue `false`
*/
borderColors: boolean;
/**
* @defaultValue `240`
*/
dockWidth: number;
/**
* @defaultValue `1`
*/
nameplates: AVSettings.NAMEPLATE_MODES;
voice: {
/**
* @defaultValue `"AVSettings.VOICE_MODES.PTT"`
*/
mode: AVSettings.VOICE_MODES;
/**
* @defaultValue
* ```
* "`"
* ```
*/
pttName: string;
/**
* @defaultValue `100`
*/
pttDelay: number;
/**
* @defaultValue `-45`
*/
activityThreshold: number;
};
/**
* @defaultValue `{}`
*/
users: Record<string, AVSettings.StoredUserSettings>;
};
/**
* Default world-level AV settings.
*/
static DEFAULT_WORLD_SETTINGS: {
/**
* @defaultValue `AVSettings.AV_MODES.DISABLED`
*/
mode: AVSettings.AV_MODES;
turn: {
/**
* @defaultValue `"server"`
*/
type: string;
/**
* @defaultValue `""`
*/
url: string;
/**
* @defaultValue `""`
*/
username: string;
/**
* @defaultValue `""`
*/
password: string;
};
};
static DEFAULT_USER_SETTINGS: {
/**
* @defaultValue `false`
*/
popout: boolean;
/**
* @defaultValue `100`
*/
x: number;
/**
* @defaultValue `100`
*/
y: number;
/**
* @defaultValue `0`
*/
z: number;
/**
* @defaultValue `320`
*/
width: number;
/**
* @defaultValue `1.0`
*/
volume: number;
/**
* @defaultValue `false`
*/
muted: boolean;
/**
* @defaultValue `false`
*/
hidden: boolean;
/**
* @defaultValue `false`
*/
blocked: boolean;
/**
* @defaultValue `240`
*/
dockWidth: number;
};
/**
* Stores the transient AV activity data received from other users.
*/
activity: Record<string, AVSettings.Data>;
initialize(): void;
changed(): void;
get<S extends "client" | "world">(scope: S, setting: string): unknown; // TODO: Improve once we have proper typing for dot notation
getUser(userId: string): AVSettings.UserSettings | null;
set<S extends "client" | "world">(scope: S, setting: string, value: unknown): void; // TODO: Improve once we have proper typing for dot notation
/**
* Return a mapping of AV settings for each game User.
*/
get users(): Record<string, AVSettings.UserSettings>;
/**
* A helper to determine if the dock is configured in a vertical position.
*/
get verticalDock(): boolean;
/**
* Prepare a standardized object of user settings data for a single User
* @internal
*/
protected _getUserSettings(user: User.Implementation): AVSettings.UserSettings;
/**
* Handle setting changes to either rctClientSettings or rtcWorldSettings.
* @internal
*/
protected _onSettingsChanged(): void;
/**
* Handle another connected user changing their AV settings.
*/
handleUserActivity(userId: string, settings: AVSettings.Data): void;
}
namespace AVSettings {
type ClientSettings = typeof AVSettings.DEFAULT_CLIENT_SETTINGS;
type WorldSettings = typeof AVSettings.DEFAULT_WORLD_SETTINGS;
type StoredUserSettings = typeof AVSettings.DEFAULT_USER_SETTINGS;
type UserSettings = StoredUserSettings & { canBroadcastAudio: boolean; canBroadcastVideo: boolean };
interface Settings {
client: ClientSettings;
world: WorldSettings;
}
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
interface Overrides {}
interface DefaultVoiceModes {
ALWAYS: "always";
ACTIVITY: "activity";
PTT: "ptt";
}
type VoiceModes = GetKey<AVSettings.Overrides, "VoiceModes", DefaultVoiceModes>;
type VOICE_MODES = ValueOf<VoiceModes>;
interface DefaultNamePlateModes {
OFF: 0;
BOTH: 1;
PLAYER_ONLY: 2;
CHAR_ONLY: 3;
}
type NameplateModes = GetKey<AVSettings.Overrides, "NameplateModes", DefaultNamePlateModes>;
type NAMEPLATE_MODES = ValueOf<NameplateModes>;
interface DefaultDockPositions {
TOP: "top";
RIGHT: "right";
BOTTOM: "bottom";
LEFT: "left";
}
type DockPositions = GetKey<AVSettings.Overrides, "DockPositions", DefaultDockPositions>;
type DOCK_POSITIONS = ValueOf<DockPositions>;
type AV_MODES = ValueOf<typeof AVSettings.AV_MODES>;
interface Data {
/** Whether this user has muted themselves. */
muted?: boolean | undefined;
/** Whether this user has hidden their video. */
hidden?: boolean | undefined;
/** Whether the user is broadcasting audio. */
speaking?: boolean | undefined;
}
}
}