phaser3-rex-plugins
Version:
479 lines (449 loc) • 13.7 kB
TypeScript
// import * as Phaser from 'phaser';
import GridSizer from '../gridsizer/GridSizer';
export default Tabs;
declare namespace Tabs {
/**
* Tab button group names.
*/
type GroupNameType = 'left' | 'right' | 'top' | 'bottom';
/**
* Callback invoked for each button in a group.
*/
type EachButtonCallbackType = (
/**
* Current button game object.
*/
button: Phaser.GameObjects.GameObject,
/**
* Zero-based button index.
*/
index: number,
/**
* Full button list in the group.
*/
buttons: Phaser.GameObjects.GameObject[]
) => void;
/**
* Click behavior configuration for tab buttons.
*/
interface IClickConfig {
/**
* Click trigger mode.
*/
mode: 0 | 1 | 'pointerup' | 'pointerdown' | 'release' | 'press',
/**
* Minimum interval between clicks in milliseconds.
*/
clickInterval?: number
}
/**
* Configuration options for creating tabs container.
*/
interface IConfig extends GridSizer.IConfig {
space?: {
left?: number,
right?: number,
top?: number,
bottom?: number,
leftButtonsOffset?: number,
rightButtonsOffset?: number,
topButtonsOffset?: number,
bottomButtonsOffset?: number,
leftButton?: number,
rightButton?: number,
topButton?: number,
bottomButton?: number,
},
/**
* Optional background game object.
*/
background?: Phaser.GameObjects.GameObject,
/**
* Optional panel game object.
*/
panel?: Phaser.GameObjects.GameObject,
/**
* Left button list.
*/
leftButtons?: Phaser.GameObjects.GameObject[],
/**
* Left buttons background.
*/
leftButtonsBackground?: Phaser.GameObjects.GameObject,
/**
* Right button list.
*/
rightButtons?: Phaser.GameObjects.GameObject[],
/**
* Right buttons background.
*/
rightButtonsBackground?: Phaser.GameObjects.GameObject,
/**
* Top button list.
*/
topButtons?: Phaser.GameObjects.GameObject[],
/**
* Top buttons background.
*/
topButtonsBackground?: Phaser.GameObjects.GameObject,
/**
* Bottom button list.
*/
bottomButtons?: Phaser.GameObjects.GameObject[],
/**
* Bottom buttons background.
*/
bottomButtonsBackground?: Phaser.GameObjects.GameObject,
expand?: {
panel?: boolean,
leftButtons?: boolean,
rightButtons?: boolean,
topButtons?: boolean,
bottomButtons?: boolean
},
align?: {
leftButtons?: 'top' | 'bottom' | 'center',
rightButtons?: 'top' | 'bottom' | 'center',
topButtons?: 'left' | 'right' | 'center',
bottomButtons?: 'left' | 'right' | 'center',
},
/**
* Click behavior configuration.
*/
click?: IClickConfig,
}
}
/**
* Grid-based tabs component with button groups on four sides.
*/
declare class Tabs extends GridSizer {
/**
* Create a tabs component.
*
* @param scene - Scene that owns this component.
* @param config - Optional tabs configuration.
*/
constructor(
scene: Phaser.Scene,
config?: Tabs.IConfig
);
/**
* Emit button-click event on a specific group.
*
* @param groupName - Target button group name.
* @param index - Button index or button game object.
* @returns This component instance.
*/
emitButtonClick(
groupName: Tabs.GroupNameType,
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Emit click for left button group.
*
* @param index - Button index or button game object.
* @returns This component instance.
*/
emitLeftButtonClick(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Emit click for right button group.
*
* @param index - Button index or button game object.
* @returns This component instance.
*/
emitRightButtonClick(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Emit click for top button group.
*
* @param index - Button index or button game object.
* @returns This component instance.
*/
emitTopButtonClick(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Emit click for bottom button group.
*
* @param index - Button index or button game object.
* @returns This component instance.
*/
emitBottomButtonClick(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Enable or disable button in a specific group.
*
* @param groupName - Target button group name.
* @param index - Button index, button object, or boolean shortcut.
* @param enable - Target enabled state.
* @returns This component instance.
*/
setButtonEnable(
groupName: Tabs.GroupNameType,
index?: number | Phaser.GameObjects.GameObject | boolean,
enable?: boolean
): this;
setLeftButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
setRightButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
setTopButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
setBottomButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Toggle button enable state in a specific group.
*
* @param groupName - Target button group name.
* @param index - Button index or button game object.
* @returns This component instance.
*/
toggleButtonEnable(
groupName: Tabs.GroupNameType,
index?: number | Phaser.GameObjects.GameObject
): this;
toggleLeftButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
toggleRightButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
toggleTopButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
toggleBottomButtonEnable(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Get button enable state in a specific group.
*
* @param groupName - Target button group name.
* @param index - Button index or button game object.
* @returns True if enabled.
*/
getButtonEnable(
groupName: Tabs.GroupNameType,
index: number | Phaser.GameObjects.GameObject
): boolean;
getLeftButtonEnable(
index: number | Phaser.GameObjects.GameObject
): boolean;
getRightButtonEnable(
index: number | Phaser.GameObjects.GameObject
): boolean;
getTopButtonEnable(
index: number | Phaser.GameObjects.GameObject
): boolean;
getBottomButtonEnable(
index: number | Phaser.GameObjects.GameObject
): boolean;
/**
* Get button object from a specific group.
*
* @param groupName - Target button group name.
* @param index - Button index.
* @returns Button game object or null.
*/
getButton(
groupName: Tabs.GroupNameType,
index: number
): Phaser.GameObjects.GameObject | null;
getLeftButton(
index: number
): Phaser.GameObjects.GameObject | null;
getRightButton(
index: number
): Phaser.GameObjects.GameObject | null;
getTopButton(
index: number
): Phaser.GameObjects.GameObject | null;
getBottomButton(
index: number
): Phaser.GameObjects.GameObject | null;
/**
* Add button to a specific group.
*
* @param groupName - Target button group name.
* @param gameObject - Button game object.
* @returns This component instance.
*/
addButton(
groupName: Tabs.GroupNameType,
gameObject: Phaser.GameObjects.GameObject
): this;
addLeftButton(
gameObject: Phaser.GameObjects.GameObject
): this;
addRightButton(
gameObject: Phaser.GameObjects.GameObject
): this;
addTopButton(
gameObject: Phaser.GameObjects.GameObject
): this;
addBottomButton(
gameObject: Phaser.GameObjects.GameObject
): this;
/**
* Remove button from a specific group.
*
* @param groupName - Target button group name.
* @param gameObject - Button game object.
* @param destroyChild - Set to true to destroy removed button.
* @returns This component instance.
*/
removeButton(
groupName: Tabs.GroupNameType,
gameObject: Phaser.GameObjects.GameObject,
destroyChild?: boolean
): this;
removeLeftButton(
gameObject: Phaser.GameObjects.GameObject,
destroyChild?: boolean
): this;
removeRightButton(
gameObject: Phaser.GameObjects.GameObject,
destroyChild?: boolean
): this;
removeTopButton(
gameObject: Phaser.GameObjects.GameObject,
destroyChild?: boolean
): this;
removeBottomButton(
gameObject: Phaser.GameObjects.GameObject,
destroyChild?: boolean
): this;
/**
* Clear buttons in a specific group.
*
* @param groupName - Target button group name.
* @param destroyChild - Set to true to destroy removed buttons.
* @returns This component instance.
*/
clearButtons(
groupName: Tabs.GroupNameType,
destroyChild?: boolean
): this;
clearLeftButtons(
destroyChild?: boolean
): this;
clearRightButtons(
destroyChild?: boolean
): this;
clearTopButtons(
destroyChild?: boolean
): this;
clearBottomButtosn(
destroyChild?: boolean
): this;
/**
* Show button in a specific group.
*
* @param groupName - Target button group name.
* @param index - Button index or button game object.
* @returns This component instance.
*/
showButton(
groupName: Tabs.GroupNameType,
index: number | Phaser.GameObjects.GameObject
): this;
showLeftButton(
index: number | Phaser.GameObjects.GameObject
): this;
showRightButton(
index: number | Phaser.GameObjects.GameObject
): this;
showTopButton(
index: number | Phaser.GameObjects.GameObject
): this;
showBottomButton(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Hide button in a specific group.
*
* @param groupName - Target button group name.
* @param index - Button index or button game object.
* @returns This component instance.
*/
hideButton(
groupName: Tabs.GroupNameType,
index: number | Phaser.GameObjects.GameObject
): this;
hideLeftButton(
index: number | Phaser.GameObjects.GameObject
): this;
hideRightButton(
index: number | Phaser.GameObjects.GameObject
): this;
hideTopButton(
index: number | Phaser.GameObjects.GameObject
): this;
hideBottomButton(
index: number | Phaser.GameObjects.GameObject
): this;
/**
* Iterate buttons in a specific group.
*
* @param groupName - Target button group name.
* @param callback - Callback invoked per button.
* @param scop - Optional callback execution scope.
* @returns This component instance.
*/
forEachButtton(
groupName: Tabs.GroupNameType,
callback: Tabs.EachButtonCallbackType,
scop?: unknown
): this;
/**
* Iterate left group buttons.
*
* @param callback - Callback invoked per button.
* @param scop - Optional callback execution scope.
* @returns This component instance.
*/
forEachLeftButton(
callback: Tabs.EachButtonCallbackType,
scop?: unknown
): this;
/**
* Iterate right group buttons.
*
* @param callback - Callback invoked per button.
* @param scop - Optional callback execution scope.
* @returns This component instance.
*/
forEachRightButton(
callback: Tabs.EachButtonCallbackType,
scop?: unknown
): this;
/**
* Iterate top group buttons.
*
* @param callback - Callback invoked per button.
* @param scop - Optional callback execution scope.
* @returns This component instance.
*/
forEachTopButton(
callback: Tabs.EachButtonCallbackType,
scop?: unknown
): this;
/**
* Iterate bottom group buttons.
*
* @param callback - Callback invoked per button.
* @param scop - Optional callback execution scope.
* @returns This component instance.
*/
forEachBottomButton(
callback: Tabs.EachButtonCallbackType,
scop?: unknown
): this;
}