text: var Client = IgeClass.extend({
  	classId: 'Client',
  
  	init: function () {
  		ige.addComponent(IgeEditorComponent);
  
  		// Setup three.js interaction
  		ige.renderContext('three');
  		ige.addComponent(IgeThree);
  
  		// Load our textures
  		var self = this;
  
  		// Enable networking
  		ige.addComponent(IgeNetIoComponent);
  
  		// Implement our game methods
  		this.implement(ClientNetworkEvents);
  
  		// Load the textures we want to use
  		this.textures = {
  			ship: new IgeTexture('./assets/PlayerTexture.js')
  		};
  
  		ige.on('texturesLoaded', function () {
  			// Create the HTML canvas
  			ige.createFrontBuffer(true);
  
  			// Setup the input system to use events
  			// from the three.js renderer canvas
  			ige.input.setupListeners(ige.three._canvas);
  
  			// Ask the engine to start
  			ige.start(function (success) {
  				// Check if the engine started successfully
  				if (success) {
  					// Start the networking (you can do this elsewhere if it
  					// makes sense to connect to the server later on rather
  					// than before the scene etc are created... maybe you want
  					// a splash screen or a menu first? Then connect after you've
  					// got a username or something?
  					ige.network.start('http://localhost:2000', function () {
  						// Setup the network command listeners
  						ige.network.define('playerEntity', self._onPlayerEntity); // Defined in ./gameClasses/ClientNetworkEvents.js
  
  						// Setup the network stream handler
  						ige.network.addComponent(IgeStreamComponent)
  							.stream.renderLatency(80) // Render the simulation 160 milliseconds in the past
  							// Create a listener that will fire whenever an entity
  							// is created because of the incoming stream data
  							.stream.on('entityCreated', function (entity) {
  								self.log('Stream entity created with ID: ' + entity.id());
  							});
  
  						// Create the scene
  						self.scene1 = new IgeScene2d()
  							.id('scene1');
  
  						// Create the main viewport and set the scene
  						// it will "look" at as the new scene1 we just
  						// created above
  						self.vp1 = new IgeViewport()
  							.id('vp1')
  							.autoSize(true)
  							.scene(self.scene1)
  							.drawBounds(true)
  							.mount(ige);
  
  						self.vp1.camera.translateTo(0, 0, 500);
  
  						// Define our player controls
  						ige.input.mapAction('left', ige.input.key.left);
  						ige.input.mapAction('right', ige.input.key.right);
  						ige.input.mapAction('thrust', ige.input.key.up);
  
  						// Ask the server to create an entity for us
  						ige.network.send('playerEntity');
  
  						// We don't create any entities here because in this example the entities
  						// are created server-side and then streamed to the clients. If an entity
  						// is streamed to a client and the client doesn't have the entity in
  						// memory, the entity is automatically created. Woohoo!
  					});
  				}
  			});
  		});
  	}
  });
  
  if (typeof(module) !== 'undefined' && typeof(module.exports) !== 'undefined') { module.exports = Client; }