Java程序  |  174行  |  6.6 KB

/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * 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.replica.replicaisland;

import java.lang.reflect.InvocationTargetException;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class GameOverActivity extends Activity {
	private float mPearlPercent = 100.0f;
	private float mEnemiesDestroyedPercent = 100.0f;
	private float mPlayTime = 0.0f;
	private int mEnding = AnimationPlayerActivity.KABOCHA_ENDING;
	
	private IncrementingTextView mPearlView;
	private IncrementingTextView mEnemiesDestroyedView;
	private IncrementingTextView mPlayTimeView;
	private TextView mEndingView;
	
    public static class IncrementingTextView extends TextView {
    	private static final int INCREMENT_DELAY_MS = 2 * 1000;
    	private static final int MODE_NONE = 0;
    	private static final int MODE_PERCENT = 1;
    	private static final int MODE_TIME = 2;
    	
    	private float mTargetValue;
    	private float mIncrement = 1.0f;
    	private float mCurrentValue = 0.0f;
    	private long mLastTime = 0;
    	private int mMode = MODE_NONE;
    	
    	public IncrementingTextView(Context context) {
            super(context);
        }
        
        public IncrementingTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        
        public IncrementingTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
        
        public void setTargetValue(float target) {
        	mTargetValue = target;
        	postInvalidate();
        }
        
        public void setMode(int mode) {
        	mMode = mode;
        }
        
        public void setIncrement(float increment) {
        	mIncrement = increment;
        }
        
        @Override
        public void onDraw(Canvas canvas) {
            final long time = SystemClock.uptimeMillis();
            final long delta = time - mLastTime;
            if (delta > INCREMENT_DELAY_MS) {
            	if (mCurrentValue < mTargetValue) {
            		mCurrentValue += mIncrement;
            		mCurrentValue = Math.min(mCurrentValue, mTargetValue);
            		String value;
            		if (mMode == MODE_PERCENT) {
            			value = mCurrentValue + "%";
            		} else if (mMode == MODE_TIME) {
            			float seconds = mCurrentValue;
            			float minutes = seconds / 60.0f;
            			float hours = minutes / 60.0f;
            			
            			int totalHours = (int)Math.floor(hours);
            			float totalHourMinutes = totalHours * 60.0f;
            			int totalMinutes = (int)(minutes - totalHourMinutes);
            			float totalMinuteSeconds = totalMinutes * 60.0f;
            			float totalHourSeconds = totalHourMinutes * 60.0f;
            			int totalSeconds = (int)(seconds - (totalMinuteSeconds + totalHourSeconds));
            			
            			value = totalHours + ":" + totalMinutes + ":" + totalSeconds;
            		} else {
            			value = mCurrentValue + "";
            		}
            		setText(value);
                    postInvalidateDelayed(INCREMENT_DELAY_MS);
            	}
            }
            super.onDraw(canvas);
        }
    }
    
    private View.OnClickListener sOKClickListener = new View.OnClickListener() {
        public void onClick(View v) {
        	finish();
        	if (UIConstants.mOverridePendingTransition != null) {
   		       try {
   		    	  UIConstants.mOverridePendingTransition.invoke(GameOverActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
   		       } catch (InvocationTargetException ite) {
   		           DebugLog.d("Activity Transition", "Invocation Target Exception");
   		       } catch (IllegalAccessException ie) {
   		    	   DebugLog.d("Activity Transition", "Illegal Access Exception");
   		       }
         	}
        }
    };
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game_over);
        
        mPearlView = (IncrementingTextView)findViewById(R.id.pearl_percent);
        mEnemiesDestroyedView = (IncrementingTextView)findViewById(R.id.enemy_percent);
        mPlayTimeView = (IncrementingTextView)findViewById(R.id.total_play_time);
        mEndingView = (TextView)findViewById(R.id.ending);
        
        SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE);
        final float playTime = prefs.getFloat(PreferenceConstants.PREFERENCE_TOTAL_GAME_TIME, 0.0f);
        final int ending = prefs.getInt(PreferenceConstants.PREFERENCE_LAST_ENDING, -1);
        final int pearlsCollected = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_COLLECTED, 0);
        final int pearlsTotal = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_TOTAL, 0);
     
        final int enemies = prefs.getInt(PreferenceConstants.PREFERENCE_ROBOTS_DESTROYED, 0);
        
        if (pearlsCollected > 0 && pearlsTotal > 0) {
        	mPearlView.setTargetValue((int)((pearlsCollected / (float)pearlsTotal) * 100.0f));
        } else {
        	mPearlView.setText("--");
        }
        mPearlView.setMode(IncrementingTextView.MODE_PERCENT);
        mEnemiesDestroyedView.setTargetValue(enemies);
        mPlayTimeView.setTargetValue(playTime);
        mPlayTimeView.setIncrement(90.0f);
        mPlayTimeView.setMode(IncrementingTextView.MODE_TIME);
        
        if (ending == AnimationPlayerActivity.KABOCHA_ENDING) {
        	mEndingView.setText(R.string.game_results_kabocha_ending);
        } else if (ending == AnimationPlayerActivity.ROKUDOU_ENDING) {
        	mEndingView.setText(R.string.game_results_rokudou_ending);
        } else {
        	mEndingView.setText(R.string.game_results_wanda_ending);
        }
        
        Button okButton = (Button)findViewById(R.id.ok);
        okButton.setOnClickListener(sOKClickListener);

	}
	
	
}