phaser3-rex-plugins
Version:
192 lines (167 loc) • 6.66 kB
JavaScript
import CreateScrollbar from './CreateScrollbar.js';
import Scroller from '../../../../plugins/scroller.js';
import MouseWheelScroller from '../../../../plugins/input/mousewheelscroller/MouseWheelScroller.js';
const GetValue = Phaser.Utils.Objects.GetValue;
var AddSlider = function (topPatent, sliderParent, axis, config) {
axis = axis.toUpperCase();
var isAxisY = (axis === 'Y');
var isScrollXYMode = (topPatent.scrollMode === 2);
var child = topPatent.childrenMap.child;
var sliderConfig, slider;
var sliderConfigKey = `slider${axis}`;
if (isScrollXYMode) {
sliderConfig = GetValue(config, sliderConfigKey, undefined)
} else {
if (config.hasOwnProperty(sliderConfigKey)) {
sliderConfig = GetValue(config, sliderConfigKey, undefined)
} else {
sliderConfig = GetValue(config, 'slider', undefined);
}
}
if (sliderConfig) {
if (sliderConfig === true) {
sliderConfig = {};
}
sliderConfig.orientation = (isAxisY) ? 1 : 0;
slider = CreateScrollbar(topPatent.scene, sliderConfig);
var column, row, padding;
var sliderPosition = GetValue(sliderConfig, 'position', 0);
if (typeof (sliderPosition) === 'string') {
sliderPosition = SLIDER_POSITION_MAP[sliderPosition];
}
/*
1. space.sliderX, space.sliderY
2. space.slider
3. space.child
*/
var sliderPadding = GetValue(config, `space.slider${axis}`, undefined);
if (sliderPadding === undefined) {
sliderPadding = GetValue(config, 'space.slider', undefined);
if (sliderPadding === undefined) {
if (isScrollXYMode) {
sliderPadding = 0;
} else {
// Legacy
sliderPadding = GetValue(config, 'space.child', 0);
}
}
}
var isNumberSliderPadding = (typeof (sliderPadding) === 'number');
if (isAxisY) {
if (sliderPosition === 0) { // right
column = 2;
row = 1;
padding = (isNumberSliderPadding) ? { left: sliderPadding } : sliderPadding;
} else { // left
column = 0;
row = 1;
padding = (isNumberSliderPadding) ? { right: sliderPadding } : sliderPadding;
}
} else {
if (sliderPosition === 0) { // bottom
column = 1;
row = 2;
padding = (isNumberSliderPadding) ? { top: sliderPadding } : sliderPadding;
} else { // top
column = 1;
row = 0;
padding = (isNumberSliderPadding) ? { bottom: sliderPadding } : sliderPadding;
}
}
sliderParent.add(slider,
{
column: column,
row: row,
align: 'center',
padding: padding,
expand: true,
}
);
topPatent[`hideUnscrollableSlider${axis}`] = GetValue(sliderConfig, 'hideUnscrollableSlider', false);
topPatent[`adaptThumb${axis}SizeMode`] = GetValue(sliderConfig, 'adaptThumbSize', false);
topPatent[`minThumb${axis}Size`] = GetValue(sliderConfig, 'minThumbSize', undefined);
} else {
topPatent[`hideUnscrollableSlider${axis}`] = false;
topPatent[`adaptThumb${axis}SizeMode`] = false;
topPatent[`minThumb${axis}Size`] = undefined;
}
var scrollerConfig, scroller;
var scrollerConfigKey = `scroller${axis}`;
if (isScrollXYMode) {
scrollerConfig = GetValue(config, scrollerConfigKey, true);
} else {
if (config.hasOwnProperty(scrollerConfigKey)) {
scrollerConfig = GetValue(config, scrollerConfigKey, true);
} else {
scrollerConfig = GetValue(config, 'scroller', true);
}
}
if (scrollerConfig && child) {
if (scrollerConfig === true) {
scrollerConfig = {};
}
scrollerConfig.orientation = (isAxisY) ? 0 : 1;
scroller = new Scroller(child, scrollerConfig);
}
var mouseWheelScrollerConfig = GetValue(config, ((isScrollXYMode) ? `mouseWheelScroller${axis}` : 'mouseWheelScroller'), false),
mouseWheelScroller;
if (mouseWheelScrollerConfig && child) {
mouseWheelScroller = new MouseWheelScroller(child, mouseWheelScrollerConfig);
}
topPatent.addChildrenMap(`slider${axis}`, slider);
topPatent.addChildrenMap(`scroller${axis}`, scroller);
topPatent.addChildrenMap(`mouseWheelScroller${axis}`, mouseWheelScroller);
if ((!isScrollXYMode) || (isAxisY)) {
topPatent['hideUnscrollableSlider'] = topPatent[`hideUnscrollableSlider${axis}`];
topPatent['adaptThumbSizeMode'] = topPatent[`adaptThumb${axis}SizeMode`];
topPatent['minThumbSize'] = topPatent[`minThumb${axis}Size`];
topPatent.addChildrenMap('slider', slider);
topPatent.addChildrenMap('scroller', scroller);
topPatent.addChildrenMap('mouseWheelScroller', mouseWheelScroller);
}
// Control
if (slider) {
var keyST, eventName;
if (isScrollXYMode) {
keyST = (isAxisY) ? 't' : 's';
eventName = `scroll${axis}`;
} else {
keyST = 't';
eventName = 'scroll';
}
slider
.on('valuechange', function (newValue) {
topPatent[keyST] = newValue;
topPatent.emit(eventName, topPatent);
});
}
if (scroller) {
var keyChildOXY, eventName;
if (isScrollXYMode) {
keyChildOXY = `childO${axis}`;
eventName = `scroll${axis}`;
} else {
keyChildOXY = 'childOY';
eventName = 'scroll';
}
scroller
.on('valuechange', function (newValue) {
topPatent[keyChildOXY] = newValue;
topPatent.emit(eventName, topPatent);
})
}
if (mouseWheelScroller) {
var methodAddChildOXY = `addChildO${axis}`;
mouseWheelScroller
.on('scroll', function (incValue) {
topPatent[methodAddChildOXY](-incValue, true);
});
}
}
const SLIDER_POSITION_MAP = {
right: 0,
left: 1,
bottom: 0,
top: 1,
}
export default AddSlider;