UNPKG

burnoutjs

Version:

2D game engine for manage collisions. Made with javascript and CSS Grid Layout.

2 lines (1 loc) 5.54 kB
var createMap=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:window).document.createElement("div");return n.style="\n display: grid;\n grid-template-columns: repeat("+t.cols+", "+r+"px);\n grid-template-rows: repeat("+t.rows+", "+r+"px);\n width: "+t.cols*r+"px;\n height: "+t.rows*r+"px;\n overflow: hidden;\n ",n},createCamera=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:window).document.createElement("div");return n.style="\n width: "+t.cols*r+"px;\n height: "+t.rows*r+"px;\n ",n},stringifyPosition=function(t){return"grid-area: \n "+t.rowStart+" / \n "+t.columnStart+" /\n "+t.rowEnd+" /\n "+t.columnEnd},createBlock=function(t){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:window).document.createElement("div");return r.classList.add(t.className),r.style=stringifyPosition(t.position),r},createAvatar=function(t){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:window).document.createElement("div");return r.classList.add(t.className),r.style=stringifyPosition(t.position),r},moveUp=function(t){return{rowStart:t.rowStart-1,columnStart:t.columnStart,rowEnd:t.rowEnd-1,columnEnd:t.columnEnd}},moveDown=function(t){return{rowStart:t.rowStart+1,columnStart:t.columnStart,rowEnd:t.rowEnd+1,columnEnd:t.columnEnd}},moveLeft=function(t){return{rowStart:t.rowStart,columnStart:t.columnStart-1,rowEnd:t.rowEnd,columnEnd:t.columnEnd-1}},moveRight=function(t){return{rowStart:t.rowStart,columnStart:t.columnStart+1,rowEnd:t.rowEnd,columnEnd:t.columnEnd+1}},wasBumped=function(t,r){var n=void 0;return{result:r.some(function(r){var e=t.columnStart===r.columnStart,o=t.columnEnd===r.columnEnd,i=t.rowStart===r.rowStart,a=t.rowEnd===r.rowEnd;return n=r,e&&o&&(i&&a)}),block:n}},stringifyTranslate=function(t){return"transform: translate("+t.x+"px, "+t.y+"px);"},controls=function(t,r,n,e,o){var i={currentAvatarPosition:t.startPosition,currentAvatarSide:null,currentCameraPosition:{x:0,y:0}};return{up:function(){t.side&&!("up"===i.currentAvatarSide)&&(t.ref.className=t.side.up,i.currentAvatarSide="up");var a=moveUp(i.currentAvatarPosition),s=wasBumped(a,n);if(s.result)return s.block.action&&s.block.action(s.block),!1;t.static&&(i.currentCameraPosition.y+=o,r.style=r.style.cssText+stringifyTranslate(i.currentCameraPosition)),t.ref.style=stringifyPosition(a),i.currentAvatarPosition=a;var c=wasBumped(a,e);return c.result&&c.block.action&&c.block.action(c.block),!0},down:function(){t.side&&!("down"===i.currentAvatarSide)&&(t.ref.className=t.side.down,i.currentAvatarSide="down");var a=moveDown(i.currentAvatarPosition),s=wasBumped(a,n);if(s.result)return s.block.action&&s.block.action(s.block),!1;t.static&&(i.currentCameraPosition.y-=o,r.style=r.style.cssText+stringifyTranslate(i.currentCameraPosition)),t.ref.style=stringifyPosition(a),i.currentAvatarPosition=a;var c=wasBumped(a,e);return c.result&&c.block.action&&c.block.action(c.block),!0},left:function(){t.side&&!("left"===i.currentAvatarSide)&&(t.ref.className=t.side.left,i.currentAvatarSide="left");var a=moveLeft(i.currentAvatarPosition),s=wasBumped(a,n);if(s.result)return s.block.action&&s.block.action(s.block),!1;t.static&&(i.currentCameraPosition.x-=o,r.style=r.style.cssText+stringifyTranslate(i.currentCameraPosition)),t.ref.style=stringifyPosition(a),i.currentAvatarPosition=a;var c=wasBumped(a,e);return c.result&&c.block.action&&c.block.action(c.block),!0},right:function(){t.side&&!("right"===i.currentAvatarSide)&&(t.ref.className=t.side.right,i.currentAvatarSide="right");var a=moveRight(i.currentAvatarPosition),s=wasBumped(a,n);if(s.result)return s.block.action&&s.block.action(s.block),!1;t.static&&(i.currentCameraPosition.x+=o,r.style=r.style.cssText+stringifyTranslate(i.currentCameraPosition)),t.ref.style=stringifyPosition(a),i.currentAvatarPosition=a;var c=wasBumped(a,e);return c.result&&c.block.action&&c.block.action(c.block),!0}}},burnout=function(){var t={mapRef:null,viewRef:null,blocksRefs:[],collisionBlocksPositions:[],overBlocksPositions:[],blockSize:null,avatar:{ref:null,startPosition:null,side:null,static:!0}};return{defineMap:function(r){var n=createMap(r.map,r.blockSize),e=createCamera(r.view,r.blockSize);r.developer&&(n.style.border="1px solid",e.style.border="1px solid red",e.style.overflow="visible"),e.appendChild(n),t.viewRef=e,t.mapRef=n,t.blockSize=r.blockSize},defineBlock:function(r){var n=createBlock(r);r.collision&&t.collisionBlocksPositions.push(r.position),r.over&&t.overBlocksPositions.push(r.position),t.blocksRefs.push(n)},defineAvatar:function(r){var n=createAvatar(r);t.avatar.ref=n,t.avatar.startPosition=r.position,t.avatar.side=r.side,t.avatar.static=r.static},renderMap:function(r){t.blocksRefs.forEach(function(r){t.mapRef.appendChild(r)}),t.mapRef.appendChild(t.avatar.ref),r.appendChild(t.viewRef)},defineControlsPlugin:function(r){if(!r)return console.error("Burnout: No plugin added in defineControls() method");r(controls(t.avatar,t.mapRef,t.collisionBlocksPositions,t.overBlocksPositions,t.blockSize))},getAvatar:function(){return t.avatar.ref},getMap:function(){return t.mapRef},getView:function(){return t.viewRef},getBlock:function(r){return t.blocksRefs.filter(function(t){return stringifyPosition(r).replace(/\s/g,"")==t.style.cssText.replace(/\s/g,"").replace(/\;/g,"")})[0]}}},burnout$1=burnout();export default burnout$1;