/* GLGE WebGL Graphics Engine Copyright (C)2009 Paul Brunt This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @fileOverview * @name glge_input.js * @author me@paulbrunt.co.uk */ (function(GLGE){ /** * @class Creates a heightmap for a region of the world based on an image. Originally created as a quick and easy collision detection. At least until we have a better physics implementation. * @deprecated not intended as a permanent addition * @param {string} imageURL The url of the image to generate the hightmap for * @param {number} imageWidth The width of the image * @param {number} imageHeight The height of the image * @param {number} x1 The lower X bound of the height map in world coords * @param {number} x2 The upper X bound of the height map in world coords * @param {number} y1 The lower Y bound of the height map in world coords * @param {number} y2 The upper Y bound of the height map in world coords * @param {number} z1 The lower Z bound of the height map in world coords * @param {number} z2 The upper Z bound of the height map in world coords */ GLGE.HeightMap=function(imageURL,imageWidth,imageHeight,x1,x2,y1,y2,z1,z2){ this.canvas=document.createElement("canvas"); this.context = this.canvas.getContext('2d'); this.canvas.width=imageWidth; this.canvas.height=imageHeight; this.minX=x1; this.maxX=x2; this.minY=y1; this.maxY=y2; this.minZ=z1; this.maxZ=z2; var image=new Image(); image.heightmap=this; image.onload=function(e){ this.heightmap.context.drawImage(this, 0, 0); this.heightmap.data=this.heightmap.context.getImageData(0,0,this.heightmap.canvas.width,this.heightmap.canvas.height).data; }; image.src=imageURL; } GLGE.HeightMap.prototype.canvas=null; GLGE.HeightMap.prototype.context=null; GLGE.HeightMap.prototype.minZ=null; GLGE.HeightMap.prototype.maxZ=null; GLGE.HeightMap.prototype.minY=null; GLGE.HeightMap.prototype.maxY=null; GLGE.HeightMap.prototype.minX=null; GLGE.HeightMap.prototype.maxX=null; GLGE.HeightMap.prototype.data=null; /** * Gets the pixel height at the specified image coords * @param {number} x the x image coord * @param {number} y the y image coord * @private */ GLGE.HeightMap.prototype.getPixelAt=function(x,y){ if(this.data){ return (this.data[(this.canvas.width*y+x)*4])/255*(this.maxZ-this.minZ); } else { return 0; } } /** * Function to get he height as specified x, y world coords * @param {number} x the x world coord * @param {number} y the y world coord * @returns {number} the height of the level in world units */ GLGE.HeightMap.prototype.getHeightAt=function(x,y){ var imgX=Math.round((x-this.minX)/(this.maxX-this.minX)*this.canvas.width); var imgY=Math.round((y-this.minY)/(this.maxY-this.minY)*this.canvas.height); return this.getPixelAt(imgX,imgY); } /** * @class Monitors keyboard input for use in render loops */ GLGE.KeyInput=function(){ if(!document.keyStates) document.keyStates=[]; document.addEventListener("keydown",this.onKeyDown,false); document.addEventListener("keyup",this.onKeyUp,false); } /** * Tests if a key is pressed * @param {number} the keycode to check * @returns {boolean} key returns true if the key is being pressed */ GLGE.KeyInput.prototype.isKeyPressed=function(key){ if(document.keyStates[key]) return true; else return false; }; /** * document keydown event used to monitor the key states * @param {event} e the event being fired * @private */ GLGE.KeyInput.prototype.onKeyDown=function(e){ document.keyStates[e.keyCode]=true; }; /** * Document keyup event used to monitor the key states * @param {event} e the event being fired * @private */ GLGE.KeyInput.prototype.onKeyUp=function(e){ document.keyStates[e.keyCode]=false; }; /** * @class Monitors mouse input for use in render loops */ GLGE.MouseInput=function(element){ this.element=element; this.element.mouseX=0; this.element.mouseY=0; if(!this.element.buttonState) this.element.buttonState=[]; element.addEventListener("mousemove",this.onMouseMove,false); element.addEventListener("mousedown",this.onMouseDown,false); element.addEventListener("mouseup",this.onMouseUp,false); } GLGE.MouseInput.prototype.element=null; /** * Elements mousemove event used to monitor the mouse states * @param {event} e the event being fired * @private */ GLGE.MouseInput.prototype.onMouseMove=function(e){ this.mouseX=e.clientX; this.mouseY=e.clientY; } /** * Elements mousedown event used to monitor the mouse states * @param {event} e the event being fired * @private */ GLGE.MouseInput.prototype.onMouseDown=function(e){ this.buttonState[e.button]=true; } /** * Elements mouseup event used to monitor the mouse states * @param {event} e the event being fired * @private */ GLGE.MouseInput.prototype.onMouseUp=function(e){ this.buttonState[e.button]=false; } /** * Tests if a mouse button is pressed * @param {number} button the button to check * @returns {boolean} returns true if the button is being pressed */ GLGE.MouseInput.prototype.isButtonDown=function(button){ if(this.element.buttonState[button]) return true; else return false; } /** * Gets the mouse coords * @returns {object} the current mouse coors */ GLGE.MouseInput.prototype.getMousePosition=function(){ return {x:this.element.mouseX,y:this.element.mouseY} } /** * @constant * @description Enumeration for the left mouse button */ GLGE.MI_LEFT=0; /** * @constant * @description Enumeration for the middle mouse button */ GLGE.MI_MIDDLE=1; /** * @constant * @description Enumeration for the right mouse button */ GLGE.MI_RIGHT=2; /** * @constant * @description Enumeration for the backspace key */ GLGE.KI_BACKSPACE=8; /** * @constant * @description Enumeration for the tab key */ GLGE.KI_TAB=9; /** * @constant * @description Enumeration for the enter key */ GLGE.KI_ENTER=13; /** * @constant * @description Enumeration for the shift key */ GLGE.KI_SHIFT=16; /** * @constant * @description Enumeration for the ctrl key */ GLGE.KI_CTRL=17; /** * @constant * @description Enumeration for the alt key */ GLGE.KI_ALT=18; /** * @constant * @description Enumeration for the pause/break key */ GLGE.KI_PAUSE_BREAK=19; /** * @constant * @description Enumeration for the caps lock key */ GLGE.KI_CAPS_LOCK=20; /** * @constant * @description Enumeration for the escape key */ GLGE.KI_ESCAPE=27; /** * @constant * @description Enumeration for the page up key */ GLGE.KI_PAGE_UP=33; /** * @constant * @description Enumeration for the page down key */ GLGE.KI_PAGE_DOWN=34; /** * @constant * @description Enumeration for the end key */ GLGE.KI_END=35; /** * @constant * @description Enumeration for the home key */ GLGE.KI_HOME=36; /** * @constant * @description Enumeration for the left arrow key */ GLGE.KI_LEFT_ARROW=37; /** * @constant * @description Enumeration for the up arrow key */ GLGE.KI_UP_ARROW=38; /** * @constant * @description Enumeration for the right arrow key */ GLGE.KI_RIGHT_ARROW=39; /** * @constant * @description Enumeration for the down arrow key */ GLGE.KI_DOWN_ARROW=40; /** * @constant * @description Enumeration for the insert key */ GLGE.KI_INSERT=45; /** * @constant * @description Enumeration for the delete key */ GLGE.KI_DELETE=46; /** * @constant * @description Enumeration for the 0 key */ GLGE.KI_0=48; /** * @constant * @description Enumeration for the 1 key */ GLGE.KI_1=49; /** * @constant * @description Enumeration for the 2 key */ GLGE.KI_2=50; /** * @constant * @description Enumeration for the 3 key */ GLGE.KI_3=51; /** * @constant * @description Enumeration for the 4 key */ GLGE.KI_4=52; /** * @constant * @description Enumeration for the 5 key */ GLGE.KI_5=53; /** * @constant * @description Enumeration for the 6 key */ GLGE.KI_6=54; /** * @constant * @description Enumeration for the 7 key */ GLGE.KI_7=55; /** * @constant * @description Enumeration for the 8 key */ GLGE.KI_8=56; /** * @constant * @description Enumeration for the 9 key */ GLGE.KI_9=57; /** * @constant * @description Enumeration for the a key */ GLGE.KI_A=65; /** * @constant * @description Enumeration for the b key */ GLGE.KI_B=66; /** * @constant * @description Enumeration for the c key */ GLGE.KI_C=67; /** * @constant * @description Enumeration for the d key */ GLGE.KI_D=68; /** * @constant * @description Enumeration for the e key */ GLGE.KI_E=69; /** * @constant * @description Enumeration for the f key */ GLGE.KI_F=70; /** * @constant * @description Enumeration for the g key */ GLGE.KI_G=71; /** * @constant * @description Enumeration for the h key */ GLGE.KI_H=72; /** * @constant * @description Enumeration for the i key */ GLGE.KI_I=73; /** * @constant * @description Enumeration for the j key */ GLGE.KI_J=74; /** * @constant * @description Enumeration for the k key */ GLGE.KI_K=75; /** * @constant * @description Enumeration for the l key */ GLGE.KI_L=76; /** * @constant * @description Enumeration for the m key */ GLGE.KI_M=77; /** * @constant * @description Enumeration for the n key */ GLGE.KI_N=78; /** * @constant * @description Enumeration for the o key */ GLGE.KI_O=79; /** * @constant * @description Enumeration for the p key */ GLGE.KI_P=80; /** * @constant * @description Enumeration for the q key */ GLGE.KI_Q=81; /** * @constant * @description Enumeration for the r key */ GLGE.KI_R=82; /** * @constant * @description Enumeration for the s key */ GLGE.KI_S=83; /** * @constant * @description Enumeration for the t key */ GLGE.KI_T=84; /** * @constant * @description Enumeration for the u key */ GLGE.KI_U=85; /** * @constant * @description Enumeration for the v key */ GLGE.KI_V=86; /** * @constant * @description Enumeration for the w key */ GLGE.KI_W=87; /** * @constant * @description Enumeration for the x key */ GLGE.KI_X=88; /** * @constant * @description Enumeration for the y key */ GLGE.KI_Y=89; /** * @constant * @description Enumeration for the z key */ GLGE.KI_Z=90; /** * @constant * @description Enumeration for the left window key key */ GLGE.KI_LEFT_WINDOW_KEY=91; /** * @constant * @description Enumeration for the right window key key */ GLGE.KI_RIGHT_WINDOW_KEY=92; /** * @constant * @description Enumeration for the select key key */ GLGE.KI_SELECT_KEY=93; /** * @constant * @description Enumeration for the numpad 0 key */ GLGE.KI_NUMPAD_0=96; /** * @constant * @description Enumeration for the numpad 1 key */ GLGE.KI_NUMPAD_1=97; /** * @constant * @description Enumeration for the numpad 2 key */ GLGE.KI_NUMPAD_2=98; /** * @constant * @description Enumeration for the numpad 3 key */ GLGE.KI_NUMPAD_3=99; /** * @constant * @description Enumeration for the numpad 4 key */ GLGE.KI_NUMPAD_4=100; /** * @constant * @description Enumeration for the numpad 5 key */ GLGE.KI_NUMPAD_5=101; /** * @constant * @description Enumeration for the numpad 6 key */ GLGE.KI_NUMPAD_6=102; /** * @constant * @description Enumeration for the numpad 7 key */ GLGE.KI_NUMPAD_7=103; /** * @constant * @description Enumeration for the numpad 8 key */ GLGE.KI_NUMPAD_8=104; /** * @constant * @description Enumeration for the numpad 9 key */ GLGE.KI_NUMPAD_9=105; /** * @constant * @description Enumeration for the multiply key */ GLGE.KI_MULTIPLY=106; /** * @constant * @description Enumeration for the add key */ GLGE.KI_ADD=107; /** * @constant * @description Enumeration for the subtract key */ GLGE.KI_SUBTRACT=109; /** * @constant * @description Enumeration for the decimal point key */ GLGE.KI_DECIMAL_POINT=110; /** * @constant * @description Enumeration for the divide key */ GLGE.KI_DIVIDE=111; /** * @constant * @description Enumeration for the f1 key */ GLGE.KI_F1=112; /** * @constant * @description Enumeration for the f2 key */ GLGE.KI_F2=113; /** * @constant * @description Enumeration for the f3 key */ GLGE.KI_F3=114; /** * @constant * @description Enumeration for the f4 key */ GLGE.KI_F4=115; /** * @constant * @description Enumeration for the f5 key */ GLGE.KI_F5=116; /** * @constant * @description Enumeration for the f6 key */ GLGE.KI_F6=117; /** * @constant * @description Enumeration for the f7 key */ GLGE.KI_F7=118; /** * @constant * @description Enumeration for the f8 key */ GLGE.KI_F8=119; /** * @constant * @description Enumeration for the f9 key */ GLGE.KI_F9=120; /** * @constant * @description Enumeration for the f10 key */ GLGE.KI_F10=121; /** * @constant * @description Enumeration for the f11 key */ GLGE.KI_F11=122; /** * @constant * @description Enumeration for the f12 key */ GLGE.KI_F12=123; /** * @constant * @description Enumeration for the num lock key */ GLGE.KI_NUM_LOCK=144; /** * @constant * @description Enumeration for the scroll lock key */ GLGE.KI_SCROLL_LOCK=145; /** * @constant * @description Enumeration for the semi-colon key */ GLGE.KI_SEMI_COLON=186; /** * @constant * @description Enumeration for the equal sign key */ GLGE.KI_EQUAL_SIGN=187; /** * @constant * @description Enumeration for the comma key */ GLGE.KI_COMMA=188; /** * @constant * @description Enumeration for the dash key */ GLGE.KI_DASH=189; /** * @constant * @description Enumeration for the period key */ GLGE.KI_PERIOD=190; /** * @constant * @description Enumeration for the forward slash key */ GLGE.KI_FORWARD_SLASH=191; /** * @constant * @description Enumeration for the grave accent key */ GLGE.KI_GRAVE_ACCENT=192; /** * @constant * @description Enumeration for the open bracket key */ GLGE.KI_OPEN_BRACKET=219; /** * @constant * @description Enumeration for the back slash key */ GLGE.KI_BACK_SLASH=220; /** * @constant * @description Enumeration for the close braket key */ GLGE.KI_CLOSE_BRAKET=221; /** * @constant * @description Enumeration for the single quote key */ GLGE.KI_SINGLE_QUOTE=222; })(GLGE); /* junk code var canvas=document.createElement("canvas"); canvas.height=300; canvas.width=300; //var canvas=document.getElementById("canvas"); var canvasContext = canvas.getContext('2d'); var map=new Image(); map.onload=function(e){ canvasContext.drawImage(this, 0, 0); document.getElementById('test').src=canvas.toDataURL("image/png"); } map.src="http://ecom.armourhome.co.uk/ecom/themes/q2radio/images/q2background.jpg"; */