12b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm/* 22b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * Copyright (C) 2010 The Android Open Source Project 32b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * 42b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * Licensed under the Apache License, Version 2.0 (the "License"); 52b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * you may not use this file except in compliance with the License. 62b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * You may obtain a copy of the License at 72b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * 82b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * http://www.apache.org/licenses/LICENSE-2.0 92b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * 102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * Unless required by applicable law or agreed to in writing, software 112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * distributed under the License is distributed on an "AS IS" BASIS, 122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * See the License for the specific language governing permissions and 142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * limitations under the License. 152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm */ 162b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmpackage com.replica.replicaisland; 182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport java.lang.reflect.InvocationTargetException; 202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.app.Activity; 222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.content.Context; 232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.content.SharedPreferences; 242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.graphics.Canvas; 252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.os.Bundle; 262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.os.SystemClock; 272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.util.AttributeSet; 282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.view.View; 292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.widget.Button; 302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.widget.TextView; 312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmpublic class GameOverActivity extends Activity { 332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private float mPearlPercent = 100.0f; 342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private float mEnemiesDestroyedPercent = 100.0f; 352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private float mPlayTime = 0.0f; 362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mEnding = AnimationPlayerActivity.KABOCHA_ENDING; 372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private IncrementingTextView mPearlView; 392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private IncrementingTextView mEnemiesDestroyedView; 402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private IncrementingTextView mPlayTimeView; 412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private TextView mEndingView; 422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public static class IncrementingTextView extends TextView { 442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private static final int INCREMENT_DELAY_MS = 2 * 1000; 452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private static final int MODE_NONE = 0; 462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private static final int MODE_PERCENT = 1; 472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private static final int MODE_TIME = 2; 482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private float mTargetValue; 502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private float mIncrement = 1.0f; 512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private float mCurrentValue = 0.0f; 522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private long mLastTime = 0; 532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mMode = MODE_NONE; 542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public IncrementingTextView(Context context) { 562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm super(context); 572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public IncrementingTextView(Context context, AttributeSet attrs) { 602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm super(context, attrs); 612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public IncrementingTextView(Context context, AttributeSet attrs, int defStyle) { 642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm super(context, attrs, defStyle); 652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public void setTargetValue(float target) { 682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mTargetValue = target; 692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm postInvalidate(); 702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public void setMode(int mode) { 732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mMode = mode; 742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public void setIncrement(float increment) { 772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mIncrement = increment; 782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm @Override 812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public void onDraw(Canvas canvas) { 822b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final long time = SystemClock.uptimeMillis(); 832b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final long delta = time - mLastTime; 842b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (delta > INCREMENT_DELAY_MS) { 852b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (mCurrentValue < mTargetValue) { 862b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mCurrentValue += mIncrement; 872b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mCurrentValue = Math.min(mCurrentValue, mTargetValue); 882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm String value; 892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (mMode == MODE_PERCENT) { 902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm value = mCurrentValue + "%"; 912b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } else if (mMode == MODE_TIME) { 922b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm float seconds = mCurrentValue; 932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm float minutes = seconds / 60.0f; 942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm float hours = minutes / 60.0f; 952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm int totalHours = (int)Math.floor(hours); 972b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm float totalHourMinutes = totalHours * 60.0f; 982b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm int totalMinutes = (int)(minutes - totalHourMinutes); 992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm float totalMinuteSeconds = totalMinutes * 60.0f; 1002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm float totalHourSeconds = totalHourMinutes * 60.0f; 1012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm int totalSeconds = (int)(seconds - (totalMinuteSeconds + totalHourSeconds)); 1022b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm value = totalHours + ":" + totalMinutes + ":" + totalSeconds; 1042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } else { 1052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm value = mCurrentValue + ""; 1062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm setText(value); 1082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm postInvalidateDelayed(INCREMENT_DELAY_MS); 1092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm super.onDraw(canvas); 1122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private View.OnClickListener sOKClickListener = new View.OnClickListener() { 1162b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public void onClick(View v) { 1172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm finish(); 1182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (UIConstants.mOverridePendingTransition != null) { 1192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm try { 1202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm UIConstants.mOverridePendingTransition.invoke(GameOverActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out); 1212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (InvocationTargetException ite) { 1222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Invocation Target Exception"); 1232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (IllegalAccessException ie) { 1242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Illegal Access Exception"); 1252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm }; 1292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm @Override 1312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public void onCreate(Bundle savedInstanceState) { 1322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm super.onCreate(savedInstanceState); 1332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm setContentView(R.layout.game_over); 1342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlView = (IncrementingTextView)findViewById(R.id.pearl_percent); 1362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mEnemiesDestroyedView = (IncrementingTextView)findViewById(R.id.enemy_percent); 1372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPlayTimeView = (IncrementingTextView)findViewById(R.id.total_play_time); 1382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mEndingView = (TextView)findViewById(R.id.ending); 1392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE); 1412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final float playTime = prefs.getFloat(PreferenceConstants.PREFERENCE_TOTAL_GAME_TIME, 0.0f); 1422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int ending = prefs.getInt(PreferenceConstants.PREFERENCE_LAST_ENDING, -1); 1432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int pearlsCollected = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_COLLECTED, 0); 1442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int pearlsTotal = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_TOTAL, 0); 1452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int enemies = prefs.getInt(PreferenceConstants.PREFERENCE_ROBOTS_DESTROYED, 0); 1472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (pearlsCollected > 0 && pearlsTotal > 0) { 1492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlView.setTargetValue((int)((pearlsCollected / (float)pearlsTotal) * 100.0f)); 1502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } else { 1512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlView.setText("--"); 1522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlView.setMode(IncrementingTextView.MODE_PERCENT); 1542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mEnemiesDestroyedView.setTargetValue(enemies); 1552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPlayTimeView.setTargetValue(playTime); 1562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPlayTimeView.setIncrement(90.0f); 1572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPlayTimeView.setMode(IncrementingTextView.MODE_TIME); 1582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (ending == AnimationPlayerActivity.KABOCHA_ENDING) { 1602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mEndingView.setText(R.string.game_results_kabocha_ending); 1612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } else if (ending == AnimationPlayerActivity.ROKUDOU_ENDING) { 1622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mEndingView.setText(R.string.game_results_rokudou_ending); 1632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } else { 1642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mEndingView.setText(R.string.game_results_wanda_ending); 1652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Button okButton = (Button)findViewById(R.id.ok); 1682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm okButton.setOnClickListener(sOKClickListener); 1692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm} 174