Файл: Space race/bkcore.coffee/Utils.js
Строк: 208
<?php
// Generated by CoffeeScript 1.7.1
/*
Various useful methods
@class bkcore.Utils
@author Thibaut 'BKcore' Despoulain <http://bkcore.com>
*/
(function() {
var Utils, exports;
Utils = (function() {
/*
Creates a bkcore.threejs.Shaders["normalV"|"normal"] material
with given parameters
*/
function Utils() {}
Utils.createNormalMaterial = function(opts) {
var material, parameters, shader, shadername, uniforms;
if (opts == null) {
opts = {};
}
if (opts.ambient == null) {
opts.ambient = 0x444444;
}
if (opts.normalScale == null) {
opts.normalScale = 1.0;
}
if (opts.reflectivity == null) {
opts.reflectivity = 0.9;
}
if (opts.shininess == null) {
opts.shininess = 42;
}
if (opts.metal == null) {
opts.metal = false;
}
shadername = opts.perPixel ? "normalV" : "normal";
shader = bkcore.threejs.Shaders[shadername];
uniforms = THREE.UniformsUtils.clone(shader.uniforms);
uniforms["enableDiffuse"].value = true;
uniforms["enableSpecular"].value = true;
uniforms["enableReflection"].value = !!opts.cube;
uniforms["tNormal"].texture = opts.normal;
uniforms["tDiffuse"].texture = opts.diffuse;
uniforms["tSpecular"].texture = opts.specular;
uniforms["uAmbientColor"].value.setHex(opts.ambient);
uniforms["uAmbientColor"].value.convertGammaToLinear();
uniforms["uNormalScale"].value = opts.normalScale;
if (opts.cube != null) {
uniforms["tCube"].texture = opts.cube;
uniforms["uReflectivity"].value = opts.reflectivity;
}
parameters = {
fragmentShader: shader.fragmentShader,
vertexShader: shader.vertexShader,
uniforms: uniforms,
lights: true,
fog: false
};
material = new THREE.ShaderMaterial(parameters);
material.perPixel = true;
material.metal = opts.metal;
return material;
};
/*
Projects an object origin vector to screen using given camera
@param THREE.Object3D object The object which origin you want to project
@param THREE.Camera camera The camera of the projection
@return THEE.Vector3 Projected verctor
*/
Utils.projectOnScreen = function(object, camera) {
var c, lPos, mat;
mat = new THREE.Matrix4();
mat.multiply(camera.matrixWorldInverse, object.matrixWorld);
mat.multiply(camera.projectionMatrix, mat);
c = mat.n44;
lPos = new THREE.Vector3(mat.n14 / c, mat.n24 / c, mat.n34 / c);
return lPos.multiplyScalar(0.5).addScalar(0.5);
};
/*
Get an url parameter
@param String name Parameter slug
@return Mixed
*/
Utils.URLParameters = null;
Utils.getURLParameter = function(name) {
if (this.URLParameters == null) {
this.URLParameters = {};
window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, (function(_this) {
return function(m, key, val) {
return _this.URLParameters[key] = val;
};
})(this));
}
return this.URLParameters[name];
};
/*
Get top offset of an element
@param obj HTMLElement
*/
Utils.getOffsetTop = function(obj) {
var curtop;
curtop = obj.offsetTop;
if (obj.offsetParent) {
while (obj = obj.offsetParent) {
curtop += obj.offsetTop;
}
}
return curtop;
};
/*
Scrolls page to given element id
@param string id The ID of the element
*/
Utils.scrollTo = function(id) {
return window.scroll(0, this.getOffsetTop(document.getElementById(id)));
};
/*
Add or remove a class from an element
@param string id [description]
@param string cssclass [description]
@param bool active [description]
*/
Utils.updateClass = function(id, cssclass, active) {
var e;
e = document.getElementById(id);
if (e == null) {
return;
}
if (active) {
return e.classList.add(cssclass);
} else {
return e.classList.remove(cssclass);
}
};
/*
Performs an XMLHttpRequest
@param string url [description]
@param bool postData true = POST, false = GET
@param {Function} callback [description]
@param {Object} data [description]
*/
Utils.request = function(url, postData, callback, data) {
var XMLHttpFactories, createXMLHTTPObject, i, method, qdata, req, val;
XMLHttpFactories = [
function() {
return new XMLHttpRequest();
}, function() {
return new ActiveXObject("Msxml2.XMLHTTP");
}, function() {
return new ActiveXObject("Msxml3.XMLHTTP");
}, function() {
return new ActiveXObject("Microsoft.XMLHTTP");
}
];
createXMLHTTPObject = function() {
var e, i, xmlhttp, _i, _ref;
xmlhttp = false;
for (i = _i = 0, _ref = XMLHttpFactories.length; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
try {
xmlhttp = XMLHttpFactories[i]();
} catch (_error) {
e = _error;
continue;
}
break;
}
return xmlhttp;
};
req = createXMLHTTPObject();
if (req == null) {
return;
}
method = postData != null ? "POST" : "GET";
qdata = "o=bk";
if (data != null) {
for (i in data) {
val = data[i];
qdata += "&" + i + "=" + val;
if (postData != null) {
url += "?" + qdata;
}
}
}
req.open(method, url, true);
if (postData != null) {
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
req.onreadystatechange = function() {
if (req.readyState !== 4) {
return;
}
if (!(req.status === 200 || req.status === 304)) {
return;
}
return typeof callback === "function" ? callback(req) : void 0;
};
req.send(qdata);
return req;
};
/*
Checks whether the device supports Touch input
*/
Utils.isTouchDevice = function() {
return ('ontouchstart' in window) || (navigator.MaxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0);
};
return Utils;
})();
/*
Exports
@package bkcore
*/
exports = exports != null ? exports : this;
exports.bkcore || (exports.bkcore = {});
exports.bkcore.Utils = Utils;
}).call(this);
?>