Android Open Source - java-androidframework Screen






From Project

Back to project page java-androidframework.

License

The source code is released under:

This project is licensed under the [CC0 1.0 Agreement](http://creativecommons.org/publicdomain/zero/1.0/). To the extent possible under law, Pete Schmitz has waived all copyright and related or neigh...

If you think the Android project java-androidframework listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.gamepatriot.framework2d.implementation;
// w w  w .  jav  a  2  s  . c  om
import java.util.ArrayList;

import com.gamepatriot.androidframework.framework.AndroidImage;
import com.gamepatriot.androidframework.framework.AndroidMain;
import com.gamepatriot.androidframework.framework.AndroidMusicHandler;
import com.gamepatriot.androidframework.framework.AndroidScreen;
import com.gamepatriot.androidframework.framework.AndroidShape;
import com.gamepatriot.androidframework.framework.AndroidSoundHandler;
import com.gamepatriot.framework2d.screens.Example;

/**
 * The Screen class organizes display lists for images and shapes so they can be drawn through a {@link Renderer}. In addition, the screen class receives broadcasted inputs when parented 
 * by a {@link Main} class ({@link #touchPress(int, int)} and {@link #touchRelease(int, int)}) and also has its time-step function that is invoked ({@link #update()}) every frame update.
 * 
 * @see AndroidScreen
 * @author Pete Schmitz, May 9, 2013
 *
 */
public abstract class Screen implements AndroidScreen {
  
  /**
   * The ScreenID class initiates a relationship between name flags for objects that extend {@link Screen} and their constructors. 
   * The ScreenID can be used to conveniently instantiate a Screen-type. For example, by using {@link Main}'s function {@link Main#addScreen(ScreenID)}.
   * 
   * @author Pete Schmitz, May 9, 2013
   *
   */
  public static enum ScreenID{
    EXAMPLE(){
      @Override
      public Screen createScreen(Main $main){
        return new Example($main);
      }
    };
    
    /** Abstract function for defining how this Screen extension should behave on instantiation. **/
    public abstract Screen createScreen(Main $main);
    
  }
  
  /** The {@link #activations} index flag for the renderer. **/
  public static final int INDEX_RENDER = 0;
  
  /** The {@link #activations} index flag for the updater. **/
  public static final int INDEX_UPDATER = 1;
  
  /** The {@link #activations} index flag for the inputter. **/
  public static final int INDEX_INPUTTER = 2;
  
  /** The flag for a deactivated Screen feature in {@link #activations}. **/
  public static final int FLAG_DEACTIVE = 0;
  
  /** The flag for an activated Screen feature in {@link #activations}. **/
  public static final int FLAG_ACTIVE = 1;
  
  
  //References
  
  /** Reference to this application's {@link Main} object. **/
  protected Main main;
  
  /** Reference to this application's {@link SoundHandler} object. **/
  protected SoundHandler sound;
  
  /** Reference to this application's {@link MusicHandler} object. **/
  protected MusicHandler music;
  
  
  //Flags
  
  /** (Read-only) Whether or not this screen should have its display rendered. Call {@link #activateRender()} and {@link #deactivateRender()} to toggle. **/
  public boolean activeRender = false;
  
  /** (Read-only) Whether or not this screen should have its time-step function invoked. Call {@link #activateUpdater()} and {@link #deactivateUpdater()} to toggle. **/
  public boolean activeUpdater = false;
  
  /** (Read-only) Whether or not this screen should receive broadcasted input. Call {@link #activateInputter()} and {@link #deactivateInputter()} to toggle. **/
  public boolean activeInputter = false;
  
  /** Flags to memorize which features were enabled and disabled so features can be resumed from a pause call. **/
  private final int[] activations = {0, 0, 0};
  
  /** (Read-only) Whether this screen is attached to a parent **/
  public boolean hasParent = false;
  
  
  //Containers
  
  /** Display list of images this Screen is parenting. **/
  private final ArrayList<AndroidImage> images;
  
  /** Display list of shapes this Screen is parenting. **/
  private final ArrayList<AndroidShape> shapes;
  
  
  /**
   * Constructor
   * @param $main    Reference to the application's {@link Main} object.
   */
  public Screen(Main $main){
    
    //References
    main = $main;
    sound = (SoundHandler) $main.getSound();
    music = (MusicHandler) $main.getMusic();
    
    //Containers
    images = new ArrayList<AndroidImage>();
    shapes = new ArrayList<AndroidShape>();
    
    //Set default activation
    activate();
  }
  
  @Override
  public void activate() {
    activateRender();
    activateUpdater();
    activateInputter();
  }
  
  @Override
  public void activateInputter() {
    activeInputter = true;
    activations[INDEX_INPUTTER] = FLAG_ACTIVE;
  }
  
  @Override
  public void activateRender() {
    activeRender = true;
    activations[INDEX_RENDER] = FLAG_ACTIVE;
  }
  
  @Override
  public void activateUpdater() {
    activeUpdater = true;
    activations[INDEX_UPDATER] = FLAG_ACTIVE;
  }

  @Override
  public void deactivate() {
    deactivateRender();
    deactivateUpdater();
    deactivateInputter();
  }

  @Override
  public void deactivateRender() {
    activeRender = false;
    activations[INDEX_RENDER] = FLAG_DEACTIVE;
  }

  @Override
  public void deactivateUpdater() {
    activeUpdater = false;
    activations[INDEX_UPDATER] = FLAG_DEACTIVE;
  }

  @Override
  public void deactivateInputter() {
    activeInputter = false;
    activations[INDEX_INPUTTER] = FLAG_DEACTIVE;
  }

  @Override
  public void pause() {
    activeRender = false;
    activeUpdater = false;
    activeInputter = false;
  }

  @Override
  public void resume() {
    if (activations[INDEX_RENDER] == FLAG_ACTIVE) activeRender = true;
    if (activations[INDEX_UPDATER] == FLAG_ACTIVE) activeUpdater = true;
    if (activations[INDEX_INPUTTER] == FLAG_ACTIVE) activeInputter = true;
  }

  @Override
  public int numImages() {
    return images.size();
  }

  @Override
  public AndroidImage getImageAt(int $index) {
    if ($index < 0 || $index >= images.size()) return null;
    
    return images.get($index);
  }

  @Override
  public int getImageIndex(AndroidImage $image) {
    return images.indexOf($image);
  }

  @Override
  public void addImage(AndroidImage $image) {
    
    $image.removeFromParent();
    $image.setParent(this);
    images.add($image);
  }

  @Override
  public void addImageAt(int $index, AndroidImage $image) {
    
    $image.removeFromParent();
    $image.setParent(this);
    
    if ($index < 0){
      images.add(0, $image);
      return;
    }
    
    if ($index >= images.size()){
      images.add($image);
      return;
    }
    
    images.add($index, $image);
  }

  @Override
  public boolean removeImage(AndroidImage $image) {
    if (!$image.hasParent() || $image.getParent() != this) return false;
    
    $image.setParent(null);
    return images.remove($image);
  }

  @Override
  public AndroidImage removeImageAt(int $index) {
    if ($index < 0 || $index >= images.size()) return null;
    
    images.get($index).setParent(null);
    return images.remove($index);
  }

  @Override
  public ArrayList<AndroidImage> getImages() {
    return images;
  }

  @Override
  public void removeImages() {
    int $i;
    for ($i = images.size()-1; $i >= 0; $i--){
      removeImageAt($i);
    }
  }

  @Override
  public int numShapes() {
    return shapes.size();
  }

  @Override
  public AndroidShape getShapeAt(int $index) {
    if ($index < 0 || $index >= shapes.size()) return null;
    
    return shapes.get($index);
  }

  @Override
  public int getShapeIndex(AndroidShape $shape) {
    return shapes.indexOf($shape);
  }

  @Override
  public void addShape(AndroidShape $shape) {
    $shape.removeFromParent();
    $shape.setParent(this);
    shapes.add($shape);
  }

  @Override
  public void addShapeAt(int $index, AndroidShape $shape) {
    $shape.removeFromParent();
    $shape.setParent(this);
    if ($index < 0){
      shapes.add(0, $shape);
      return;
    }
    
    if ($index >= images.size()){
      shapes.add($shape);
      return;
    }
    
    shapes.add($index, $shape);
  }

  @Override
  public boolean removeShape(AndroidShape $shape) {
    if (!$shape.hasParent() || $shape.getParent() != this) return false;
    
    $shape.setParent(null);
    return shapes.remove($shape);
  }

  @Override
  public AndroidShape removeShapeAt(int $index) {
    if ($index < 0 || $index >= shapes.size()) return null;
    
    shapes.get($index).setParent(null);
    return shapes.remove($index);
  }

  @Override
  public ArrayList<AndroidShape> getShapes() {
    return shapes;
  }

  @Override
  public void removeShapes() {
    int $i;
    for ($i = shapes.size()-1; $i >= 0; $i--){
      removeShapeAt($i);
    }
  }

  @Override
  public AndroidMain getMain() {
    return main;
  }
  
  @Override
  public AndroidMusicHandler getMusic() {
    return music;
  }
  
  @Override
  public AndroidSoundHandler getSound() {
    return sound;
  }
  
  @Override
  public void remove() {
    main.queueScreenRemoval(this);
    hasParent = false;
  }
  
  @Override
  public void add() {
    main.queueScreenAddition(this);
    hasParent = true;
  }
  
  
  
  
}




Java Source Code List

com.gamepatriot.androidframework.framework.AndroidAnimationData.java
com.gamepatriot.androidframework.framework.AndroidAtlas.java
com.gamepatriot.androidframework.framework.AndroidBasicShape.java
com.gamepatriot.androidframework.framework.AndroidGameData.java
com.gamepatriot.androidframework.framework.AndroidImage.java
com.gamepatriot.androidframework.framework.AndroidInputter.java
com.gamepatriot.androidframework.framework.AndroidMain.java
com.gamepatriot.androidframework.framework.AndroidMusicHandler.java
com.gamepatriot.androidframework.framework.AndroidPool.java
com.gamepatriot.androidframework.framework.AndroidRenderer.java
com.gamepatriot.androidframework.framework.AndroidScreen.java
com.gamepatriot.androidframework.framework.AndroidShape.java
com.gamepatriot.androidframework.framework.AndroidSoundHandler.java
com.gamepatriot.framework2d.classes.FPS.java
com.gamepatriot.framework2d.implementation.AnimationData.java
com.gamepatriot.framework2d.implementation.Atlas.java
com.gamepatriot.framework2d.implementation.BasicShape.java
com.gamepatriot.framework2d.implementation.GameData.java
com.gamepatriot.framework2d.implementation.Image.java
com.gamepatriot.framework2d.implementation.Inputter.java
com.gamepatriot.framework2d.implementation.Main.java
com.gamepatriot.framework2d.implementation.MusicHandler.java
com.gamepatriot.framework2d.implementation.Pool.java
com.gamepatriot.framework2d.implementation.Renderer.java
com.gamepatriot.framework2d.implementation.Screen.java
com.gamepatriot.framework2d.implementation.Shape.java
com.gamepatriot.framework2d.implementation.SoundHandler.java
com.gamepatriot.framework2d.screens.Example.java