You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
382 lines
12 KiB
JavaScript
382 lines
12 KiB
JavaScript
3 years ago
|
//=============================================================================
|
||
|
// Salted Fish Plugins - Core
|
||
|
// SF_Core.js
|
||
|
//=============================================================================
|
||
|
"use strict";
|
||
|
var Imported = Imported || {};
|
||
|
Imported.SF_Core = true;
|
||
|
|
||
|
var SF_Plugins = SF_Plugins || {};
|
||
|
//=============================================================================
|
||
|
/*:
|
||
|
* @plugindesc core lib for salted fish plugins
|
||
|
* @author Salted Fish
|
||
|
*/
|
||
|
//=============================================================================
|
||
|
|
||
|
(function () {
|
||
|
var SF_Core = {};
|
||
|
SF_Plugins.Core = SF_Core;
|
||
|
|
||
|
SF_Core.version = 1.0;
|
||
|
|
||
|
//=============================================================================
|
||
|
// Sprite
|
||
|
//=============================================================================
|
||
|
|
||
|
Sprite.prototype.canvasToLocalX = function (x) {
|
||
|
var node = this;
|
||
|
while (node) {
|
||
|
x -= node.x;
|
||
|
node = node.parent;
|
||
|
}
|
||
|
return x;
|
||
|
};
|
||
|
|
||
|
Sprite.prototype.canvasToLocalY = function (y) {
|
||
|
var node = this;
|
||
|
while (node) {
|
||
|
y -= node.y;
|
||
|
node = node.parent;
|
||
|
}
|
||
|
return y;
|
||
|
};
|
||
|
|
||
|
//=============================================================================
|
||
|
// Pointer
|
||
|
//=============================================================================
|
||
|
|
||
|
// event[array]: pointer-down, pointer-up, pointer-move, pointer-cancel
|
||
|
function Pointer() {
|
||
|
this.initialize.apply(this, arguments);
|
||
|
}
|
||
|
SF_Core.Pointer = Pointer;
|
||
|
|
||
|
Pointer.prototype = Object.create(Object.prototype);
|
||
|
Pointer.prototype.constructor = Pointer;
|
||
|
|
||
|
Pointer.prototype.initialize = function (x, y) {
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
this.event = [];
|
||
|
this.ext = null;
|
||
|
this.user = null;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.set = function (x, y) {
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.setEvents = function (events) {
|
||
|
this.event = events;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.addEvent = function (event) {
|
||
|
this.event.push(event);
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.clearEvent = function () {
|
||
|
this.event = [];
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.getEvents = function () {
|
||
|
return this.event;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.setExt = function (ext) {
|
||
|
this.ext = ext;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.getExt = function () {
|
||
|
return this.ext;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.setUser = function (user) {
|
||
|
this.user = user;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.getUser = function () {
|
||
|
return this.user;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.removeUser = function () {
|
||
|
this.user = null;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.isEmpty = function () {
|
||
|
return this.event.length === 0;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.clear = function () {
|
||
|
this.event = [];
|
||
|
this.ext = null;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.isDown = function () {
|
||
|
return this.event.indexOf('pointer-down') >= 0;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.isUp = function () {
|
||
|
return this.event.indexOf('pointer-up') >= 0;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.isMove = function () {
|
||
|
return this.event.indexOf('pointer-move') >= 0;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.isCancel = function () {
|
||
|
return this.event.indexOf('pointer-cancel') >= 0;
|
||
|
}
|
||
|
|
||
|
Pointer.prototype.isCanUsed = function (user) {
|
||
|
return this.user === user || this.user === null;
|
||
|
}
|
||
|
|
||
|
//=============================================================================
|
||
|
// TouchInput
|
||
|
//=============================================================================
|
||
|
SF_Core.TouchInput_clear = TouchInput.clear;
|
||
|
TouchInput.clear = function () {
|
||
|
SF_Core.TouchInput_clear.call(this);
|
||
|
|
||
|
this._pointer = {};
|
||
|
this._losedPointer = [];
|
||
|
|
||
|
this._mouseValid = false;
|
||
|
this._mouse = new Pointer(0, 0);
|
||
|
this._events._mouse = new Pointer(0, 0);
|
||
|
this._events._mouseValid = false;
|
||
|
|
||
|
this._events.event = null;
|
||
|
this._events._pointer = {};
|
||
|
this._events._losedPointer = [];
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput_update = TouchInput.update;
|
||
|
TouchInput.update = function () {
|
||
|
SF_Core.TouchInput_update.call(this);
|
||
|
|
||
|
// update mouse
|
||
|
if (this._events._mouseValid) {
|
||
|
this._mouse.set(this._events._mouse.x, this._events._mouse.y);
|
||
|
this._mouse.setEvents(this._events._mouse.getEvents());
|
||
|
this._mouse.setExt(this._events._mouse.getExt());
|
||
|
this._mouseValid = true;
|
||
|
|
||
|
this._events._mouseValid = false;
|
||
|
this._events._mouse.clear();
|
||
|
} else {
|
||
|
this._mouse.clear();
|
||
|
}
|
||
|
|
||
|
// update pointer
|
||
|
this._losedPointer = this._events._losedPointer;
|
||
|
this._events._losedPointer = [];
|
||
|
|
||
|
// delete losed pointer
|
||
|
var tmp_pointer = {};
|
||
|
for (var i in this._pointer) {
|
||
|
var pointer = this._pointer[i];
|
||
|
if (pointer.isCancel() || pointer.isUp()) {
|
||
|
continue;
|
||
|
}
|
||
|
tmp_pointer[i] = pointer;
|
||
|
}
|
||
|
this._pointer = tmp_pointer;
|
||
|
|
||
|
for (var i in this._events._pointer) {
|
||
|
var pointer = this._events._pointer[i];
|
||
|
if (pointer.isCancel() || pointer.isUp()) {
|
||
|
SF_Core.Utils.error('pointer cancel or up');
|
||
|
}
|
||
|
var p = this._pointer[i];
|
||
|
if (p) {
|
||
|
p.set(pointer.x, pointer.y);
|
||
|
p.setEvents(pointer.getEvents());
|
||
|
p.setExt(pointer.getExt());
|
||
|
|
||
|
} else {
|
||
|
this._pointer[i] = pointer;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput_onMouseDown = TouchInput._onMouseDown;
|
||
|
TouchInput._onMouseDown = function (event) {
|
||
|
SF_Core.TouchInput_onMouseDown.call(this, event);
|
||
|
|
||
|
this._events.event = event;
|
||
|
this._events._mouseValid = true;
|
||
|
var x = Graphics.pageToCanvasX(event.pageX);
|
||
|
var y = Graphics.pageToCanvasY(event.pageY);
|
||
|
this._events._mouse.set(x, y);
|
||
|
this._events._mouse.addEvent('pointer-down');
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput__onMouseMove = TouchInput._onMouseMove;
|
||
|
TouchInput._onMouseMove = function (event) {
|
||
|
SF_Core.TouchInput__onMouseMove.call(this, event);
|
||
|
|
||
|
this._events.event = event;
|
||
|
this._events._mouseValid = true;
|
||
|
var x = Graphics.pageToCanvasX(event.pageX);
|
||
|
var y = Graphics.pageToCanvasY(event.pageY);
|
||
|
this._events._mouse.set(x, y);
|
||
|
this._events._mouse.addEvent('pointer-move');
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput__onMouseUp = TouchInput._onMouseUp;
|
||
|
TouchInput._onMouseUp = function (event) {
|
||
|
SF_Core.TouchInput__onMouseUp.call(this, event);
|
||
|
|
||
|
this._events.event = event;
|
||
|
this._events._mouseValid = true;
|
||
|
var x = Graphics.pageToCanvasX(event.pageX);
|
||
|
var y = Graphics.pageToCanvasY(event.pageY);
|
||
|
this._events._mouse.set(x, y);
|
||
|
this._events._mouse.addEvent('pointer-up');
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput__onMouseWheel = TouchInput._onMouseWheel;
|
||
|
TouchInput._onMouseWheel = function (event) {
|
||
|
SF_Core.TouchInput__onMouseWheel.call(this, event);
|
||
|
|
||
|
this._events.event = event;
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput__onTouchStart = TouchInput._onTouchStart;
|
||
|
TouchInput._onTouchStart = function (event) {
|
||
|
SF_Core.TouchInput__onTouchStart.call(this, event);
|
||
|
this._events.event = event;
|
||
|
this._pointerFromTouch(event, "pointer-down");
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput__onTouchMove = TouchInput._onTouchMove;
|
||
|
TouchInput._onTouchMove = function (event) {
|
||
|
SF_Core.TouchInput__onTouchMove.call(this, event);
|
||
|
this._events.event = event;
|
||
|
this._pointerFromTouch(event, "pointer-move");
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput__onTouchEnd = TouchInput._onTouchEnd;
|
||
|
TouchInput._onTouchEnd = function (event) {
|
||
|
SF_Core.TouchInput__onTouchEnd.call(this, event);
|
||
|
//console.log(event.changedTouches);
|
||
|
this._events.event = event;
|
||
|
this._pointerFromTouch(event, "pointer-up");
|
||
|
}
|
||
|
|
||
|
SF_Core.TouchInput__onTouchCancel = TouchInput._onTouchCancel;
|
||
|
TouchInput._onTouchCancel = function (event) {
|
||
|
SF_Core.TouchInput__onTouchCancel.call(this, event);
|
||
|
this._events.event = event;
|
||
|
this._pointerFromTouch(event, "pointer-cancel");
|
||
|
}
|
||
|
|
||
|
TouchInput._pointerFromTouch = function (event, type) {
|
||
|
for (var i = 0; i < event.changedTouches.length; i++) {
|
||
|
var touch = event.changedTouches[i];
|
||
|
var x = Graphics.pageToCanvasX(touch.pageX);
|
||
|
var y = Graphics.pageToCanvasY(touch.pageY);
|
||
|
var id = touch.identifier;
|
||
|
var pointer = this._events._pointer[id];
|
||
|
if (!pointer) {
|
||
|
pointer = new Pointer(x, y);
|
||
|
this._events._pointer[id] = pointer;
|
||
|
}
|
||
|
pointer.set(x, y);
|
||
|
pointer.addEvent(type);
|
||
|
|
||
|
switch (type) {
|
||
|
case "pointer-down":
|
||
|
break;
|
||
|
case "pointer-up":
|
||
|
case "pointer-cancel":
|
||
|
delete this._events._pointer[id];
|
||
|
this._events._losedPointer.push(pointer);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TouchInput.getPointers = function (user) {
|
||
|
var result = [];
|
||
|
if (this._mouseValid && this._mouse.isCanUsed(user)) {
|
||
|
result.push(this._mouse);
|
||
|
}
|
||
|
for (var i = 0; i < this._losedPointer.length; i++) {
|
||
|
var pointer = this._losedPointer[i];
|
||
|
if (pointer.isCanUsed(user)) {
|
||
|
result.push(pointer);
|
||
|
}
|
||
|
}
|
||
|
for (var i in this._pointer) {
|
||
|
var pointer = this._pointer[i];
|
||
|
if (pointer.isCanUsed(user)) {
|
||
|
result.push(pointer);
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
TouchInput.removeUsers = function () {
|
||
|
for (var i in this._pointer) {
|
||
|
var pointer = this._pointer[i];
|
||
|
pointer.removeUser();
|
||
|
}
|
||
|
for (var i = 0; i < this._losedPointer.length; i++) {
|
||
|
var pointer = this._losedPointer[i];
|
||
|
pointer.removeUser();
|
||
|
}
|
||
|
this._mouse.removeUser();
|
||
|
}
|
||
|
|
||
|
//=============================================================================
|
||
|
// PIXI.Container
|
||
|
//=============================================================================
|
||
|
|
||
|
PIXI.Container.prototype.getPointer = function () {
|
||
|
var pointers = TouchInput.getPointers(this);
|
||
|
var lastUsePointer = null;
|
||
|
var inFramePointer = null;
|
||
|
for (var i = 0; i < pointers.length; i++) {
|
||
|
if (pointers[i].getUser() === this) {
|
||
|
lastUsePointer = pointers[i];
|
||
|
break;
|
||
|
}
|
||
|
if (this.containsPoint(new Point(pointers[i].x, pointers[i].y))) {
|
||
|
inFramePointer = pointers[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return lastUsePointer || inFramePointer || pointers[0] || null;
|
||
|
}
|
||
|
|
||
|
PIXI.Container.prototype.releasePointer = function () {
|
||
|
var pointer = this.getPointer();
|
||
|
if (pointer) {
|
||
|
pointer.removeUser();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//=============================================================================
|
||
|
// SF_Utils
|
||
|
//=============================================================================
|
||
|
|
||
|
SF_Core.Utils = {};
|
||
|
|
||
|
SF_Core.Utils.assert = function (condition, message) {
|
||
|
if (!condition) {
|
||
|
SF_Core.Utils.error(message);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
SF_Core.Utils.error = function (message) {
|
||
|
if (typeof console === "object") {
|
||
|
console.error(message);
|
||
|
}
|
||
|
throw new Error(message);
|
||
|
};
|
||
|
})();
|