Skip to content

Instantly share code, notes, and snippets.

@xbeat
Created April 25, 2018 15:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xbeat/34dcb5a701fa97ea547f502283490f93 to your computer and use it in GitHub Desktop.
Save xbeat/34dcb5a701fa97ea547f502283490f93 to your computer and use it in GitHub Desktop.
Pong 3D
<canvas id="floor-texture" width="512" height="256"></canvas>
<div id="score-left"></div>
<div id="score-right"></div>
<div id="how">Position mouse left and right over game area to control paddles / bats</div>
<div id="btn-container">
<button id="btn-go-fs" class="btn-fs" onclick="requestFullscreen()">go fullscreen</button>
<button id="btn-exit-fs" class="btn-fs" onclick="exitFullscreen()">exit fullscreen</button>
</div>
<div id="debug-container">
<div id="out"></div>
</div>
// Author: darcey@aftc.io
// Libs: aftc.js & three
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var Application = function () {
var args = {};
var params = {
dom: {
container: false,
canvas1:false,
},
ctx1:false,
textures: {
floor: false,
room: false,
},
materials: {
floor: false,
room: false,
},
meshes: {
floor: false,
room: false,
},
canvas1HalfW:0, canvas1HalfH:0,
cX: 0, cY: 0, // Cneter
sX: 0, sY: 0, // Start
pX: 0, pY: 0, // Previous
tX: 0, tY: 0, // Target
w: 0, h: 0,
x: 0, y: 0,
t: 0,
leftScore: 0,
rightScore: 0,
running: false,
batPosYPercent: false,
batPosZ: false,
BALLDIAMETER: 1,
HEIGHT: 1,
newBallX: 0,
newBallY: 0,
batLeftLowerZ: false,
batLeftUpperZ: false,
batRightLowerZ: false,
batRightUpperZ: false,
leftCollisionPoint: false,
rightCollisionPoint: false,
};
// constructor
function init() {
if (isMobile()) {
// setupGame();
} else {
var opener = new Audio("https://dev.aftc.io/assets/sounds/shall_we_play_a_game.mp3");
// opener.addEventListener("ended",setupGame);
opener.play();
}
html("v1", "html(\"v1\",str)");
html("v2", "html(\"v2\",str)");
html("v3", "html(\"v3\",str)");
html("v4", "html(\"v4\",str)");
params.dom.container = getElementById("container");
//params.dom.container.getBoundingClientRect().width;
// params.w = Math.round(parseFloat(getComputedStyle(params.dom.container).width));
// params.h = Math.round(parseFloat(getComputedStyle(params.dom.container).height));
params.w = window.innerWidth;
params.h = window.innerHeight;
params.cX = params.w / 2;
params.cY = params.h / 2;
params.dom.canvas1 = getElementById("floor-texture");
params.ctx1 = params.dom.canvas1.getContext("2d");
params.canvas1HalfW = params.dom.canvas1.width / 2;
params.canvas1HalfH = params.dom.canvas1.height / 2;
setupScene();
}
function updateFloorTexture(){
html("score-right", params.rightScore);
html("score-left", params.leftScore);
params.ctx1.fillStyle = "#232323";
params.ctx1.fillRect(0, 0, params.dom.canvas1.width, params.dom.canvas1.height);
params.ctx1.beginPath();
params.ctx1.setLineDash([15, 15]);
params.ctx1.moveTo(params.canvas1HalfW, 0);
params.ctx1.lineTo(params.canvas1HalfW, params.dom.canvas1.height);
params.ctx1.strokeStyle = "RGBA(255,255,255,0.5)";
params.ctx1.lineWidth = 10;
params.ctx1.stroke();
params.ctx1.font = '100pt VT323';
params.ctx1.fillStyle = "RGBA(255,255,255,0.9)";
// Classic pong score positions
// params.ctx1.fillText(params.leftScore, (params.canvas1HalfW-76), 50);
// params.ctx1.fillText(params.rightScore, (params.canvas1HalfW+30), 50);
params.ctx1.fillText(params.leftScore, 60, 120);
params.ctx1.fillText(params.rightScore, 320, 120);
if (params.meshes.floor){
params.textures.floor = new THREE.Texture(params.dom.canvas1);
params.textures.floor.needsUpdate = true;
params.materials.floor.map = params.textures.floor;
}
if (params.shader){
if (params.shader.renderToScreen){
params.shader.renderToScreen = false;
} else {
params.shader.renderToScreen = true;
}
}
}
function setupScene(){
if (!Detector.webgl) Detector.addGetWebGLMessage();
params.scene = new THREE.Scene();
params.renderer = new THREE.WebGLRenderer({ antialias: true });
params.renderer.setPixelRatio(window.devicePixelRatio);
params.renderer.setSize(params.w, params.h);
params.renderer.setClearColor("#0C7CA5", 0);
document.body.appendChild(params.renderer.domElement);
// camera
params.camera = new THREE.PerspectiveCamera(60, params.w / params.h, 1, 5000);
params.camera.position.set(2, 8, 10);
params.scene.add(params.camera);
// controls
params.controls = new THREE.OrbitControls(params.camera, params.renderer.domElement);
// params.controls.minDistance = 5;
// params.controls.maxDistance = 10;
params.controls.maxPolarAngle = Math.PI / 2;
// stats
// params.stats = new Stats()
// document.body.appendChild(params.stats.dom);
// lights
params.scene.add(new THREE.AmbientLight(0x222222));
// params.light = new THREE.PointLight( 0xffffff, 1 );
// params.camera.add( params.light );
var light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(75, 75, 50);
light.castShadow = true;
var dLight = 200;
var sLight = dLight * 0.25;
light.shadow.camera.left = -sLight;
light.shadow.camera.right = sLight;
light.shadow.camera.top = sLight;
light.shadow.camera.bottom = -sLight;
light.shadow.camera.near = dLight / 30;
light.shadow.camera.far = dLight;
light.shadow.mapSize.x = 1024 * 2;
light.shadow.mapSize.y = 1024 * 2;
params.scene.add(light);
// helper
// params.scene.add( new THREE.AxesHelper( 5 ) );
// scene
// params.group = new THREE.Group();
// params.scene.add(params.group);
updateFloorTexture();
params.textures.floor = new THREE.Texture(params.dom.canvas1);
params.textures.floor.needsUpdate = true;
params.materials.floor = new THREE.MeshLambertMaterial({
// color: 0x333333,
map: params.textures.floor
});
var matWall = new THREE.MeshLambertMaterial({
color: 0xffffff,
});
var matBat = new THREE.MeshLambertMaterial({
color: 0x00FF00,
});
var ballMat = new THREE.MeshLambertMaterial({
color: 0xFFFF00,
});
params.gameW = 70;
params.gameH = 30;
// Floor
var floorGeom = new THREE.PlaneGeometry(params.gameW, params.gameH);
params.meshes.floor = new THREE.Mesh(floorGeom, params.materials.floor);
params.meshes.floor.rotation.x = degToRad(-90);
params.scene.add(params.meshes.floor);
// Walls
var topWallGeom = new THREE.BoxGeometry(params.gameW-0.5, 1, 1);
var topWall = new THREE.Mesh(topWallGeom, matWall);
topWall.position.x = 0;
topWall.position.y = 0.5;
topWall.position.z = -(params.gameH / 2);
params.scene.add(topWall);
var btmWall = new THREE.Mesh(topWallGeom, matWall);
btmWall.position.x = 0;
btmWall.position.y = 0.5;
btmWall.position.z = (params.gameH / 2);
params.scene.add(btmWall);
// bats
var batGeom = new THREE.BoxGeometry(0.5, 1, 5);
params.batLeft = new THREE.Mesh(batGeom, matBat);
params.batLeft.position.x = -(params.gameW / 2);
params.batLeft.position.y = 0.5;
params.batLeft.position.z = 0;
params.scene.add(params.batLeft);
params.batRight = new THREE.Mesh(batGeom, matBat);
params.batRight.position.x = (params.gameW / 2);
params.batRight.position.y = 0.5;
params.batRight.position.z = 0;
params.scene.add(params.batRight);
var ballGeom = new THREE.BoxGeometry(0.5, 0.5, 0.5);
params.ball = new THREE.Mesh(ballGeom, ballMat);
params.ball.position.y = 0.5;
params.scene.add(params.ball);
params.ballX = params.sX;
params.ballY = params.sY;
params.ballVx = -0.2;
params.ballVy = 0.1;
params.upperLim = (params.gameH / 2) - 0.5;
params.lowerLim = -params.upperLim;
params.mX = 0;
params.mY = 0;
document.body.addEventListener("mousemove", setMouseCoords);
window.addEventListener('resize', resizeHandler, false);
// postprocessing
params.composer = new THREE.EffectComposer( params.renderer );
params.composer.addPass( new THREE.RenderPass( params.scene, params.camera ) );
params.shader = new THREE.FilmPass( 0.35, 0.5, 2048, true );
params.shader.renderToScreen = true;
params.composer.addPass( params.shader );
var texture = new THREE.Texture();
var manager = new THREE.LoadingManager();
manager.onProgress = function (item, loaded, total) {
// console.log(item, loaded, total);
};
var onProgress = function (xhr) {
if (xhr.lengthComputable) {
var percentComplete = xhr.loaded / xhr.total * 100;
console.log(Math.round(percentComplete, 2) + '% downloaded');
}
};
var onError = function (xhr) { };
function imgLoadedHandler(image) {
texture.image = image;
texture.needsUpdate = true;
}
var loader = new THREE.ImageLoader(manager);
loader.load("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAEACAIAAACiR5NzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNCMTIxOTBGNDgwNTExRThBNjIwRkM2NkIwOERBRkU2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNCMTIxOTEwNDgwNTExRThBNjIwRkM2NkIwOERBRkU2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Q0IxMjE5MEQ0ODA1MTFFOEE2MjBGQzY2QjA4REFGRTYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Q0IxMjE5MEU0ODA1MTFFOEE2MjBGQzY2QjA4REFGRTYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6tb4okAACAGElEQVR42uyd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", imgLoadedHandler);
// flip textures
texture.wrapS = THREE.RepeatWrapping;
texture.repeat.x = - 1;
// room
params.materials.room = new THREE.MeshLambertMaterial({
color: 0x003399,
// receiveShadow:true,
// castShadow:true
// opacity: 1,
// transparent: false
side: THREE.BackSide,
map: texture
});
var roomGeom = new THREE.BoxGeometry(200, 40, 200);
params.meshes.room = new THREE.Mesh(roomGeom, params.materials.room);
params.meshes.room.position.x = 0;
params.meshes.room.position.y = 10;
params.meshes.room.position.z = 0;
params.scene.add(params.meshes.room);
// Animate and Render
animate();
}
// - - - - - - - - - - - - - - - - -
function setMouseCoords(e) {
// params.mX = e.clientX-params.dom.container.offsetLeft;
// params.mY = e.clientY-params.dom.container.offsetTop;
params.mX = e.clientX;
params.mY = e.clientY;
}
function getDirection() {
}
function getBatLeftY() {
return params.batLeft.z;
}
function getBatRightY() {
return params.batRight.z;
}
function animate() {
// Position the bats
params.batPosYPercent = Math.floor((100 / params.w) * (Math.abs(params.mX)));
params.batPosZ = -15 + (30 / 100) * params.batPosYPercent;
params.batLeft.position.z = params.batPosZ;
params.batRight.position.z = -params.batPosZ;
params.newBallX = params.ballX + params.ballVx * 1;
params.newBallY = params.ballY + params.ballVy * 1;
// Top and bottom edges, simply bounce
if (params.newBallY < params.lowerLim) {
params.ballVy = -params.ballVy;
params.newBallY = params.ballY + params.ballVy * 1;
playSound("wall");
} else if (params.newBallY > params.upperLim) {
params.ballVy = -params.ballVy;
params.newBallY = params.ballY + params.ballVy * 1;
playSound("wall");
}
// Left paddle (paddle1)
params.batLeftLowerZ = params.batLeft.position.z - 3;
params.batLeftUpperZ = params.batLeft.position.z + 3
params.batRightLowerZ = params.batRight.position.z - 3;
params.batRightUpperZ = params.batRight.position.z + 3
params.leftCollisionPoint = -(params.gameW / 2) + 0.5;
params.rightCollisionPoint = -params.leftCollisionPoint;
var reset = false;
if (params.newBallX < params.leftCollisionPoint) {
if (params.newBallY >= params.batLeftLowerZ && params.newBallY <= params.batLeftUpperZ) {
params.ballVx = -params.ballVx;
params.newBallX = params.ballX + params.ballVx * 1;
playSound("bat");
} else {
playSound("fail");
params.rightScore++;
updateFloorTexture();
params.newBallX = params.sX;
params.newBallY = params.sY;
restart();
reset = true;
}
} else if (params.newBallX > params.rightCollisionPoint) {
if (params.newBallY >= params.batRightLowerZ && params.newBallY <= params.batRightUpperZ) {
params.ballVx = -params.ballVx;
params.newBallX = params.ballX + params.ballVx * 1;
playSound("bat");
} else {
playSound("fail");
params.leftScore++;
updateFloorTexture();
restart();
reset = true;
}
}
if (!reset) {
params.ballX = params.newBallX;
params.ballY = params.newBallY;
params.ball.position.x = params.newBallX;
params.ball.position.z = params.newBallY;
// speed up!
params.ballVx *= 1.001;
if (params.ballVy > 0) {
params.ballVy *= 1.0001;
}
// Make the camera more interesting
// left target -36 9 12
// right target 36 9 12
params.camXLim = 42;
params.camXasPercent = (100 / (params.gameW / 2)) * params.newBallX; // -100 to 100
// html("out",params.camXasPercent);
params.camRange = 10;
params.camX = (params.camRange / 10) * params.camXasPercent;
// html("out",camX);
if (params.camX > params.camXLim) {
params.camX = params.camXLim;
} else if (params.camX < -params.camXLim) {
params.camX = -params.camXLim;
}
params.camera.position.x = params.camX;
params.camera.position.y = 8;
params.camera.position.z = 16;
params.camera.lookAt(params.ball.position);
}
params.ball.rotation.z -= (params.ballVx / 3);
params.ball.rotation.x -= (params.ballVx / 3);
// if (params.ballVx > 0){
// params.ball.rotation.z += params.ballVx;
// } else {
// params.ball.rotation.z += params.ballVx;
// }
requestAnimationFrame(animate);
render();
}
// - - - - - - - - - - - - - - - - -
function playSound(name) {
var url;
var error = false;
switch (name) {
case "wall":
url = "https://dev.aftc.io/assets/sounds/pong.mp3"
break;
case "bat":
url = "https://dev.aftc.io/assets/sounds/pong2.mp3"
break;
case "fail":
url = "https://dev.aftc.io/assets/sounds/fail_01.mp3"
break;
default:
error = true;
break;
}
if (!error) {
var s = new Audio(url);
s.play();
}
}
function render() {
// var msg = "x:" + params.camera.position.x.toFixed(1);
// msg += " y:" + params.camera.position.y.toFixed(1);
// msg += " z:" + params.camera.position.z.toFixed(1);
// html("v1",msg);
// params.stats.update();
if (params.shader.renderToScreen){
params.composer.render();
} else {
params.renderer.render(params.scene, params.camera);
}
}
// - - - - - - - - - - - - - - - - -
function resizeHandler() {
params.w = window.innerWidth;
params.h = window.innerHeight;
params.camera.aspect = window.innerWidth / window.innerHeight;
params.camera.updateProjectionMatrix();
params.renderer.setSize(window.innerWidth, window.innerHeight);
}
// - - - - - - - - - - - - - - - - -
function start() {
log("Application.start()");
}
// - - - - - - - - - - - - - - - - -
function stop() {
log("Application.stop()");
}
// - - - - - - - - - - - - - - - - -
function restart() {
params.ballX = params.sX;
params.ballY = params.sY;
var velXmin = -getRandomFloat(0.1, 0.2);
var velXmax = getRandomFloat(0.1, 0.2);
var velYmin = -getRandomFloat(0.1, 0.15);
var velYmax = getRandomFloat(0.1, 0.15);
var velX = [velXmin, velXmax];
var velY = [velYmin, velYmax];
params.ballVx = velX[getRandomInt(0, 1)];
params.ballVy = velY[getRandomInt(0, 1)];
html("v4", "vx:" + params.ballVx.toFixed(3) + " vy:" + params.ballVy.toFixed(3));
}
// - - - - - - - - - - - - - - - - -
// Utils
// - - - - - - - - - - - - - - - - -
// Public
this.start = function () {
};
this.stop = function () {
};
this.reset = function () {
restart();
};
// - - - - - - - - - - - - - - - - -
// Constructor simulation
init();
// - - - - - - - - - - - - - - - - -
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Globals
var app1;
function start() {
app1.start();
}
function stop() {
app1.stop();
}
function reset() {
app1.reset();
}
function requestFullscreen() {
var ele = document.body;
getElementById("btn-go-fs").style.display = "none";
getElementById("btn-exit-fs").style.display = "inline-block";
if (ele.requestFullscreen) {
ele.requestFullscreen();
} else if (ele.webkitRequestFullscreen) {
ele.webkitRequestFullscreen();
} else if (ele.mozRequestFullScreen) {
ele.mozRequestFullScreen();
} else if (ele.msRequestFullscreen) {
ele.msRequestFullscreen();
} else {
console.log('Fullscreen API is not supported.');
}
};
function exitFullscreen() {
getElementById("btn-go-fs").style.display = "inline-block";
getElementById("btn-exit-fs").style.display = "none";
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else {
console.log('Fullscreen API is not supported.');
}
};
function setupGame() {
app1 = new Application();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Document Ready
onReady(function () {
logTo("out");
log("Darcey@AFTC.io");
log("<span style='color:#FFCC00'>Position mouse left and right over game area to control paddles / bats</a>");
getElementById("btn-go-fs").style.display = "inline-block";
getElementById("btn-exit-fs").style.display = "none";
app1 = new Application();
});
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<script src="https://cdn.jsdelivr.net/npm/aftc.js@1.5.12/dist/aftc.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenMax.min.js"></script>
<script src="https://threejs.org/examples/js/Detector.js"></script>
<script src="https://threejs.org/examples/js/libs/stats.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/91/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://threejs.org/examples/js/loaders/OBJLoader.js"></script>
<script src="https://threejs.org/examples/js/shaders/CopyShader.js"></script>
<script src="https://threejs.org/examples/js/shaders/FilmShader.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/EffectComposer.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/RenderPass.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/MaskPass.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/ShaderPass.js"></script>
<script src="https://threejs.org/examples/js/postprocessing/FilmPass.js"></script>
@import url(https://fonts.googleapis.com/css?family=VT323);
/* Generics */
body {
font-family: Arial;
font-size: 12px;
background: #000000;
color: #ffffff;
cursor: corshair;
background: #000000 url("https://dev.aftc.io/assets/img/pong_bg.jpg");
background-size: cover;
background-repeat: no-repeat;
}
.btn-fs {
background: #993300;
color: #FFFFFF;
border: none;
}
.btn-fs:hover {
background: #FFCC00;
color: #000000;
}
a {
color: #FFCC00;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
button {
cursor: pointer;
}
.outer {
width: 100%;
}
.inner {
width: 760px;
margin: auto;
}
.flex-row {
display: flex;
flex-wrap: nowrap;
justify-content: center;
}
/* Debug */
#debug-container {
position: absolute;
width: 100%;
left: 0;
bottom: 20px;
background: #161616;
opacity: 0.3;
}
#debug-container:hover {
opacity: 0.7;
}
#debug-container .btn {
display: block;
width: 23.5%;
margin: 2px;
padding: 3px;
box-sizing: border-box;
}
#debug-container .btn button {
width: 100%;
font-size: 12px;
font-weight: bold;
background: #cccccc;
}
#debug-container .btn button:hover {
width: 100%;
background: #ffffff;
}
#debug-container .in {
display: block;
width: 23.5%;
margin: 2px;
padding: 3px;
box-sizing: border-box;
}
#debug-container .in .input-label {
font-size: 12px;
}
#debug-container .in input {
width: 100%;
box-sizing: border-box;
}
#debug-container .out {
display: block;
width: 23.5%;
margin: 2px;
padding: 3px;
font-family: "courier";
font-size: 11px;
border: 1px solid #676767;
box-sizing: border-box;
}
#debug-container #out {
max-height: 200px;
overflow: auto;
margin: 10px 10px 20px 10px;
padding: 3px;
font-family: "courier";
font-size: 11px;
border: 1px solid #676767;
}
#debug-container .clear-debug {
display: block;
margin: 10px auto -7px auto;
font-size: 10px;
background: #999999;
color: #000000;
border: none;
outline: none;
}
#debug-container .clear-debug:hover {
background: #FFFFFF;
color: #000000;
}
#container {
position: relative;
width: 760px;
height: 400px;
border: 1px solid #1b2735;
cursor: crosshair;
}
#score-left {
z-index: 10;
position: absolute;
left: 60px;
top: 10px;
font-family: 'VT323', Courier, monospace !important;
font-size: 80px;
opacity: 0.4;
}
#score-right {
z-index: 10;
position: absolute;
right: 60px;
top: 10px;
font-family: 'VT323', Courier, monospace !important;
font-size: 80px;
opacity: 0.4;
}
#how {
z-index: 30;
position: absolute;
width: 100%;
left: 0;
top: 5px;
padding: 5px;
text-align: center;
color: #FFCC00;
opacity: 0.7;
text-transform: uppercase;
}
#floor-texture {
z-index: 1;
display: none;
z-index: 100;
position: absolute;
left: 5px;
top: 5px;
opacity: 0.7;
/* background: #FFCC00; */
}
#btn-container {
z-index: 100;
position: absolute;
left: 0;
top: 25px;
width: 100%;
text-align: center;
}
#btn-exit-fullscreen {
z-index: 100;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment