Android Open Source - java-androidframework Main






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 2s  . c o m*/
import java.util.ArrayList;

import android.app.Activity;
import android.graphics.Bitmap.Config;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Window;
import android.view.WindowManager;

import com.gamepatriot.androidframework.framework.AndroidGameData;
import com.gamepatriot.androidframework.framework.AndroidInputter;
import com.gamepatriot.androidframework.framework.AndroidMain;
import com.gamepatriot.androidframework.framework.AndroidMusicHandler;
import com.gamepatriot.androidframework.framework.AndroidRenderer;
import com.gamepatriot.androidframework.framework.AndroidScreen;
import com.gamepatriot.androidframework.framework.AndroidSoundHandler;
import com.gamepatriot.framework2d.implementation.Screen.ScreenID;

/**
 * The Main class acts as the backbone of the application by providing references to all key components of this application and by behaving as the application's primary activity. 
 * In addition, this class provides the canvas used for rendering the application's display, global configurations, and the application's startup directive.
 * 
 * @see AndroidMain
 * @author Pete Schmitz, May 9, 2013
 *
 */
public class Main extends Activity implements AndroidMain{
  
  //Global Configuration
  
  /** The maximum frames per second this application is allowed to render at. **/
  public static int FPS_MAX = 30;
  
  /** The bitmap color configuration this application should use. **/
  public static Config CONFIG = Config.ARGB_8888;
  
  /** Whether or not anti-aliasing should be applied to the display canvas. **/
  public static boolean ALLOW_ANTI_ALIASING = true;
  
  /** Whether or not dithering should be applied to the displaycanvas. **/
  public static boolean ALLOW_DITHER = true;
  
  /** The maximum amount of sound effects that can play at any given time. **/
  public static int AUDIO_STREAM_MAX = 2;
  
  /** The default canvas width, in pixels, that this application should use if {@link #RUN_NATIVE_RESOLUTION} isn't enforced. **/
  public static int DEFAULT_CANVAS_WIDTH = 800;
  
  /** The default canvas height, in pixels, that this application should use if {@link #RUN_NATIVE_RESOLUTION} isn't enforced. **/
  public static int DEFAULT_CANVAS_HEIGHT = 480;
  
  /** Whether or not the canvas should be built at the native resolution of the device running this application. **/
  public static boolean RUN_NATIVE_RESOLUTION = true;
  
    
  //Auto-detected constants
  
  /** The maximum millisecond delay that should be applied on this application's single thread. **/
  public static int MS_DELAY = 1000/FPS_MAX;
  
  /** The native pixel width of the device running this application. **/
  public static int DEVICE_WIDTH;
  
  /** The native pixel height of the device running this application. **/
  public static int DEVICE_HEIGHT;
  
  /** The Android software version of the device running this application. **/
  public static int DEVICE_VERSION;
  
  /** The amount of scaling along the X-axis that is currently being applied on the display canvas. **/
  public static float CANVAS_SCALE_X;
  
  /** The amount of scaling along the Y-axis that is currently being applied on the display canvas. **/
  public static float CANVAS_SCALE_Y;
  
  /** The pixel width of the display canvas being used. **/
  public static int CANVAS_WIDTH;
  
  /** The pixel height of the display canvas being used. **/
  public static int CANVAS_HEIGHT;
  
  /** Primary custom typeface to use in this application. **/
  public static Typeface DEFAULT_TYPEFACE;
  
  /** Font paint for referenced usage of {@link #DEFAULT_TYPEFACE}. **/
  public static Paint PAINT_TEXT_LARGE;
  
  /** Font paint for referenced usage of {@link #DEFAULT_TYPEFACE}. **/
  public static Paint PAINT_TEXT_MEDIUM;
  
  /** Font paint for referenced usage of {@link #DEFAULT_TYPEFACE}. **/
  public static Paint PAINT_TEXT_SMALL;
  
  
    
  //Containers
  
  /** Collection of {@link Screen}s to render on the display canvas. **/
  private ArrayList<Screen> screens;
  
  /** Primary {@link Renderer} that this application uses. **/
  private Renderer frameRenderer;
  
  /** Primary {@link Inputter} that this application uses. **/
  private Inputter inputter;
  
  /** Primary {@link SoundHandler} that this application uses. **/
  private SoundHandler sound;
  
  /** Primary {@link MusicHandler} that this application uses. **/
  private MusicHandler music;
  
  /** Primary {@link GameData} that this application uses. **/
  private GameData gameData;
  
  /** Container for screens that are awaiting removal via a call from {@link Screen#remove()}. **/
  private ArrayList<Screen> removalQueue;
  
  /** Container for screens that are awaiting addition via a call from {@link Screen#add()}. **/
  private ArrayList<Screen> addQueue;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // Remove title
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    
    // Set window flags
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
    // Find device version
    DEVICE_VERSION = Build.VERSION.SDK_INT;
    
    // Set default typeface
    DEFAULT_TYPEFACE = Typeface.createFromAsset(getAssets(), "fonts/GermaniaOne.ttf");
    getTextPaints();
    
    // Find device height/width
    DisplayMetrics $dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics($dm);
    DEVICE_WIDTH = $dm.widthPixels;
    DEVICE_HEIGHT = $dm.heightPixels;
    
    // Find canvas height/width
    CANVAS_WIDTH = RUN_NATIVE_RESOLUTION ? DEVICE_WIDTH : DEFAULT_CANVAS_WIDTH;
    CANVAS_HEIGHT = RUN_NATIVE_RESOLUTION ? DEVICE_HEIGHT : DEFAULT_CANVAS_HEIGHT;
    
    // Find scaling required
    CANVAS_SCALE_X = (float) DEVICE_WIDTH / (float) CANVAS_WIDTH;
    CANVAS_SCALE_Y = (float) DEVICE_HEIGHT / (float) CANVAS_HEIGHT;
    
    // Create sound and music handlers
    sound = new SoundHandler(this, true);
    music = new MusicHandler(this, true);
    
    // Create and set render view
    frameRenderer = new Renderer(this);
    setContentView(frameRenderer);
    
    // Create and set inputter
    inputter = new Inputter(frameRenderer);
    frameRenderer.setInputter(inputter);
    
    // Initialize containers
    screens = new ArrayList<Screen>();
    removalQueue = new ArrayList<Screen>();
    addQueue = new ArrayList<Screen>();
    
    // Initialize game-specific constructor
    constructGame();
  }
  
  @Override
  public void constructGame() {

    //Create game data
    gameData = new GameData(this);
    
    //Initialize atlas (images)
    Atlas.load(this);
    
    //Instantiate and display starting screen
    addScreen(ScreenID.EXAMPLE);
  }
  
  @Override
  protected void onPause() {
    super.onPause();
    
    frameRenderer.pause();
    inputter.pause();
    music.disableMusic();
  }
  
  @Override
  protected void onResume() {
    super.onResume();
    
    frameRenderer.resume();
    inputter.resume();
    music.enableMusic();
  }
  
  @Override
  protected void onDestroy() {
    super.onDestroy();
    
    gameData.save();
  }
  
  @Override
  public void stop() {
    finish();
  }
  
  @Override
  public void onBackPressed() {
    
    /* Comment super call to prevent app from closing on back-press. */
    super.onBackPressed();
    
    inputter.insertBackPressed();
  }
  
  @Override
  public void addScreen(AndroidScreen $screen) {
    if (screens.indexOf($screen) > -1) return;
    
    addQueue.add((Screen)$screen);
  }
  
  @Override
  public void addScreenAt(int $index, AndroidScreen $screen) {
    
    // TODO: May cause CME; Use queue to modify screens array if so
    
    if (screens.indexOf($screen) > -1) return;
    
    if ($index < 0){
      screens.add(0, (Screen)$screen);
      return;
    }
    
    if ($index >= screens.size()){
      screens.add((Screen)$screen);
      return ;
    }
    
    screens.add($index, (Screen)$screen);
  }
  
  /** 
   * Conveniently instantiate a new screen and add it to the display list at the specified index.
   * @param $index    The position in Main's display list to add and render this new screen.
   * @param $sid      The {@link ScreenID} of the new {@link Screen} to add.
   */
  public void addScreenAt(int $index, ScreenID $sid) {
    
    AndroidScreen $screen = createScreen($sid);
    
    if ($screen == null) return;
    
    addScreenAt($index, $screen);
  }
  
  /**
   * Conveniently instantiate a new screen add it to the display list.
   * @param $sid      The {@link ScreenID} of the new {@link Screen} to add.
   * @return        Whether or not the screen was successfully instantiated and added.
   */
  public boolean addScreen(ScreenID $sid){
    
    AndroidScreen $screen = createScreen($sid);
    
    if ($screen == null) return false;
    
    addScreen($screen);
    
    return true;
  }
  
  @Override
  public void removeScreens() {
    screens.clear();
  }
  
  /**
   * Instantiate and return a new specificied class of type {@link Screen}.
   * @param $sid    The {@link ScreenID} of the requested Screen to instantiate.
   * @return      The instantiated Screen; null if invalid ScreenID.
   */
  public AndroidScreen createScreen(ScreenID $sid) {
    AndroidScreen $screen = $sid.createScreen(this);
    return $screen;
  }

  @Override
  public int getScreenIndex(AndroidScreen $screen) {
    return screens.indexOf($screen);
  }
  
  @Override
  public boolean removeScreen(AndroidScreen $screen) {
    return screens.remove($screen);
  }
  
  @Override
  public void queueScreenRemoval(AndroidScreen $screen) {
    if (screens.indexOf($screen) == -1) return;
    
    removalQueue.add((Screen) $screen);
  }
  
  @Override
  public void queueScreenAddition(AndroidScreen $screen) {
    addQueue.add((Screen) $screen);
  }
  
  public void queueStep(){
    clearQueueRemoval();
    clearQueueAdd();
  }
  
  @Override
  public void clearQueueRemoval() {
    
    if (removalQueue.size() <= 0) return;
    
    for (Screen $screen : removalQueue){
      screens.remove($screen);
    }
    
    removalQueue.clear();
  }
  
  public void clearQueueAdd() {
    
    if (addQueue.size() <= 0) return;
    
    for (Screen $screen : addQueue){
      if (screens.indexOf($screen) == -1) screens.add($screen);
    }
    
    addQueue.clear();
  }
  
  @Override
  public AndroidScreen removeScreenAt(int $index) {
    return screens.remove($index);
  }
  
  /** Return the display list. **/
  public ArrayList<Screen> getScreens() {
    return screens;
  }
  
  @Override
  public AndroidInputter getInputter() {
    return inputter;
  }
  
  @Override
  public AndroidMusicHandler getMusic() {
    return music;
  }
  
  @Override
  public AndroidSoundHandler getSound() {
    return sound;
  }
  
  @Override
  public AndroidGameData getGameData(){
    return gameData;
  }
  
  @Override
  public AndroidRenderer getRenderer(){
    return frameRenderer;
  }
  
  public void switchScreen(ScreenID $screen){
    switchScreen($screen.createScreen(this));
  }
  
  public void switchScreen(Screen $screen){
    for (Screen $removeScreen : screens) $removeScreen.remove();
    $screen.add();
  }
  
  private void getTextPaints(){
    
    Paint $small = new Paint();
    $small.setAntiAlias(ALLOW_ANTI_ALIASING);
    $small.setDither(ALLOW_DITHER || ALLOW_ANTI_ALIASING);
    $small.setTextAlign(Paint.Align.CENTER);
    $small.setTypeface(DEFAULT_TYPEFACE);
    $small.setAlpha(225);
    $small.setColor(Color.WHITE);
    $small.setTextSize(28);
    
    Paint $medium = new Paint($small);
    $medium.setTextSize(34);
    
    Paint $large = new Paint($small);
    $large.setTextSize(40);
    
    PAINT_TEXT_SMALL = $small;
    PAINT_TEXT_MEDIUM = $medium;
    PAINT_TEXT_LARGE = $large;
  }
  
}




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