Lucas Kent e39465ad2f Changes to be committed:
new file:   Files/flashplayer_32_sa.exe
	new file:   favicon.ico
	new file:   globe.gif
	new file:   imgs/download.png
	new file:   imgs/zuck.jpg
	new file:   index.html
	new file:   other.ico
	new file:   script.js
	new file:   site.webmanifest
	new file:   sitemap.html
	new file:   styles/backround.css
	new file:   styles/border.css
	new file:   styles/fonts/Titillium_Web/OFL.txt
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf
	new file:   styles/fonts/webfontkit-20221027-163353/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-demo.html
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff2
	new file:   styles/fonts/webfontkit-20221027-165950/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-demo.html
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff2
	new file:   styles/style.css
	new file:   tools/2048/.gitignore
	new file:   tools/2048/.jshintrc
	new file:   tools/2048/CONTRIBUTING.md
	new file:   tools/2048/LICENSE.txt
	new file:   tools/2048/README.md
	new file:   tools/2048/Rakefile
	new file:   tools/2048/favicon.ico
	new file:   tools/2048/index.html
	new file:   tools/2048/js/animframe_polyfill.js
	new file:   tools/2048/js/application.js
	new file:   tools/2048/js/bind_polyfill.js
	new file:   tools/2048/js/classlist_polyfill.js
	new file:   tools/2048/js/game_manager.js
	new file:   tools/2048/js/grid.js
	new file:   tools/2048/js/html_actuator.js
	new file:   tools/2048/js/keyboard_input_manager.js
	new file:   tools/2048/js/local_storage_manager.js
	new file:   tools/2048/js/tile.js
    new file:   tools/2048/meta/apple-touch-icon.png
	new file:   tools/webretro/cores/neocd_libretro.js
	new file:   tools/webretro/cores/neocd_libretro.wasm
	new file:   tools/webretro/cores/nestopia_libretro.js
	new file:   tools/webretro/cores/nestopia_libretro.wasm
	new file:   tools/webretro/cores/o2em_libretro.js
	new file:   tools/webretro/cores/o2em_libretro.wasm
	new file:   tools/webretro/cores/opera_libretro.js
	new file:   tools/webretro/cores/opera_libretro.wasm
2022-11-02 08:40:01 -04:00

193 lines
4.7 KiB
CoffeeScript

###
Various useful methods
@class bkcore.Utils
@author Thibaut 'BKcore' Despoulain <http://bkcore.com>
###
class Utils
###
Creates a bkcore.threejs.Shaders["normalV"|"normal"] material
with given parameters
###
@createNormalMaterial = (opts)->
opts ?= {}
opts.ambient ?= 0x444444
opts.normalScale ?= 1.0
opts.reflectivity ?= 0.9
opts.shininess ?= 42
opts.metal ?= false
shadername = if opts.perPixel then "normalV" else "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?
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
###
@projectOnScreen: (object, camera)->
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
###
@URLParameters: null
@getURLParameter: (name)->
if !@URLParameters?
@URLParameters = {}
window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, (m, key, val)=>
@URLParameters[key] = val
)
return @URLParameters[name]
###
Get top offset of an element
@param obj HTMLElement
###
@getOffsetTop: (obj)->
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
###
@scrollTo: (id)->
window.scroll(0, @getOffsetTop(document.getElementById(id)))
###
Add or remove a class from an element
@param string id [description]
@param string cssclass [description]
@param bool active [description]
###
@updateClass: (id, cssclass, active)->
e = document.getElementById(id)
return unless e?
if active
e.classList.add(cssclass)
else
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]
###
@request: (url, postData, callback, data)->
XMLHttpFactories = [
()-> return new XMLHttpRequest()
()-> return new ActiveXObject("Msxml2.XMLHTTP")
()-> return new ActiveXObject("Msxml3.XMLHTTP")
()-> return new ActiveXObject("Microsoft.XMLHTTP")
]
createXMLHTTPObject = () ->
xmlhttp = false
for i in [0..XMLHttpFactories.length]
try
xmlhttp = XMLHttpFactories[i]()
catch e
continue
break
return xmlhttp
req = createXMLHTTPObject()
return unless req?
method = if postData? then "POST" else "GET"
qdata = "o=bk"
if data?
for i, val of data
qdata += "&"+i+"="+val
url += "?"+qdata if postData?
req.open(method,url,true)
if postData?
req.setRequestHeader('Content-type','application/x-www-form-urlencoded')
req.onreadystatechange = () ->
return unless req.readyState is 4
return unless req.status is 200 or req.status is 304
callback?(req)
req.send(qdata)
return req
###
Checks whether the device supports Touch input
###
@isTouchDevice: ()->
return ('ontouchstart' of window) or
(navigator.MaxTouchPoints > 0) or
(navigator.msMaxTouchPoints > 0)
###
Exports
@package bkcore
###
exports = exports ? @
exports.bkcore ||= {}
exports.bkcore.Utils = Utils