Permalink
Browse files

move client stuff into voxel-client

  • Loading branch information...
1 parent 98b3439 commit 794f517c6988b92b95bbef76a663a1df31e11abb @maxogden committed Mar 13, 2013
View
5 Makefile
@@ -1,5 +0,0 @@
-all:
- browserify client.js > www/browserify-bundle.js
-
-watch:
- browserify client.js -o www/browserify-bundle.js --watch --debug
View
23 chat.js
@@ -1,23 +0,0 @@
-module.exports = function(name, emitter) {
- // Handle entering a command
- window.addEventListener('keyup', function(e) {
- if (e.keyCode !== 13) return;
- var el = document.getElementById('cmd');
- if (document.activeElement === el) {
- emitter.emit('message', {user: name, text: el.value})
- el.value = '';
- el.blur();
- } else {
- el.focus();
- }
- });
-
- emitter.on('message', showMessage)
-
- function showMessage(message) {
- var li = document.createElement('li')
- li.innerHTML = message.user + ': ' + message.text
- messages.appendChild(li)
- messages.scrollTop = messages.scrollHeight
- }
-}
View
181 client.js
@@ -1,181 +0,0 @@
-var url = require('url')
-var websocket = require('websocket-stream')
-var engine = require('voxel-engine')
-var duplexEmitter = require('duplex-emitter')
-var toolbar = require('toolbar')
-var randomName = require('./randomname')
-var crunch = require('voxel-crunch')
-var emitChat = require('./chat')
-var blockSelector = toolbar({el: '#tools'})
-var highlight = require('voxel-highlight')
-var skin = require('minecraft-skin')
-var player = require('voxel-player')
-var emitter, playerID
-var players = {}, lastProcessedSeq = 0
-var localInputs = [], connected = false, erase = true
-var currentMaterial = 1
-var lerpPercent = 0.1
-
-window.addEventListener('keydown', function (ev) {
- if (ev.keyCode === 'X'.charCodeAt(0)) erase = !erase
-})
-function ctrlToggle (ev) { erase = !ev.ctrlKey }
-window.addEventListener('keyup', ctrlToggle)
-window.addEventListener('keydown', ctrlToggle)
-
-var socket = websocket('ws://' + url.parse(window.location.href).host)
-socket.on('end', function() { connected = false })
-connectToGameServer(socket)
-
-function connectToGameServer(socket) {
-
- emitter = duplexEmitter(socket)
- connected = true
-
- emitter.on('id', function(id) {
- playerID = id
- })
-
- emitter.on('settings', function(settings) {
- settings.generateChunks = false
- window.game = game = createGame(settings)
- emitter.emit('created')
- emitter.on('chunk', function(encoded, chunk) {
- var voxels = crunch.decode(encoded, chunk.length)
- chunk.voxels = voxels
- game.showChunk(chunk)
- })
- })
-
- // fires when server sends us voxel edits
- emitter.on('set', function(pos, val) {
- game.setBlock(pos, val)
- })
-}
-
-function createGame(options) {
- options.controlsDisabled = false
- window.game = engine(options)
-
- function sendState() {
- if (!connected) return
- var state = {
- position: viking.yaw.position,
- rotation: {
- y: viking.yaw.rotation.y,
- x: viking.pitch.rotation.x
- }
- }
- emitter.emit('state', state)
- }
-
- var name = localStorage.getItem('name')
- if (!name) {
- name = randomName()
- localStorage.setItem('name', name)
- }
-
- game.controls.on('data', function(state) {
- var interacting = false
- Object.keys(state).map(function(control) {
- if (state[control] > 0) interacting = true
- })
- if (interacting) sendState()
- })
-
- emitChat(name, emitter)
-
- var container = document.querySelector('#container')
- game.appendTo(container)
- // rescue(game)
- var createPlayer = player(game)
- var viking = createPlayer('viking.png')
- viking.moveTo(options.startingPosition)
- viking.possess()
-
- highlight(game)
-
- blockSelector.on('select', function(material) {
- currentMaterial = +material
- })
-
- game.on('fire', function (target, state) {
- var vec = game.cameraVector()
- var pos = game.cameraPosition()
- var point = game.raycast(pos, vec, 100)
- if (!point) return
- var erase = !state.firealt && !state.alt
- var size = game.cubeSize
- if (erase) {
- emitter.emit('set', {x: point.x, y: point.y, z: point.z}, 0)
- } else {
- var newBlock = game.checkBlock(point)
- if (!newBlock) return
- var direction = game.camera.matrixWorld.multiplyVector3(new game.THREE.Vector3(0,0,-1))
- var diff = direction.subSelf(game.controls.target().yaw.position.clone()).normalize()
- diff.multiplySelf({ x: 1, y: 1, z: 1 })
- var p = point.clone().addSelf(diff)
- emitter.emit('set', p, currentMaterial)
- }
- })
-
- // setTimeout is because three.js seems to throw errors if you add stuff too soon
- setTimeout(function() {
- emitter.on('update', function(updates) {
- Object.keys(updates.positions).map(function(player) {
- var update = updates.positions[player]
- if (player === playerID) return onServerUpdate(update) // local player
- updatePlayerPosition(player, update) // other players
- })
- })
- }, 1000)
-
- emitter.on('leave', function(id) {
- if (!players[id]) return
- game.scene.remove(players[id].mesh)
- delete players[id]
- })
-
- return game
-}
-
-function onServerUpdate(update) {
- var pos = game.controls.target().yaw.position
- var distance = pos.distanceTo(update.position)
- // todo use server sent location
-}
-
-function lerpMe(position) {
- var to = new game.THREE.Vector3()
- to.copy(position)
- var from = game.controls.target().yaw.position
- from.copy(from.lerpSelf(to, lerpPercent))
-}
-
-function updatePlayerPosition(id, update) {
- var pos = update.position
- var player = players[id]
- if (!player) {
- var playerSkin = skin(game.THREE, 'viking.png')
- var playerMesh = playerSkin.mesh
- players[id] = playerSkin
- playerMesh.children[0].position.y = 10
- game.scene.add(playerMesh)
- }
- var playerSkin = window.playerSkin = players[id]
- var playerMesh = playerSkin.mesh.children[0]
- playerMesh.position.copy(pos, lerpPercent)
-
- var to = new game.THREE.Vector3()
- to.copy(pos)
- var from = playerMesh.position
- from.copy(from.lerpSelf(to, lerpPercent))
-
- playerMesh.position.y += 17
- playerMesh.rotation.y = update.rotation.y + (Math.PI / 2)
- playerSkin.head.rotation.z = scale(update.rotation.x, -1.5, 1.5, -0.75, 0.75)
-}
-
-function scale( x, fromLow, fromHigh, toLow, toHigh ) {
- return ( x - fromLow ) * ( toHigh - toLow ) / ( fromHigh - fromLow ) + toLow
-}
View
2 demo.js
@@ -1,2 +0,0 @@
-var multiplayer = require('voxel-multiplayer')
-var server = multiplayer.server()
View
15 randomname.js
@@ -1,15 +0,0 @@
-var names = ['alpha', 'space', 'beta', 'omega', 'zone', 'base', 'bass', 'centaur', 'official', 'free', 'fresh', 'freedom', 'power', 'synth', 'lazer', 'gamma', 'red', 'green', 'ultra', 'net', 'cafe', 'secret', 'open', 'track', 'wisdom', 'genghis', 'tron', 'grid', 'plus', 'maximum', 'pre', 'post', 'mid', 'pyramid', 'core', 'fast', 'dragon', 'wizard', 'yak', 'crystal', 'electric', 'rizzle', 'tiny', 'pantry', 'dry', 'bleeding', 'fruit', 'mower', 'whiskey', 'marble', 'cake', 'meat', 'donkey','wewo', 'banana', 'rooster', 'bear', 'bacon', 'moon', 'glitter', 'grandma', 'walrus', 'party', 'junk', 'crazy', 'turbo', 'hyper', 'mega', 'boss', 'dunk', 'pow', 'icy', 'bobo', 'pile', 'tater', 'wiz', 'gnarl', 'mix', 'pop', 'mustard', 'bizzler', 'fog', 'punch', 'planar']
-
-module.exports = function(len) {
- len = len || 2
- var name = ''
- while (len > 0) {
- name += randomName()
- len--
- }
- return name
-}
-
-function randomName() {
- return names[~~(Math.random() * names.length)]
-}
View
17 readme.md
@@ -4,17 +4,6 @@ multiplayer server for [voxel-engine](http://github.com/maxogden/voxel-engine)
**not done: work in progress**
-## get it to run:
-
-```
-cd voxel-server
-npm install
-make
-npm start
-```
-
-if you make any changes to client.js you have to run `make` and reload the browser. if you make changes to `server.js` you have to restart the server
-
## explanation
background research:
@@ -26,12 +15,6 @@ background research:
- http://gafferongames.com/game-physics/networked-physics/
- http://udn.epicgames.com/Three/NetworkingOverview.html
-### what is implemented
-
-multiplayer where the server mostly trusts the client and just filters out egregious hacking attemps (like teleportation). this simplifies the net code quite a bit
-
-if you want to check out the now defunct client side prediction version use https://github.com/maxogden/voxel-server/commit/61280b1a37d79a742fd7fbec4b8427ea820cb935
-
## license
BSD
View
77 www/index.html
@@ -1,77 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en">
- <head>
- <title>Voxels</title>
- <meta charset="utf-8">
- <style type="text/css">
- body {
- font-family: Monospace;
- font-size: 12px;
- background-color: #f0f0f0;
- margin: 0px;
- overflow: hidden;
- }
- #container {
- -moz-user-select: none;
- -webkit-user-select: none;
- user-select: none;
- }
- #crosshair {
- position: fixed;
- top: 50%;
- left: 50%;
- margin: -2px 0 0 -2px;
- width: 4px;
- height: 4px;
- background-color: #d00;
- opacity: 0.5;
- }
- #stats { bottom: 0px; right: 0px; }
- .logo {position: absolute; top: 5px; left: 5px; }
- .bar-tab { right: 33% !important; left: 33% !important; }
- .errorMessage { text-align: center; width: 200px; margin: 20px auto; }
- #chat { padding: 10px; height: 200px; width: 25%; position: absolute; bottom: 50px; left: 0; }
- #chat #messages { max-height: 153px; overflow: auto; }
- #cmdbox { position: absolute; bottom: 0; }
- #chat input { box-shadow: none; padding: 0px 10px; margin: 0; background: none; border: none; border-radius: 0; }
- input, input:focus { outline: none }
- </style>
- <link href="ratchet.css" media="screen" rel="stylesheet" type="text/css" />
- </head>
- <body>
- <img class="logo" src="logo-white.png">
- <div id="container"></div>
- <div id="crosshair"></div>
- <div id="chat">
- <ul id="messages"></ul>
- <div id="cmdbox">
- <input type="text" id="cmd" placeholder="Press <enter> to chat" /><br/>
- </div>
- </div>
- <nav class="bar-tab" id="tools" >
- <ul class="tab-inner">
- <li class="tab-item active">
- <img class="tab-icon" src="/textures/grass.png">
- <div class="tab-label" data-id="1">grass</div>
- </li>
- <li class="tab-item">
- <img class="tab-icon" src="/textures/brick.png">
- <div class="tab-label" data-id="2">brick</div>
- </li>
- <li class="tab-item">
- <img class="tab-icon" src="/textures/dirt.png">
- <div class="tab-label" data-id="3">dirt</div>
- </li>
- <li class="tab-item">
- <img class="tab-icon" src="/textures/obsidian.png">
- <div class="tab-label" data-id="4">obsidian</div>
- </li>
- <li class="tab-item">
- <img class="tab-icon" src="/textures/snow.png">
- <div class="tab-label" data-id="5">snow</div>
- </li>
- </ul>
- </nav>
- <script type="text/javascript" src="browserify-bundle.js"></script>
- </body>
-</html>
View
BIN www/logo-white.png
Deleted file not rendered
View
1,260 www/ratchet.css
@@ -1,1260 +0,0 @@
-/**
- * ==================================
- * Ratchet v1.0.0
- * Licensed under The MIT License
- * http://opensource.org/licenses/MIT
- * ==================================
- */
-
-/* Hard reset
--------------------------------------------------- */
-
-html,
-body,
-div,
-span,
-iframe,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-p,
-blockquote,
-pre,
-a,
-abbr,
-acronym,
-address,
-big,
-cite,
-code,
-del,
-dfn,
-em,
-img,
-ins,
-kbd,
-q,
-s,
-samp,
-small,
-strike,
-strong,
-sub,
-sup,
-tt,
-var,
-b,
-u,
-i,
-center,
-dl,
-dt,
-dd,
-ol,
-ul,
-li,
-fieldset,
-form,
-label,
-legend,
-table,
-caption,
-tbody,
-tfoot,
-thead,
-tr,
-th,
-td,
-article,
-aside,
-canvas,
-details,
-embed,
-figure,
-figcaption,
-footer,
-header,
-hgroup,
-menu,
-nav,
-output,
-section,
-summary,
-time,
-audio,
-video {
- padding: 0;
- margin: 0;
- border: 0;
-}
-
-/* Prevents iOS text size adjust after orientation change, without disabling (Thanks to @necolas) */
-html {
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-
-/* Base styles
--------------------------------------------------- */
-
-body {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- font: 14px/1.25 "Helvetica Neue", sans-serif;
- color: #222;
- background-color: #fff;
-}
-
-/* Universal link styling */
-a {
- color: #0882f0;
- text-decoration: none;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* Removes the dark touch outlines on links */
-}
-
-/* Wrapper to be used around all content not in .bar-title and .bar-tab */
-.content {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- overflow: auto;
- background-color: #fff;
- -webkit-transition-property: top, bottom;
- transition-property: top, bottom;
- -webkit-transition-duration: .2s, .2s;
- transition-duration: .2s, .2s;
- -webkit-transition-timing-function: linear, linear;
- transition-timing-function: linear, linear;
- -webkit-overflow-scrolling: touch;
-}
-
-/* Hack to force all relatively and absolutely positioned elements still render while scrolling
- Note: This is a bug for "-webkit-overflow-scrolling: touch" */
-.content > * {
- -webkit-transform: translateZ(0px);
- transform: translateZ(0px);
-}
-
-/* Utility wrapper to pad in components like forms, block buttons and segmented-controllers so they're not full-bleed */
-.content-padded {
- padding: 10px;
-}
-
-/* Pad top/bottom of content so it doesn't hide behind .bar-title and .bar-tab.
- Note: For these to work, content must come after both bars in the markup */
-.bar-title ~ .content {
- top: 44px;
-}
-.bar-tab ~ .content {
- bottom: 51px;
-}
-.bar-header-secondary ~ .content {
- top: 88px;
-}/* General bar styles
--------------------------------------------------- */
-
-[class*="bar-"] {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 10;
- height: 44px;
- padding: 5px;
- box-sizing: border-box;
-}
-
-/* Modifier class to dock any bar below .bar-title */
-.bar-header-secondary {
- top: 45px;
-}
-
-/* Modifier class to dock any bar to bottom of viewport */
-.bar-footer {
- bottom: 0;
-}
-
-/* Generic bar for wrapping buttons, segmented controllers, etc. */
-.bar-standard {
- background-color: #f2f2f2;
- background-image: -webkit-linear-gradient(top, #f2f2f2 0, #e5e5e5 100%);
- background-image: linear-gradient(to bottom, #f2f2f2 0, #e5e5e5 100%);
- border-bottom: 1px solid #aaa;
- box-shadow: inset 0 1px 1px -1px #fff;
-}
-
-/* Flip border position to top for footer bars */
-.bar-footer.bar-standard,
-.bar-footer-secondary.bar-standard {
- border-top: 1px solid #aaa;
- border-bottom-width: 0;
-}
-
-/* Title bar
--------------------------------------------------- */
-
-/* Bar docked to top of viewport for showing page title and actions */
-.bar-title {
- top: 0;
- display: -webkit-box;
- display: box;
- background-color: #1eb0e9;
- background-image: -webkit-linear-gradient(top, #1eb0e9 0, #109adc 100%);
- background-image: linear-gradient(to bottom, #1eb0e9 0, #109adc 100%);
- border-bottom: 1px solid #0e5895;
- box-shadow: inset 0 1px 1px -1px rgba(255, 255, 255, .8);
- -webkit-box-orient: horizontal;
- box-orient: horizontal;
-}
-
-/* Centered text in the .bar-title */
-.bar-title .title {
- position: absolute;
- top: 0;
- left: 0;
- display: block;
- width: 100%;
- font-size: 20px;
- font-weight: bold;
- line-height: 44px;
- color: #fff;
- text-align: center;
- text-shadow: 0 -1px rgba(0, 0, 0, .5);
- white-space: nowrap;
-}
-
-.bar-title > a:not([class*="button"]) {
- display: block;
- width: 100%;
- height: 100%;
-}
-
-/* Retain specified title color */
-.bar-title .title a {
- color: inherit;
-}
-
-/* Tab bar
--------------------------------------------------- */
-
-/* Bar docked to bottom used for primary app navigation */
-.bar-tab {
- bottom: 0;
- height: 50px;
- padding: 0;
- background-color: #393939;
- background-image: -webkit-linear-gradient(top, #393939 0, #2b2b2b 100%);
- background-image: linear-gradient(to bottom, #393939 0, #2b2b2b 100%);
- border-top: 1px solid #000;
- border-bottom-width: 0;
- box-shadow: inset 0 1px 1px -1px rgba(255, 255, 255, .6);
-}
-
-/* Wrapper for individual tab */
-.tab-inner {
- display: -webkit-box;
- display: box;
- height: 100%;
- list-style: none;
- -webkit-box-orient: horizontal;
- box-orient: horizontal;
-}
-
-/* Navigational tab */
-.tab-item {
- height: 100%;
- padding-top: 9px;
- text-align: center;
- box-sizing: border-box;
- -webkit-box-flex: 1;
- box-flex: 1;
-}
-
-/* Active state for tab */
-.tab-item.active {
- box-shadow: inset 0 0 20px rgba(0, 0, 0, .5);
-}
-
-/* Icon for tab */
-.tab-icon {
- display: block;
- height: 18px;
- margin: 0 auto;
-}
-
-/* Label for tab */
-.tab-label {
- margin-top: 1px;
- font-size: 10px;
- font-weight: bold;
- color: #fff;
- text-shadow: 0 1px rgba(0, 0, 0, .3);
-}
-
-/* Buttons in title bars
--------------------------------------------------- */
-
-/* Generic style for all buttons in .bar-title */
-.bar-title [class*="button"] {
- position: relative;
- z-index: 10; /* Places buttons over full width title */
- font-size: 12px;
- line-height: 23px;
- color: #fff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .3);
- background-color: #1eb0e9;
- background-image: -webkit-linear-gradient(top, #1eb0e9 0, #0984c6 100%);
- background-image: linear-gradient(to bottom, #1eb0e9 0, #0984c6 100%);
- border: 1px solid #0e5895;
- box-shadow: 0 1px rgba(255, 255, 255, .25);
- -webkit-box-flex: 0;
- box-flex: 0;
-}
-
-
-/* Hacky way to right align buttons outside of flex-box system
- Note: is only absolutely positioned button, would be better if flex-box had an "align right" option */
-.bar-title .title + [class*="button"]:last-child,
-.bar-title .button + [class*="button"]:last-child,
-.bar-title [class*="button"].pull-right {
- position: absolute;
- top: 5px;
- right: 5px;
-}
-
-/* Override standard button active states */
-.bar-title .button:active {
- color: #fff;
- background-color: #0876b1;
-}
-
-/* Directional buttons in title bars (thanks to @GregorAdams for solution - http://cssnerd.com/2011/11/30/the-best-pure-css3-ios-style-arrow-back-button/)
--------------------------------------------------- */
-
-/* Add relative positioning so :before content is positioned properly */
-.bar-title .button-prev,
-.bar-title .button-next {
- position: relative;
-}
-
-/* Prev/next button base styles */
-.bar-title .button-prev {
- margin-left: 7px; /* Push over to make room for :before content */
- border-left: 0;
- border-bottom-left-radius: 10px 15px;
- border-top-left-radius: 10px 15px;
-}
-.bar-title .button-next {
- margin-right: 7px; /* Push over to make room for :before content */
- border-right: 0;
- border-top-right-radius: 10px 15px;
- border-bottom-right-radius: 10px 15px;
-}
-
-/* Pointed part of directional button */
-.bar-title .button-prev:before,
-.bar-title .button-next:before {
- position: absolute;
- top: 2px;
- width: 27px;
- height: 27px;
- border-radius: 30px 100px 2px 40px / 2px 40px 30px 100px;
- content: '';
- box-shadow: inset 1px 0 #0e5895, inset 0 1px #0e5895;
- -webkit-mask-image: -webkit-gradient(linear, left top, right bottom, from(#000), color-stop(.33, #000), color-stop(.5, transparent), to(transparent));
- mask-image: gradient(linear, left top, right bottom, from(#000), color-stop(.33, #000), color-stop(.5, transparent), to(transparent));
-}
-.bar-title .button-prev:before {
- left: -5px;
- background-image: -webkit-gradient(linear, left bottom, right top, from(#0984c6), to(#1eb0e9));
- background-image: gradient(linear, left bottom, right top, from(#0984c6), to(#1eb0e9));
- border-left: 1.5px solid rgba(255, 255, 255, .25);
- -webkit-transform: rotate(-45deg) skew(-10deg, -10deg);
- transform: rotate(-45deg) skew(-10deg, -10deg);
-}
-.bar-title .button-next:before {
- right: -5px;
- background-image: -webkit-gradient(linear, left bottom, right top, from(#1eb0e9), to(#0984c6));
- background-image: gradient(linear, left bottom, right top, from(#1eb0e9), to(#0984c6));
- border-top: 1.5px solid rgba(255, 255, 255, .25);
- -webkit-transform: rotate(135deg) skew(-10deg, -10deg);
- transform: rotate(135deg) skew(-10deg, -10deg);
-}
-
-/* Active states for the directional buttons */
-.bar-title .button-prev:active,
-.bar-title .button-next:active,
-.bar-title .button-prev:active:before,
-.bar-title .button-next:active:before {
- color: #fff;
- background-color: #0876b1;
- background-image: none;
-}
-.bar-title .button-prev:active:before,
-.bar-title .button-next:active:before {
- content: '';
-}
-.bar-title .button-prev:active:before {
- box-shadow: inset 0 3px 3px rgba(0, 0, 0, .2);
-}
-.bar-title .button-next:active:before {
- box-shadow: inset 0 -3px 3px rgba(0, 0, 0, .2);
-}
-
-/* Block buttons in any bar
--------------------------------------------------- */
-
-/* Add proper padding and replace buttons normal dropshadow with a shine from bar */
-[class*="bar"] .button-block {
- padding: 7px 0;
- margin-bottom: 0;
- box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4), 0 1px rgba(255, 255, 255, .8);
-}
-
-/* Override standard padding changes for .button-blocks */
-[class*="bar"] .button-block:active {
- padding: 7px 0;
-}
-
-/* Segmented controller in any bar
--------------------------------------------------- */
-
-/* Remove standard segmented bottom margin */
-[class*="bar-"] .segmented-controller {
- margin-bottom: 0;
-}
-
-/* Add margins between segmented controllers and buttons */
-[class*="bar-"] .segmented-controller + [class*="button"],
-[class*="bar-"] [class*="button"] + .segmented-controller {
- margin-left: 5px;
-}
-
-/* Segmented controller in a title bar
--------------------------------------------------- */
-
-.bar-title .segmented-controller {
- line-height: 18px;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3);
- background-color: #1eb0e9;
- background-image: -webkit-linear-gradient(top, #1eb0e9 0, #0984c6 100%);
- background-image: linear-gradient(to bottom, #1eb0e9 0, #0984c6 100%);
- border: 1px solid #0e5895;
- border-radius: 3px;
- box-shadow: 0 1px rgba(255, 255, 255, .25);
- -webkit-box-flex: 1;
- box-flex: 1;
-}
-
-/* Set color for tab border and highlight */
-.bar-title .segmented-controller li {
- border-left: 1px solid #0e5895;
- box-shadow: inset 1px 0 rgba(255, 255, 255, .25);
-}
-
-/* Remove inset shadow from first tab or one to the right of the active tab */
-.bar-title .segmented-controller .active + li,
-.bar-title .segmented-controller li:first-child {
- box-shadow: none;
-}
-
-/* Remove left-hand border from first tab */
-.bar-title .segmented-controller li:first-child {
- border-left-width: 0;
-}
-
-/* Depressed state (active) */
-.bar-title .segmented-controller li.active {
- background-color: #0082c4;
- box-shadow: inset 0 1px 6px rgba(0, 0, 0, .3);
-}
-
-/* Set color of links to white */
-.bar-title .segmented-controller li > a {
- color: #fff;
-}
-
-
-/* Search forms in standard bar
--------------------------------------------------- */
-
-/* Position/size search bar within the bar */
-.bar-standard input[type=search] {
- height: 32px;
- margin: 0;
-}/* Lists
--------------------------------------------------- */
-
-/* Remove usual bullet styles from list */
-.list {
- margin-bottom: 10px;
- list-style: none;
- background-color: #fff;
-}
-
-/* Pad each list item and add dividers */
-.list li {
- position: relative;
- padding: 20px 60px 20px 10px; /* Given extra right padding to accomodate counts, chevrons or buttons */
- border-bottom: 1px solid rgba(0, 0, 0, .1);
-}
-
-/* Give top border to first list items */
-.list li:first-child {
- border-top: 1px solid rgba(0, 0, 0, .1);
-}
-
-/* If a list of links, make sure the child <a> takes up full list item tap area (want to avoid selecting child buttons though) */
-.list li > a:not([class*="button"]) {
- position: relative;
- display: block;
- padding: inherit;
- margin: -20px -60px -20px -10px;
- color: inherit;
-}
-
-/* Inset list
--------------------------------------------------- */
-
-.list.inset {
- width: auto;
- margin-right: 10px;
- margin-left: 10px;
- border: 1px solid rgba(0, 0, 0, .1);
- border-radius: 6px;
- box-sizing: border-box;
-}
-
-/* Remove border from first/last standard list items to avoid double border at top/bottom of lists */
-.list.inset li:first-child {
- border-top-width: 0;
-}
-.list.inset li:last-child {
- border-bottom-width: 0;
-}
-
-
-/* List dividers
--------------------------------------------------- */
-
-.list .list-divider {
- position: relative;
- top: -1px;
- padding-top: 6px;
- padding-bottom: 6px;
- font-size: 12px;
- font-weight: bold;
- line-height: 18px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
- background-color: #f8f8f8;
- background-image: -webkit-linear-gradient(top, #f8f8f8 0, #eee 100%);
- background-image: linear-gradient(to bottom, #f8f8f8 0, #eee 100%);
- border-top: 1px solid rgba(0, 0, 0, .1);
- border-bottom: 1px solid rgba(0, 0, 0, .1);
- box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4);
-}
-
-/* Rounding first divider on inset lists and remove border on the top */
-.list.inset .list-divider:first-child {
- top: 0;
- border-top-width: 0;
- border-radius: 6px 6px 0 0;
-}
-
-/* Rounding last divider on inset lists */
-.list.inset .list-divider:last-child {
- border-radius: 0 0 6px 6px;
-}
-
-/* Right-aligned subcontent in lists (chevrons, buttons, counts and toggles)
--------------------------------------------------- */
-.list .chevron,
-.list [class*="button"],
-.list [class*="count"],
-.list .toggle {
- position: absolute;
- top: 50%;
- right: 10px;
-}
-
- /* Position chevrons/counts vertically centered on the right in list items */
-.list .chevron,
-.list [class*="count"] {
- margin-top: -10px; /* Half height of chevron */
-}
-
-/* Push count over if there's a sibling chevron */
-.list .chevron + [class*="count"] {
- right: 30px;
-}
-
-/* Position buttons vertically centered on the right in list items */
-.list [class*="button"] {
- left: auto;
- margin-top: -14px; /* Half height of button */
-}
-
-.list .toggle {
- margin-top: -15px; /* Half height of toggle */
-}/* Forms
--------------------------------------------------- */
-
-/* Force form elements to inherit font styles */
-input,
-textarea,
-button,
-select {
- font-family: inherit;
- font-size: inherit;
-}
-
-/* Stretch inputs/textareas to full width and add height to maintain a consistent baseline */
-select,
-textarea,
-input[type="text"],
-input[type=search],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="tel"],
-input[type="color"],
-.input-group {
- width: 100%;
- height: 40px;
- padding: 10px;
- margin-bottom: 10px;
- background-color: #fff;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 3px;
- box-shadow: 0 1px 1px rgba(255, 255, 255, .2), inset 0 1px 1px rgba(0, 0, 0, .1);
- -webkit-appearance: none;
- box-sizing: border-box;
-}
-
-/* Fully round search input */
-input[type=search] {
- height: 34px;
- font-size: 14px;
- border-radius: 30px;
-}
-
-/* Allow text area's height to grow larger than a normal input */
-textarea {
- height: auto;
-}
-
-/* Style select button to look like part of the Ratchet's style */
-select {
- height: auto;
- font-size: 14px;
- background-color: #f8f8f8;
- background-image: -webkit-linear-gradient(top, #f8f8f8 0%, #d4d4d4 100%);
- background-image: linear-gradient(to bottom, #f8f8f8 0%, #d4d4d4 100%);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .1);
-}
-
-
-/* Input groups (cluster multiple inputs together into a single group)
--------------------------------------------------- */
-
-/* Reset from initial form setup styles */
-.input-group {
- width: auto;
- height: auto;
- padding: 0;
-}
-
-/* Remove spacing, borders, shadows and rounding since it all belongs on the .input-group not the input */
-.input-group input {
- margin-bottom: 0;
- background-color: transparent;
- border: 0;
- border-bottom: 1px solid rgba(0, 0, 0, .2);
- border-radius: 0;
- box-shadow: none;
-}
-
-/* Remove bottom border on last input to avoid double bottom border */
-.input-group input:last-child {
- border-bottom-width: 0;
-}
-
-/* Input groups with labels
--------------------------------------------------- */
-
-/* To use labels with input groups, wrap a label and an input in an .input-row */
-.input-row {
- overflow: hidden;
- border-bottom: 1px solid rgba(0, 0, 0, .2);
-}
-
-/* Remove bottom border on last input-row to avoid double bottom border */
-.input-row:last-child {
- border-bottom-width: 0;
-}
-
-/* Labels get floated left with a set percentage width */
-.input-row label {
- float: left;
- width: 25%;
- padding: 11px 10px 9px 13px; /* Optimizing the baseline for mobile. */
- font-weight: bold;
-}
-
-/* Actual inputs float to right of labels and also have a set percentage */
-.input-row label + input {
- float: right;
- width: 65%;
- padding-left: 0;
- margin-bottom: 0;
- border-bottom: 0;
-}/* General button styles
--------------------------------------------------- */
-
-[class*="button"] {
- position: relative;
- display: inline-block;
- padding: 4px 12px;
- margin: 0;
- font-weight: bold;
- line-height: 18px;
- color: #333;
- text-align: center;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- vertical-align: top;
- cursor: pointer;
- background-color: #f8f8f8;
- background-image: -webkit-linear-gradient(top, #f8f8f8 0, #d4d4d4 100%);
- background-image: linear-gradient(to bottom, #f8f8f8 0, #d4d4d4 100%);
- border: 1px solid rgba(0, 0, 0, .3);
- border-radius: 3px;
- box-shadow: inset 0 1px 1px rgba(255, 255, 255, .4), 0 1px 2px rgba(0, 0, 0, .05);
-}
-
-/* Active */
-[class*="button"]:active {
- padding-top: 5px;
- padding-bottom: 3px;
- color: #333;
- background-color: #ccc;
- background-image: none;
- box-shadow: inset 0 3px 3px rgba(0, 0, 0, .2);
-}
-
-/* Button modifiers
--------------------------------------------------- */
-
-/* Overriding styles for buttons with modifiers */
-.button-main,
-.button-positive,
-.button-negative {
- color: #fff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .3);
-}
-
-/* Main button */
-.button-main {
- background-color: #1eafe7;
- background-image: -webkit-linear-gradient(top, #1eafe7 0, #1a97c8 100%);
- background-image: linear-gradient(to bottom, #1eafe7 0, #1a97c8 100%);
- border: 1px solid #117aaa;
-}
-
-/* Positive button */
-.button-positive {
- background-color: #34ba15;
- background-image: -webkit-linear-gradient(top, #34ba15 0, #2da012 100%);
- background-image: linear-gradient(to bottom, #34ba15 0, #2da012 100%);
- border: 1px solid #278f0f;
-}
-
-/* Negative button */
-.button-negative {
- background-color: #e71e1e;
- background-image: -webkit-linear-gradient(top, #e71e1e 0,#c71a1a 100%);
- background-image: linear-gradient(to bottom, #e71e1e 0, #c71a1a 100%);
- border: 1px solid #b51a1a;
-}
-
-/* Active state for buttons with modifiers */
-.button-main:active,
-.button-positive:active,
-.button-negative:active {
- color: #fff;
-}
-.button-main:active {
- background-color: #0876b1;
-}
-.button-positive:active {
- background-color: #298f11;
-}
-.button-negative:active {
- background-color: #b21a1a;
-}
-
-/* Block level buttons (full width buttons) */
-.button-block {
- display: block;
- padding: 11px 0 13px;
- margin-bottom: 10px;
- font-size: 16px;
-}
-
-/* Active state for block level buttons */
-.button-block:active {
- padding: 12px 0;
-}
-
-/* Counts in buttons
--------------------------------------------------- */
-
-/* Generic styles for all counts within buttons */
-[class*="button"] [class*="count"] {
- padding-top: 2px;
- padding-bottom: 2px;
- margin-right: -4px;
- margin-left: 4px;
- text-shadow: none;
- background-color: rgba(0, 0, 0, .2);
- box-shadow: inset 0 1px 1px -1px #000000, 0 1px 1px -1px #fff;
-}
-
-/* Position counts within block level buttons
- Note: These are absolutely positioned so that text of button isn't "pushed" by count and always
- stays at true center of button */
-.button-block [class*="count"] {
- position: absolute;
- right: 0;
- padding-top: 4px;
- padding-bottom: 4px;
- margin-right: 10px;
-}/* Chevrons
--------------------------------------------------- */
-
-.chevron {
- display: block;
- height: 20px;
-}
-
-/* Base styles for both 1/2's of the chevron */
-.chevron:before,
-.chevron:after {
- position: relative;
- display: block;
- width: 12px;
- height: 4px;
- background-color: #999;
- content: '';
-}
-
-/* Position and rotate respective 1/2's of the chevron */
-.chevron:before {
- top: 5px;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
-}
-.chevron:after {
- top: 7px;
- -webkit-transform: rotate(-45deg);
- transform: rotate(-45deg);
-}/* General count styles
--------------------------------------------------- */
-
-[class*="count"] {
- display: inline-block;
- padding: 4px 9px;
- font-size: 12px;
- font-weight: bold;
- line-height: 13px;
- color: #fff;
- background-color: rgba(0, 0, 0, .3);
- border-radius: 100px;
-}
-
-/* Count modifiers
--------------------------------------------------- */
-
-/* Overriding styles for counts with modifiers */
-.count-main,
-.count-positive,
-.count-negative {
- color: #fff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .3);
-}
-
-/* Main count */
-.count-main {
- background-color: #1eafe7;
- background-image: -webkit-linear-gradient(top, #1eafe7 0, #1a97c8 100%);
- background-image: linear-gradient(to bottom, #1eafe7 0, #1a97c8 100%);
-}
-
-/* Positive count */
-.count-positive {
- background-color: #34ba15;
- background-image: -webkit-linear-gradient(top, #34ba15 0, #2da012 100%);
- background-image: linear-gradient(to bottom, #34ba15 0, #2da012 100%);
-}
-
-/* Negative count */
-.count-negative {
- background-color: #e71e1e;
- background-image: -webkit-linear-gradient(top, #e71e1e 0,#c71a1a 100%);
- background-image: linear-gradient(to bottom, #e71e1e 0, #c71a1a 100%);
-}/* Segmented controllers
--------------------------------------------------- */
-
-.segmented-controller {
- display: -webkit-box;
- display: box;
- margin-bottom: 10px;
- overflow: hidden;
- font-size: 12px;
- font-weight: bold;
- text-shadow: 0 1px rgba(255, 255, 255, .5);
- list-style: none;
- background-color: #f8f8f8;
- background-image: -webkit-linear-gradient(top, #f8f8f8 0, #d4d4d4 100%);
- background-image: linear-gradient(to bottom, #f8f8f8 0, #d4d4d4 100%);
- border: 1px solid #aaa;
- border-radius: 3px;
- box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 1px rgba(255, 255, 255, .8);
- -webkit-box-orient: horizontal;
- box-orient: horizontal;
-}
-
-/* Section within controller */
-.segmented-controller li {
- overflow: hidden;
- text-align: center;
- white-space: nowrap;
- border-left: 1px solid #aaa;
- box-shadow: inset 1px 0 rgba(255, 255, 255, .5);
- -webkit-box-flex: 1;
- box-flex: 1;
-}
-
-/* Link that fills each section */
-.segmented-controller li > a {
- display: block;
- padding: 8px 16px;
- overflow: hidden;
- line-height: 15px;
- color: #333;
- text-overflow: ellipsis;
-}
-
-/* Remove border-left and shadow from first section */
-.segmented-controller li:first-child {
- border-left-width: 0;
- box-shadow: none;
-}
-
-/* Active segment of controller */
-.segmented-controller li.active {
- background-color: #ccc;
- box-shadow: inset 0 1px 5px rgba(0, 0, 0, .3);
-}
-
-.segmented-controller-item {
- display: none;
-}
-
-.segmented-controller-item.active {
- display: block;
-}/* Popovers (to be used with popovers.js)
--------------------------------------------------- */
-
-.popover {
- position: fixed;
- top: 55px;
- left: 50%;
- z-index: 20;
- display: none;
- width: 280px;
- padding: 5px;
- margin-left: -146px;
- background-color: #555;
- background-image: -webkit-linear-gradient(top, #555 5%, #555 6%, #111 30%);
- background-image: linear-gradient(to bottom, #555 5%, #555 6%,#111 30%);
- border: 1px solid #111;
- border-radius: 6px;
- opacity: 0;
- box-shadow: inset 0 1px 1px -1px #fff, 0 3px 10px rgba(0, 0, 0, .3);
- -webkit-transform: translate3d(0, -15px, 0);
- transform: translate3d(0, -15px, 0);
- -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in-out;
- transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;
-}
-
-/* Caret on top of popover using CSS triangles (thanks to @chriscoyier for solution) */
-.popover:before,
-.popover:after {
- position: absolute;
- left: 50%;
- width: 0;
- height: 0;
- content: '';
-}
-.popover:before {
- top: -20px;
- margin-left: -21px;
- border-right: 21px solid transparent;
- border-bottom: 21px solid #111;
- border-left: 21px solid transparent;
-}
-.popover:after {
- top: -19px;
- margin-left: -20px;
- border-right: 20px solid transparent;
- border-bottom: 20px solid #555;
- border-left: 20px solid transparent;
-}
-
-/* Wrapper for a title and buttons */
-.popover-header {
- display: -webkit-box;
- display: box;
- height: 34px;
- margin-bottom: 5px;
-}
-
-/* Centered title for popover */
-.popover-header .title {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- margin: 15px 0;
- font-size: 16px;
- font-weight: bold;
- line-height: 12px;
- color: #fff;
- text-align: center;
- text-shadow: 0 -1px rgba(0, 0, 0, .5);
-}
-
-/* Generic style for all buttons in .popover-header */
-.popover-header [class*="button"] {
- z-index: 25;
- font-size: 12px;
- line-height: 22px;
- color: #fff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .3);
- background-color: #454545;
- background-image: -webkit-linear-gradient(top, #454545 0, #353535 100%);
- background-image: linear-gradient(to bottom, #454545 0, #353535 100%);
- border: 1px solid #111;
- -webkit-box-flex: 0;
- box-flex: 0;
-}
-
-/* Hacky way to right align buttons outside of flex-box system
- Note: is only absolutely positioned button, would be better if flex-box had an "align right" option */
-.popover-header .title + [class*="button"]:last-child,
-.popover-header .button + [class*="button"]:last-child,
-.popover-header [class*="button"].pull-right {
- position: absolute;
- top: 5px;
- right: 5px;
-}
-
-/* Active state for popover header buttons */
-.popover-header .button:active {
- color: #fff;
- background-color: #0876b1;
-}
-
-/* Popover animation
--------------------------------------------------- */
-
-.popover.visible {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-
-/* Backdrop (used as invisible touch escape)
--------------------------------------------------- */
-
-.backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 10;
-}
-
-/* Block level buttons in popovers
--------------------------------------------------- */
-
-/* Positioning and giving darker border to look sharp against dark popover */
-.popover .button-block {
- margin-bottom: 5px;
- border: 1px solid #111;
-}
-
-/* Remove extra margin on bottom of last button */
-.popover .button-block:last-child {
- margin-bottom: 0;
-}
-
-/* Lists in popovers
--------------------------------------------------- */
-
-.popover .list {
- width: auto;
- max-height: 250px;
- margin-right: 0;
- margin-bottom: 0;
- margin-left: 0;
- overflow: auto;
- background-color: #fff;
- border: 1px solid #000;
- border-radius: 3px;
- -webkit-overflow-scrolling: touch;
-}/* Slider styles (to be used with sliders.js)
--------------------------------------------------- */
-
-/* Width/height of slider */
-.slider,
-.slider > li {
- width: 100%;
- height: 200px;
-}
-
-/* Outer wrapper for slider */
-.slider {
- overflow: hidden;
- background-color: #000;
-}
-
-/* Inner wrapper for slider (width of all slides together) */
-.slider > ul {
- position: relative;
- font-size: 0; /* Remove spaces from inline-block children */
- white-space: nowrap;
- -webkit-transition: all 0 linear;
- transition: all 0 linear;
-}
-
-/* Individual slide */
-.slider > ul > li {
- display: inline-block;
- vertical-align: top; /* Ensure that li always aligns to top */
- width: 100%;
- height: 100%;
-}
-
-/* Required reset of font-size to same as standard body */
-.slider > ul > li > * {
- font-size: 14px;
-}/* Toggle styles (to be used with toggles.js)
--------------------------------------------------- */
-
-.toggle {
- position: relative;
- width: 75px;
- height: 28px;
- background-color: #eee;
- border: 1px solid #bbb;
- border-radius: 20px;
- box-shadow: inset 0 0 4px rgba(0, 0, 0, .1);
-}
-
-/* Text indicating "on" or "off". Default is "off" */
-.toggle:before {
- position: absolute;
- right: 13px;
- font-weight: bold;
- line-height: 28px;
- color: #777;
- text-shadow: 0 1px #fff;
- text-transform: uppercase;
- content: "Off";
-}
-
-/* Sliding handle */
-.toggle-handle {
- position: absolute;
- top: -1px;
- left: -1px;
- z-index: 2;
- width: 28px;
- height: 28px;
- background-color: #fff;
- background-image: -webkit-linear-gradient(top, #fff 0, #f2f2f2 100%);
- background-image: linear-gradient(to bottom, #fff 0, #f2f2f2 100%);
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 100px;
- -webkit-transition: -webkit-transform 0.1s ease-in-out, border 0.1s ease-in-out;
- transition: transform 0.1s ease-in-out, border 0.1s ease-in-out;
-}
-
-/* Active state for toggle */
-.toggle.active {
- background-color: #19a8e4;
- background-image: -webkit-linear-gradient(top, #088cd4 0, #19a8e4 100%);
- background-image: linear-gradient(to bottom, #088cd4 0, #19a8e4 100%);
- border: 1px solid #096c9d;
- box-shadow: inset 0 0 15px rgba(255, 255, 255, .25);
-}
-
-/* Active state for toggle handle */
-.toggle.active .toggle-handle {
- border-color: #0a76ad;
- -webkit-transform: translate3d(48px,0,0);
- transform: translate3d(48px,0,0);
-}
-
-/* Change "off" to "on" for active state */
-.toggle.active:before {
- right: auto;
- left: 15px;
- color: #fff;
- text-shadow: 0 -1px rgba(0, 0, 0, 0.25);
- content: "On";
-}/* Push styles (to be used with push.js)
--------------------------------------------------- */
-
-/* Fade animation */
-.content.fade {
- left: 0;
- opacity: 0;
- -webkit-transition: opacity .2s ease-in-out;
- transition: opacity .2s ease-in-out;
-}
-.content.fade.in {
- opacity: 1;
-}
-
-/* Slide animation */
-.content.slide {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- -webkit-transition: -webkit-transform .25s ease-in-out;
- transition: transform .25s ease-in-out;
-}
-.content.slide.left {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
-}
-.content.slide.right {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
-}
View
BIN www/textures/brick.png
Deleted file not rendered
View
BIN www/textures/crate.png
Deleted file not rendered
View
BIN www/textures/dirt.png
Deleted file not rendered
View
BIN www/textures/grass.png
Deleted file not rendered
View
BIN www/textures/grass_dirt.png
Deleted file not rendered
View
BIN www/textures/obsidian.png
Deleted file not rendered
View
BIN www/textures/snow.png
Deleted file not rendered
View
BIN www/viking.png
Deleted file not rendered

0 comments on commit 794f517

Please sign in to comment.