/*
* -----------------------------------------------------------------------
* 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;
}
}