Package com.netthreads.libgdx.scene

Source Code of com.netthreads.libgdx.scene.Scene

/*
* -----------------------------------------------------------------------
* Copyright 2014 - 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.InputMultiplexer;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.viewport.Viewport;
import com.netthreads.libgdx.director.AppInjector;
import com.netthreads.libgdx.director.Director;

/**
* Scene is a Stage which has input multiplexer.
*
* Scenes are composed of layers.
*
*/
public class Scene extends Stage implements Node
{
  private static final int DEFAULT_LAYER_CAPACITY = 10;

  /**
   * Associated input multiplexer.
   */
  private InputMultiplexer inputMultiplexer;

  /**
   * Scene elements as nodes. We need this so we can call enter and exit on actors in order to manage registration and
   * de-registration of event handlers.
   *
   */
  private Array<Node> nodes;

  /**
   * The one and only director.
   */
  private static Director director = AppInjector.getInjector().getInstance(Director.class);

  // All scenes share the same viewport.
  Viewport viewport;
 
  /**
   * Scene uses director view-port and batch.
   *
   * @param viewport The scene view-port.
   */
  public Scene()
  {
    this(director.getViewport(), director.getSpriteBatch());
  }

  /**
   * Scene uses director view-port.
   *
   * @param batch The sprite batch to use.
   */
  public Scene(SpriteBatch batch)
  {
    this(director.getViewport(), batch);
  }
 
  /**
   * Constructor where we supply our own sprite batch.
   *
   * @param viewport The scene view-port.
   * @param batch
   */
  public Scene(Viewport viewport, SpriteBatch batch)
  {
    super(viewport, batch);

    inputMultiplexer = new InputMultiplexer(this);

    nodes = new Array<Node>(DEFAULT_LAYER_CAPACITY);
  }

  /**
   * Get input multiplexer.
   *
   * @return The input multiplexer.
   */
  public InputMultiplexer getInputMultiplexer()
  {
    return inputMultiplexer;
  }

  /**
   * Add scene layer.
   *
   * Note layer in nodes list.
   *
   * @param layer
   *            The new layer.
   */
  public void addLayer(Layer layer)
  {
    nodes.add(layer);

    addActor(layer);
  }

  /**
   * Remove scene layer.
   *
   * @param layer
   *            The target layer.
   */
  public void removeLayer(Layer layer)
  {
    int index = nodes.indexOf(layer, false);
    if (index >= 0)
    {
      nodes.removeIndex(index);

      getRoot().removeActor(layer);
    }
  }

  /**
   * Handle pre-display tasks.
   *
   */
  @Override
  public void enter()
  {
    int size = nodes.size;
    for (int i = 0; i < size; i++)
    {
      nodes.get(i).enter();
    }
  }

  /**
   * Handle post-display tasks.
   *
   */
  @Override
  public void exit()
  {
    int size = nodes.size;
    for (int i = 0; i < size; i++)
    {
      nodes.get(i).exit();
    }
  }

}
TOP

Related Classes of com.netthreads.libgdx.scene.Scene

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.