(function (w) {
w.drewsnow = {
'draggable': (container, dragItem) => {
if (dragItem === undefined) dragItem = container;
var xOffset = yOffset = 0,
active = false,
currentX,
currentY,
initialX,
initialY;
container.addEventListener('touchstart', dragStart, false);
document.addEventListener('touchend', dragEnd, false);
document.addEventListener('touchmove', drag, false);
container.addEventListener('mousedown', dragStart, false);
document.addEventListener('mouseup', dragEnd, false);
document.addEventListener('mousemove', drag, false);
function dragStart(e) {
if (e.type === 'touchstart') {
initialX = e.touches[0].clientX - xOffset;
initialY = e.touches[0].clientY - yOffset;
} else {
initialX = e.clientX - xOffset;
initialY = e.clientY - yOffset;
}
let ignoredElems = ['INPUT', 'BUTTON', 'A', 'P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'SPAN'];
if (e.target === dragItem || container === dragItem && ignoredElems.indexOf(e.target.nodeName) == -1) active = true;
}
function dragEnd(e) {
initialX = currentX;
initialY = currentY;
active = false;
}
function drag(e) {
if (active) {
e.preventDefault();
if (e.type === 'touchmove') {
currentX = e.touches[0].clientX - initialX;
currentY = e.touches[0].clientY - initialY;
} else {
currentX = e.clientX - initialX;
currentY = e.clientY - initialY;
}
xOffset = currentX;
yOffset = currentY;
setTranslate(currentX, currentY, container);
}
}
function setTranslate(xPos, yPos, el) {
el.style.transform = 'translate3d(' + xPos + 'px, ' + yPos + 'px, 0)';
}
},
'addStyle': (css) => {
let elem = document.createElement('style');
elem.textContent = css;
document.head.appendChild(elem);
return elem;
},
'addHtml': (html, parent) => {
elements = new DOMParser().parseFromString(html, 'text/html');
container = elements.body.firstChild;
(parent || document.body).appendChild(container);
return container;
},
'htmlEncode': (str) => {
return str
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
},
'addKeyBind': function (func, code = -1, key = '') {
this.keybinds.push({
'key': key,
'on': false,
'func': func,
'code': code
});
},
'removeKeyBind': function (code) {
for (let i = 0; i < this.keybinds.length; i++) {
let binds = this.keybinds;
if (binds[i].code === code) {
binds.splice(i, 1);
return true;
}
}
return false;
},
'keybinds': [],
'getAngle': (x1, y1, x2, y2) => {
return Math.atan2(y1 - y2, x1 - x2);
},
'getDist': (x1, y1, x2, y2) => {
var a = x1 - x2;
var b = y1 - y2;
return Math.sqrt(a * a + b * b);
},
'closestObj': function (you, objects) {
let closestObj = objects[0];
let closestDist = Infinity;
for (let i = 0; i < objects.length; i++) {
let obj = objects[i],
dist = this.getDist(you.x, you.y, obj.x, obj.y);
if (dist < closestDist) {
closestObj = obj;
closestDist = dist;
}
}
return closestObj;
},
'init': function () {
var binds = this.keybinds;
document.body.addEventListener('keydown', (e) => {
for (let i = 0; i < binds.length; i++) {
let data = binds[i];
if ((e.which || e.keyCode) == data.code) {
data.on = !data.on;
data.func();
}
}
});
}
}
w.drewsnow.init();
})(window);
var skins = [
{
'name': 'Default',
'id': 0
}, {
'name': 'Triangles',
'id': 1
}, {
'name': 'Circle',
'id': 2
}, {
'name': 'Checkered',
'id': 3
});