raingame
Version:
2D game framework
128 lines (127 loc) • 5.43 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.pixelTouchDetermination = exports.rageTouchDetermination = void 0;
var StandardObject_1 = require("../StandardObject");
var SceneGroup_1 = __importDefault(require("../SceneGroup"));
function rageTouchDetermination(e, renderer, scene) {
var aimx = e.offsetX * renderer.devicePixelRatio;
var aimy = e.offsetY * renderer.devicePixelRatio;
var list = scene.children;
var ctx = renderer.ctx;
for (var i = list.length - 1; i >= 0; i--) {
var item = list[i].target;
if (item instanceof SceneGroup_1.default) {
for (var i_1 = item.children.length - 1; i_1 >= 0; i_1--) {
var child = item.children[i_1].target;
var _a = child._position_, x = _a.x, y = _a.y;
var xg = item.position.x;
var yg = item.position.y;
x = x + xg;
y = y + yg;
var width = child.width, height = child.height;
var min_x = x;
var max_x = x + width;
var min_y = y;
var max_y = y + height;
if (aimx > min_x && aimx < max_x && aimy > min_y && aimy < max_y) {
var eventData = {
target: child,
rank: list[i_1].rank,
scene: scene,
sceneGroup: item,
point: { x: aimx, y: aimy },
ctx: ctx
};
return { res: true, eventData: eventData };
}
}
}
else if (item instanceof StandardObject_1.StandardObject) {
var _b = item._position_, x = _b.x, y = _b.y;
var width = item.width, height = item.height;
var min_x = x;
var max_x = x + width;
var min_y = y;
var max_y = y + height;
if (aimx > min_x && aimx < max_x && aimy > min_y && aimy < max_y) {
var eventData = {
target: item,
rank: list[i].rank,
scene: scene,
sceneGroup: null,
point: { x: aimx, y: aimy },
ctx: ctx
};
//debugger;
return { res: true, eventData: eventData };
}
}
}
//debugger;
return { res: false };
}
exports.rageTouchDetermination = rageTouchDetermination;
function createCav(size) {
var width = size.width, height = size.height;
var canvas = document.createElement("canvas");
canvas.height = height;
canvas.width = width;
var ctx = canvas.getContext('2d');
return { canvas: canvas, ctx: ctx };
}
function pixelTouchDetermination(e, renderer, scene) {
var backUp = createCav(renderer.getSize()); // a canvas to compare
var aimx = e.offsetX * renderer.devicePixelRatio;
var aimy = e.offsetY * renderer.devicePixelRatio;
var ctx = renderer.ctx;
var point = ctx.getImageData(aimx, aimy, 1, 1);
var children = scene.children;
if (point.data[3] !== 0 && backUp.ctx) {
for (var i = children.length - 1; i >= 0; i--) {
var item = children[i].target;
if (item instanceof SceneGroup_1.default) {
for (var i_2 = item.children.length - 1; i_2 >= 0; i_2--) {
var child = item.children[i_2].target;
child.render(backUp.ctx, item);
var comparePoint = backUp.ctx.getImageData(aimx, aimy, 1, 1);
backUp.ctx.clearRect(0, 0, window.innerWidth, window.innerHeight); //clean canvas
if (comparePoint.data[3] !== 0) {
var eventData = {
target: child,
rank: children[i_2].rank,
scene: scene,
sceneGroup: item,
point: { x: aimx, y: aimy },
ctx: ctx
};
return { res: true, eventData: eventData };
}
}
}
else if (item instanceof StandardObject_1.StandardObject) {
item.render(backUp.ctx, item);
var comparePoint = backUp.ctx.getImageData(aimx, aimy, 1, 1);
backUp.ctx.clearRect(0, 0, window.innerWidth, window.innerHeight); //clean canvas
if (comparePoint.data[3] !== 0) {
var eventData = {
target: item,
rank: children[i].rank,
scene: scene,
sceneGroup: null,
point: { x: aimx, y: aimy },
ctx: ctx
};
return { res: true, eventData: eventData };
}
}
}
return { res: false };
}
else {
return { res: false };
}
}
exports.pixelTouchDetermination = pixelTouchDetermination;