public void processEntity(Entity entity, long elapsedTime) {
		Shoot shootComponent = entity.getComponent(Shoot.class);
		// Decrease their delayed shooting time so that they may be able to
		// fire again
		shootComponent.currentWaitingTime -= elapsedTime;
		if (shootComponent.shootRequired
				&& shootComponent.currentWaitingTime <= 0) {
			// Create an instance of their bullet template
			Entity spawnedBullet = shootComponent.bulletTemplate.createEntity();
			Spatial bulletSpatial = spawnedBullet.getComponent(Spatial.class);
			Spatial entitySpatial = entity.getComponent(Spatial.class);

			// Update the bullet's position to where it has been fired from,
			// and set the rotation to be the same as that which fired it
			bulletSpatial.x = entitySpatial.x;
			bulletSpatial.y = entitySpatial.y;
			bulletSpatial.setRotation(entitySpatial.getRotation());

			// Set the velocity logic which is stored within the entity's
			// Shoot component
			Velocity bulletVelocity = spawnedBullet.getComponent(Velocity.class);
			bulletVelocity.acceleration = bulletVelocity.currentVelocity = bulletVelocity.velocityCap = shootComponent.bulletSpeed;

			// Give the bullet the damage details, this is what will be used
			// to reduce the health of an entity it collides with (assumming
			// it has a Health component)
			Damage bulletDamageComponent = spawnedBullet.getComponent(Damage.class);
			bulletDamageComponent.damageGiven = shootComponent.bulletDamage;

			// Add the timd delete component, so that it will be removed from
			// the system after the required duration in milliseconds has passed
			spawnedBullet.addComponentNoRefresh(new TimedDelete(shootComponent.bulletLife));

			// Start the bullet accelerating as expected, the VelocitySystem
			// will handle this for us
			bulletVelocity.currentState = Velocity.VelocityState.Accelerate;

			// Place a the tag of the entity that fired the bullet so that
			// other systems can base logic around the it. For instance the
			// damage system may consider if a bullet can hurt the owner, or for
			// things like friendly fire possibly
			Bullet bulletComponent = spawnedBullet.getComponent(Bullet.class);
			bulletComponent.ignoreOwnerTag = entity.getComponent(NameTag.class);

			// Reset the shootRequired to false, as we've dealt with this
			// bullet now. If we didn't do this it would continuously shoot.
			// At this point we also reset the shooting time so that another
			// bullet can't be fired right away
			shootComponent.shootRequired = false;
			shootComponent.currentWaitingTime = shootComponent.requiredWaitingTime;
		}
	}