content: /*
   * -----------------------------------------------------------------------
   * Copyright 2012 - Alistair Rutherford - www.netthreads.co.uk
   * -----------------------------------------------------------------------
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *     http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   * 
   */
  
  package com.netthreads.libgdx.scene;
  
  import com.badlogic.gdx.InputProcessor;
  import com.badlogic.gdx.scenes.scene2d.Actor;
  import com.badlogic.gdx.scenes.scene2d.Group;
  import com.badlogic.gdx.utils.SnapshotArray;
  
  /**
   * Represents a visual layer which can receive input.
   * 
   * Layers are a group of actors or other groups.
   * 
   */
  public class Layer extends Group implements InputProcessor, Node
  {
  	
  	@Override
  	public void enter()
  	{
  		SnapshotArray<Actor> list = getChildren();
  		
  		int size = list.size;
  		for (int i = 0; i < size; i++)
  		{
  			Actor actor = list.get(i);
  			
  			if (actor instanceof Layer)
  			{
  				Layer layer = (Layer) actor;
  				
  				layer.enter();
  			}
  		}
  	}
  	
  	@Override
  	public void exit()
  	{
  		SnapshotArray<Actor> list = getChildren();
  		
  		int size = list.size;
  		for (int i = 0; i < size; i++)
  		{
  			Actor actor = list.get(i);
  			
  			if (actor instanceof Layer)
  			{
  				Layer layer = (Layer) actor;
  				
  				layer.exit();
  			}
  		}
  	}
  	
  	@Override
  	public boolean touchDown(int x, int y, int pointer, int button)
  	{
  		boolean handled = false;
  		
  		SnapshotArray<Actor> list = getChildren();
  		
  		int size = list.size;
  		int index = 0;
  		while (index < size && !handled)
  		{
  			Actor actor = list.get(index);
  			
  			if (actor instanceof Layer)
  			{
  				Layer layer = (Layer) actor;
  				
  				handled = layer.touchDown(x, y, pointer, button);
  			}
  			
  			index++;
  		}
  		
  		return handled;
  	}
  	
  	@Override
  	public boolean touchUp(int x, int y, int pointer, int button)
  	{
  		boolean handled = false;
  		
  		SnapshotArray<Actor> list = getChildren();
  		
  		int size = list.size;
  		int index = 0;
  		while (index < size && !handled)
  		{
  			Actor actor = list.get(index);
  			
  			if (actor instanceof Layer)
  			{
  				Layer layer = (Layer) actor;
  				
  				handled = layer.touchUp(x, y, pointer, button);
  			}
  			
  			index++;
  		}
  		
  		return handled;
  	}
  	
  	@Override
  	public boolean touchDragged(int x, int y, int pointer)
  	{
  		boolean handled = false;
  		
  		SnapshotArray<Actor> list = getChildren();
  		
  		int size = list.size;
  		int index = 0;
  		while (index < size && !handled)
  		{
  			Actor actor = list.get(index);
  			
  			if (actor instanceof Layer)
  			{
  				Layer layer = (Layer) actor;
  				
  				handled = layer.touchDragged(x, y, pointer);
  			}
  			
  			index++;
  		}
  		
  		return handled;
  	}
  	
  	@Override
  	public boolean mouseMoved(int x, int y)
  	{
  		boolean handled = false;
  		
  		SnapshotArray<Actor> list = getChildren();
  		
  		int size = list.size;
  		int index = 0;
  		while (index < size && !handled)
  		{
  			Actor actor = list.get(index);
  			
  			if (actor instanceof Layer)
  			{
  				Layer layer = (Layer) actor;
  				
  				handled = layer.mouseMoved(x, y);
  			}
  			
  			index++;
  		}
  		
  		return handled;
  	}
  	
  	@Override
  	public boolean keyDown(int keycode)
  	{
  		// TODO Auto-generated method stub
  		return false;
  	}
  	
  	@Override
  	public boolean keyUp(int keycode)
  	{
  		// TODO Auto-generated method stub
  		return false;
  	}
  	
  	@Override
  	public boolean keyTyped(char character)
  	{
  		// TODO Auto-generated method stub
  		return false;
  	}
  	
  	@Override
  	public boolean scrolled(int amount)
  	{
  		// TODO Auto-generated method stub
  		return false;
  	}
  	
  	/**
  	 * We override the hit test for the layer to ensure it does not take part in
  	 * the search for a target. This is to stop the layer from blocking passing
  	 * on any hit tests to items on layers below it.
  	 */
  	@Override
  	public Actor hit(float x, float y, boolean touchable)
  	{
  		Actor hit = super.hit(x, y, touchable);
  		
  		if (hit == this)
  		{
  			hit = null;
  		}
  		
  		return hit;
  	}
  }
  