Android Open Source - DivisionByZero End Dialog






From Project

Back to project page DivisionByZero.

License

The source code is released under:

Apache License

If you think the Android project DivisionByZero 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.ggstudios.divisionbyzero;
//w w  w  .ja  va2s  .com
import java.util.ArrayList;
import java.util.List;

import android.graphics.Color;
import android.graphics.Paint;

import com.ggstudios.divisionbyzero.Button.OnClickListener;
import com.ggstudios.divisionbyzero.Player.PlayerSnapshot;
import com.ggstudios.utils.DebugLog;

/**
 * This class defines the end screen where the user
 * can select options such as retry, or back to menu, etc.
 * 
 * This class needs to be able to update for animations,
 * handle touch events for button presses, and of course draw.
 * @author iDunnololz
 *
 */
public class EndDialog extends BaseDialog implements Clickable, Updatable {
  private static final String TAG = "EndScreen";

  private static final float WINDOW_WIDTH = 11;
  private static final float WINDOW_HEIGHT = 6f;

  private static final float TRANSITION_DURATION = 1f;

  private PictureBox title;

  private float time = 0;

  private boolean transitioning = false;

  private boolean loaded = false;

  private Button btnRetry, btnBack, btnOk;
  private List<Button> buttons = new ArrayList<Button>();

  /*
   * Scores: Kills, Lives, Money Earned, Score
   */
  private static final int NUM_SCORES = 4;
  private Label[] labels = new Label[NUM_SCORES];
  private DrawableString[] lblVals = new DrawableString[NUM_SCORES];
  private static final String[] LABEL_STRINGS = new String[] {
    "Kills",
    "Lives Left",
    "Earned",
    "Score"
  };

  private PlayerSnapshot snapshot;
  private boolean success;

  public EndDialog() {}

  public void build() {
    loaded = true;
    DebugLog.d(TAG, "build()");

    setBackgroundTexture(R.drawable.panel);

    w = WINDOW_WIDTH * Core.SDP;
    h = WINDOW_HEIGHT * Core.SDP;

    x = 0;
    y = 0;

    x = (Core.canvasWidth - w) / 2f;
    y = (Core.canvasHeight - h) / 2f;

    final float w = Core.SDP * 8f;
    final float h = Core.SDP * 1f;
    final float marginTop = Core.SDP_H;
    title = new PictureBox((this.w - w) / 2, marginTop, w, h, -1);

    final float marginL = (this.w / 2) - Core.SDP * 5f;
    final float marginR = (this.w / 2) + Core.SDP * 5f;
    final Paint paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setTextSize(Core.fm.getFontSize());
    paint.setAntiAlias(true);
    float y = title.y + title.h + marginTop;
    float margin = Core.SDP * 0.1f;
    for(int i = 0; i < labels.length; i++) {
      labels[i] = new Label(marginL, y, paint, LABEL_STRINGS[i]);
      lblVals[i] = new DrawableString(marginR, y, Core.fm, "100000", DrawableString.ALIGN_RIGHT);

      y += labels[i].h + margin;
    }

    final float btnW = Core.SDP * 2.5f;
    final float btnH = Core.SDP;
    
    final float mR = Core.SDP_H;
    final float marginBetween = Core.SDP_H * 0.5f;

    btnRetry = new Button(this.w - btnW - mR, this.h - btnH - mR, btnW, btnH, R.drawable.custom_button_bg, "Retry", paint);
    btnBack = new Button(this.w - btnW * 2 - mR - marginBetween, this.h - btnH - mR, btnW, btnH, R.drawable.custom_button_bg, "Back", paint);
    btnOk = new Button(this.w - btnW - mR, this.h - btnH - mR, btnW, btnH, R.drawable.custom_button_bg, "Ok", paint);
    
    btnRetry.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(Button sender) {
        hide();
        Core.game.restart();
      }

    });

    btnBack.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(Button sender) {
        Core.handler.sendEmptyMessage(MainActivity.MSG_FINISH);
      }

    });
    
    btnOk.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(Button sender) {
        Core.handler.sendEmptyMessage(MainActivity.MSG_FINISH);
      }

    });

    if(snapshot != null) {
      // do some setup if we have data to setup
      lightSetup(success, snapshot);
    }

    super.refresh();
  }

  public void lightSetup(boolean success, PlayerSnapshot playerSnapshot) {
    this.snapshot = playerSnapshot;
    this.success = success;

    buttons.clear();
    
    if(success) {
      title.setTexture(R.drawable.mission_success_message);
      
      buttons.add(btnOk);
    } else {
      // failed...
      title.setTexture(R.drawable.mission_failed_message);
      
      buttons.add(btnBack);
      buttons.add(btnRetry);
    }

    lblVals[0].setText(String.valueOf(playerSnapshot.kills));
    if(playerSnapshot.lives < 0) {
      lblVals[1].setText(String.valueOf(0));
    } else {
      lblVals[1].setText(String.valueOf(playerSnapshot.lives));
    }
    lblVals[2].setText(String.valueOf(playerSnapshot.moneyEarned));
  }

  public void transitionIn() {
    transitioning = true;

    time = 0;

    transparency = 0;
    title.transparency = 0;

    Core.gu.addUiUpdatable(this);
  }

  @Override
  public boolean update(float dt) {
    time += dt;

    if(time >= TRANSITION_DURATION) {
      transitioning = false;
      return false;
    } else {
      float t = time/TRANSITION_DURATION;
      transparency = t*t;
      title.transparency = transparency;
      return true;
    }
  }
  
  @Override
  public boolean onTouchEvent(int action, float x_, float y_) {
    final float x = Core.originalTouchX - this.x;
    final float y = Core.originalTouchY - this.y;
    
    for(Button b : buttons)
      b.onTouchEvent(action, x, y);
    
    return true;
  }

  @Override
  public void draw(float offX, float offY) {
    super.draw(0, 0);
    if(transitioning) {
      title.draw(x, y);
    } else {
      title.draw(x, y);

      for(int i = 0; i < labels.length; i++) {
        labels[i].draw(x, y);
        lblVals[i].draw(x, y);
      }

      for(Button b : buttons)
        b.draw(x, y);
    }
  }

  @Override
  public void refresh() {
    if(!loaded) return;

    super.refresh();
    title.refresh();

    for(int i = 0; i < labels.length; i++) {
      labels[i].refresh();
      lblVals[i].refresh();
    }

    btnRetry.refresh();
    btnBack.refresh();
    btnOk.refresh();
  }
  
  @Override
  public boolean isCancelable() {
    return false;
  }
  
  @Override
  public void dismiss() {
    // if the user tries to dismiss this dialog, default to the back button...
    btnBack.click();
  }
}




Java Source Code List

com.ggstudios.divisionbyzero.ActivityAbout.java
com.ggstudios.divisionbyzero.ActivityLevelSelection.java
com.ggstudios.divisionbyzero.ActivityMainMenu.java
com.ggstudios.divisionbyzero.ActivitySettings.java
com.ggstudios.divisionbyzero.ActivitySplashScreen.java
com.ggstudios.divisionbyzero.ApplicationMain.java
com.ggstudios.divisionbyzero.BaseActivity.java
com.ggstudios.divisionbyzero.BaseDialog.java
com.ggstudios.divisionbyzero.BulletManager.java
com.ggstudios.divisionbyzero.Bullet.java
com.ggstudios.divisionbyzero.Button.java
com.ggstudios.divisionbyzero.Circle.java
com.ggstudios.divisionbyzero.ClickableCollection.java
com.ggstudios.divisionbyzero.Clickable.java
com.ggstudios.divisionbyzero.ConfirmDialog.java
com.ggstudios.divisionbyzero.Core.java
com.ggstudios.divisionbyzero.CustomGLSurfaceView.java
com.ggstudios.divisionbyzero.DialogManager.java
com.ggstudios.divisionbyzero.DrawableCollection.java
com.ggstudios.divisionbyzero.DrawableString.java
com.ggstudios.divisionbyzero.Drawable.java
com.ggstudios.divisionbyzero.EndDialog.java
com.ggstudios.divisionbyzero.Event.java
com.ggstudios.divisionbyzero.ExplosionGenerator.java
com.ggstudios.divisionbyzero.ExtrasManager.java
com.ggstudios.divisionbyzero.FontManager.java
com.ggstudios.divisionbyzero.GameRenderer.java
com.ggstudios.divisionbyzero.GameUpdater.java
com.ggstudios.divisionbyzero.Game.java
com.ggstudios.divisionbyzero.Grid.java
com.ggstudios.divisionbyzero.Hud.java
com.ggstudios.divisionbyzero.InGameMenu.java
com.ggstudios.divisionbyzero.InfoDialog.java
com.ggstudios.divisionbyzero.Label.java
com.ggstudios.divisionbyzero.LevelManager.java
com.ggstudios.divisionbyzero.LevelMap.java
com.ggstudios.divisionbyzero.LineGuide.java
com.ggstudios.divisionbyzero.MainActivity.java
com.ggstudios.divisionbyzero.Map.java
com.ggstudios.divisionbyzero.MessageDialog.java
com.ggstudios.divisionbyzero.ParticleEngine.java
com.ggstudios.divisionbyzero.PathFinder.java
com.ggstudios.divisionbyzero.PauseMenu.java
com.ggstudios.divisionbyzero.PictureBox.java
com.ggstudios.divisionbyzero.Player.java
com.ggstudios.divisionbyzero.PopupMenu.java
com.ggstudios.divisionbyzero.Rectangle.java
com.ggstudios.divisionbyzero.Shader.java
com.ggstudios.divisionbyzero.SpawnManager.java
com.ggstudios.divisionbyzero.SpriteAnimation.java
com.ggstudios.divisionbyzero.SpriteManager.java
com.ggstudios.divisionbyzero.Sprite.java
com.ggstudios.divisionbyzero.Statbar.java
com.ggstudios.divisionbyzero.StateManager.java
com.ggstudios.divisionbyzero.TargetRectangle.java
com.ggstudios.divisionbyzero.TextureManager.java
com.ggstudios.divisionbyzero.TowerInfoDialog.java
com.ggstudios.divisionbyzero.TowerLibrary.java
com.ggstudios.divisionbyzero.TowerManager.java
com.ggstudios.divisionbyzero.TowerMenu.java
com.ggstudios.divisionbyzero.Tower.java
com.ggstudios.divisionbyzero.UpdatableCollection.java
com.ggstudios.divisionbyzero.Updatable.java
com.ggstudios.divisionbyzero.UpgradeDialog.java
com.ggstudios.divisionbyzero.Utils.java
com.ggstudios.divisionbyzero.VBO.java
com.ggstudios.divisionbyzero.WaveControlDialog.java
com.ggstudios.divisionbyzero.WaveControlHud.java
com.ggstudios.divisionbyzero.ZoomControl.java
com.ggstudios.utils.BitmapUtils.java
com.ggstudios.utils.BufferUtils.java
com.ggstudios.utils.DebugLog.java
com.ggstudios.utils.ShaderUtils.java
com.ggstudios.widget.LevelMapBackground.java
fix.android.opengl.GLES20.java