1cfd74d65d832137e20e193c960802afba73b5d38sm/* 23c1e67e433728684b5f228c5d4f3e5b1457bb271sm * Copyright (C) 2010 The Android Open Source Project 3cfd74d65d832137e20e193c960802afba73b5d38sm * 4cfd74d65d832137e20e193c960802afba73b5d38sm * Licensed under the Apache License, Version 2.0 (the "License"); 5cfd74d65d832137e20e193c960802afba73b5d38sm * you may not use this file except in compliance with the License. 6cfd74d65d832137e20e193c960802afba73b5d38sm * You may obtain a copy of the License at 7cfd74d65d832137e20e193c960802afba73b5d38sm * 8cfd74d65d832137e20e193c960802afba73b5d38sm * http://www.apache.org/licenses/LICENSE-2.0 9cfd74d65d832137e20e193c960802afba73b5d38sm * 10cfd74d65d832137e20e193c960802afba73b5d38sm * Unless required by applicable law or agreed to in writing, software 11cfd74d65d832137e20e193c960802afba73b5d38sm * distributed under the License is distributed on an "AS IS" BASIS, 12cfd74d65d832137e20e193c960802afba73b5d38sm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cfd74d65d832137e20e193c960802afba73b5d38sm * See the License for the specific language governing permissions and 14cfd74d65d832137e20e193c960802afba73b5d38sm * limitations under the License. 15cfd74d65d832137e20e193c960802afba73b5d38sm */ 16cfd74d65d832137e20e193c960802afba73b5d38sm 17cfd74d65d832137e20e193c960802afba73b5d38smpackage com.replica.replicaisland; 18cfd74d65d832137e20e193c960802afba73b5d38sm 192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport java.lang.reflect.InvocationTargetException; 202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport java.lang.reflect.Method; 212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 22cfd74d65d832137e20e193c960802afba73b5d38smimport android.app.Activity; 23cfd74d65d832137e20e193c960802afba73b5d38smimport android.app.AlertDialog; 24cfd74d65d832137e20e193c960802afba73b5d38smimport android.app.Dialog; 25cfd74d65d832137e20e193c960802afba73b5d38smimport android.content.DialogInterface; 26cfd74d65d832137e20e193c960802afba73b5d38smimport android.content.Intent; 27cfd74d65d832137e20e193c960802afba73b5d38smimport android.content.SharedPreferences; 28cfd74d65d832137e20e193c960802afba73b5d38smimport android.hardware.Sensor; 29cfd74d65d832137e20e193c960802afba73b5d38smimport android.hardware.SensorEvent; 30cfd74d65d832137e20e193c960802afba73b5d38smimport android.hardware.SensorEventListener; 31cfd74d65d832137e20e193c960802afba73b5d38smimport android.hardware.SensorManager; 32cfd74d65d832137e20e193c960802afba73b5d38smimport android.media.AudioManager; 33cfd74d65d832137e20e193c960802afba73b5d38smimport android.os.Bundle; 34cfd74d65d832137e20e193c960802afba73b5d38smimport android.os.Debug; 35cfd74d65d832137e20e193c960802afba73b5d38smimport android.util.DisplayMetrics; 36cfd74d65d832137e20e193c960802afba73b5d38smimport android.view.KeyEvent; 37cfd74d65d832137e20e193c960802afba73b5d38smimport android.view.Menu; 38cfd74d65d832137e20e193c960802afba73b5d38smimport android.view.MenuItem; 39cfd74d65d832137e20e193c960802afba73b5d38smimport android.view.MotionEvent; 40cfd74d65d832137e20e193c960802afba73b5d38smimport android.view.View; 41cfd74d65d832137e20e193c960802afba73b5d38smimport android.view.animation.Animation; 42cfd74d65d832137e20e193c960802afba73b5d38smimport android.view.animation.AnimationUtils; 432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.widget.TextView; 44cfd74d65d832137e20e193c960802afba73b5d38sm 45cfd74d65d832137e20e193c960802afba73b5d38sm/** 46cfd74d65d832137e20e193c960802afba73b5d38sm * Core activity for the game. Sets up a surface view for OpenGL, bootstraps 47cfd74d65d832137e20e193c960802afba73b5d38sm * the game engine, and manages UI events. Also manages game progression, 48cfd74d65d832137e20e193c960802afba73b5d38sm * transitioning to other activites, save game, and input events. 49cfd74d65d832137e20e193c960802afba73b5d38sm */ 50cfd74d65d832137e20e193c960802afba73b5d38smpublic class AndouKun extends Activity implements SensorEventListener { 51cfd74d65d832137e20e193c960802afba73b5d38sm private static final int ACTIVITY_CHANGE_LEVELS = 0; 52cfd74d65d832137e20e193c960802afba73b5d38sm private static final int ACTIVITY_CONVERSATION = 1; 53cfd74d65d832137e20e193c960802afba73b5d38sm private static final int ACTIVITY_DIARY = 2; 54cfd74d65d832137e20e193c960802afba73b5d38sm private static final int ACTIVITY_ANIMATION_PLAYER = 3; 55cfd74d65d832137e20e193c960802afba73b5d38sm 56cfd74d65d832137e20e193c960802afba73b5d38sm private static final int CHANGE_LEVEL_ID = Menu.FIRST; 57cfd74d65d832137e20e193c960802afba73b5d38sm private static final int TEST_ANIMATION_ID = CHANGE_LEVEL_ID + 1; 58cfd74d65d832137e20e193c960802afba73b5d38sm private static final int TEST_DIARY_ID = CHANGE_LEVEL_ID + 2; 59cfd74d65d832137e20e193c960802afba73b5d38sm private static final int METHOD_TRACING_ID = CHANGE_LEVEL_ID + 3; 60cfd74d65d832137e20e193c960802afba73b5d38sm 61cfd74d65d832137e20e193c960802afba73b5d38sm private static final int ROLL_TO_FACE_BUTTON_DELAY = 400; 62cfd74d65d832137e20e193c960802afba73b5d38sm 63cfd74d65d832137e20e193c960802afba73b5d38sm public static final int QUIT_GAME_DIALOG = 0; 64cfd74d65d832137e20e193c960802afba73b5d38sm 65cfd74d65d832137e20e193c960802afba73b5d38sm // If the version is a negative number, debug features (logging and a debug menu) 66cfd74d65d832137e20e193c960802afba73b5d38sm // are enabled. 672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm public static final int VERSION = 14; 68cfd74d65d832137e20e193c960802afba73b5d38sm 69cfd74d65d832137e20e193c960802afba73b5d38sm private GLSurfaceView mGLSurfaceView; 70cfd74d65d832137e20e193c960802afba73b5d38sm private Game mGame; 71cfd74d65d832137e20e193c960802afba73b5d38sm private boolean mMethodTracing; 72cfd74d65d832137e20e193c960802afba73b5d38sm private int mLevelRow; 73cfd74d65d832137e20e193c960802afba73b5d38sm private int mLevelIndex; 742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private float mTotalGameTime; 752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mRobotsDestroyed; 762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mPearlsCollected; 772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mPearlsTotal; 782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mLastEnding = -1; 792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mLinearMode = 0; 802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private int mDifficulty = 1; 812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private boolean mExtrasUnlocked; 82cfd74d65d832137e20e193c960802afba73b5d38sm private SensorManager mSensorManager; 83cfd74d65d832137e20e193c960802afba73b5d38sm private SharedPreferences.Editor mPrefsEditor; 84cfd74d65d832137e20e193c960802afba73b5d38sm private long mLastTouchTime = 0L; 85cfd74d65d832137e20e193c960802afba73b5d38sm private long mLastRollTime = 0L; 86cfd74d65d832137e20e193c960802afba73b5d38sm private View mPauseMessage = null; 87cfd74d65d832137e20e193c960802afba73b5d38sm private View mWaitMessage = null; 882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private View mLevelNameBox = null; 892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private TextView mLevelName = null; 90cfd74d65d832137e20e193c960802afba73b5d38sm private Animation mWaitFadeAnimation = null; 91cfd74d65d832137e20e193c960802afba73b5d38sm 92cfd74d65d832137e20e193c960802afba73b5d38sm private EventReporter mEventReporter; 93cfd74d65d832137e20e193c960802afba73b5d38sm private Thread mEventReporterThread; 94cfd74d65d832137e20e193c960802afba73b5d38sm 95cfd74d65d832137e20e193c960802afba73b5d38sm private long mSessionId = 0L; 96cfd74d65d832137e20e193c960802afba73b5d38sm 97cfd74d65d832137e20e193c960802afba73b5d38sm /** Called when the activity is first created. */ 98cfd74d65d832137e20e193c960802afba73b5d38sm @Override 99cfd74d65d832137e20e193c960802afba73b5d38sm protected void onCreate(Bundle savedInstanceState) { 100cfd74d65d832137e20e193c960802afba73b5d38sm super.onCreate(savedInstanceState); 101e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm 1022b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE); 1032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean debugLogs = prefs.getBoolean(PreferenceConstants.PREFERENCE_ENABLE_DEBUG, false); 104e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm 105e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm if (VERSION < 0 || debugLogs) { 106cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.setDebugLogging(true); 107cfd74d65d832137e20e193c960802afba73b5d38sm } else { 108cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.setDebugLogging(false); 109cfd74d65d832137e20e193c960802afba73b5d38sm } 110cfd74d65d832137e20e193c960802afba73b5d38sm 111cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.d("AndouKun", "onCreate"); 112cfd74d65d832137e20e193c960802afba73b5d38sm 113cfd74d65d832137e20e193c960802afba73b5d38sm 114cfd74d65d832137e20e193c960802afba73b5d38sm setContentView(R.layout.main); 115cfd74d65d832137e20e193c960802afba73b5d38sm mGLSurfaceView = (GLSurfaceView) findViewById(R.id.glsurfaceview); 116cfd74d65d832137e20e193c960802afba73b5d38sm mPauseMessage = findViewById(R.id.pausedMessage); 117cfd74d65d832137e20e193c960802afba73b5d38sm mWaitMessage = findViewById(R.id.pleaseWaitMessage); 1182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelNameBox = findViewById(R.id.levelNameBox); 1192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelName = (TextView)findViewById(R.id.levelName); 120cfd74d65d832137e20e193c960802afba73b5d38sm mWaitFadeAnimation = AnimationUtils.loadAnimation(this, R.anim.wait_message_fade); 121cfd74d65d832137e20e193c960802afba73b5d38sm 122cfd74d65d832137e20e193c960802afba73b5d38sm 123cfd74d65d832137e20e193c960802afba73b5d38sm //mGLSurfaceView.setGLWrapper(new GLErrorLogger()); 124cfd74d65d832137e20e193c960802afba73b5d38sm mGLSurfaceView.setEGLConfigChooser(false); // 16 bit, no z-buffer 1259d4cc2572d37983607df38b0f4216ed76ac51814sm //mGLSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR | GLSurfaceView.DEBUG_LOG_GL_CALLS); 126cfd74d65d832137e20e193c960802afba73b5d38sm mGame = new Game(); 127cfd74d65d832137e20e193c960802afba73b5d38sm mGame.setSurfaceView(mGLSurfaceView); 128cfd74d65d832137e20e193c960802afba73b5d38sm DisplayMetrics dm = new DisplayMetrics(); 129cfd74d65d832137e20e193c960802afba73b5d38sm getWindowManager().getDefaultDisplay().getMetrics(dm); 130cfd74d65d832137e20e193c960802afba73b5d38sm 131cfd74d65d832137e20e193c960802afba73b5d38sm int defaultWidth = 480; 132cfd74d65d832137e20e193c960802afba73b5d38sm int defaultHeight = 320; 133cfd74d65d832137e20e193c960802afba73b5d38sm if (dm.widthPixels != defaultWidth) { 134cfd74d65d832137e20e193c960802afba73b5d38sm float ratio =((float)dm.widthPixels) / dm.heightPixels; 135cfd74d65d832137e20e193c960802afba73b5d38sm defaultWidth = (int)(defaultHeight * ratio); 136cfd74d65d832137e20e193c960802afba73b5d38sm } 137cfd74d65d832137e20e193c960802afba73b5d38sm 1382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 139cfd74d65d832137e20e193c960802afba73b5d38sm mLevelRow = 0; 140cfd74d65d832137e20e193c960802afba73b5d38sm mLevelIndex = 0; 141cfd74d65d832137e20e193c960802afba73b5d38sm 142e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm 143cfd74d65d832137e20e193c960802afba73b5d38sm mPrefsEditor = prefs.edit(); 1442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // Make sure that old game information is cleared when we start a new game. 1456cb78e547641bcab6f18ec34badca0840e000992Keun young Park // CTS: clear settings to force start from beginning 1466cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_LEVEL_ROW); 1476cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_LEVEL_INDEX); 1486cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_LEVEL_COMPLETED); 1496cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_LINEAR_MODE); 1506cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_TOTAL_GAME_TIME); 1516cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_PEARLS_COLLECTED); 1526cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_PEARLS_TOTAL); 1536cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_ROBOTS_DESTROYED); 1546cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.remove(PreferenceConstants.PREFERENCE_DIFFICULTY); 1556cb78e547641bcab6f18ec34badca0840e000992Keun young Park mPrefsEditor.commit(); 1562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelRow = prefs.getInt(PreferenceConstants.PREFERENCE_LEVEL_ROW, 0); 1592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelIndex = prefs.getInt(PreferenceConstants.PREFERENCE_LEVEL_INDEX, 0); 1602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm int completed = prefs.getInt(PreferenceConstants.PREFERENCE_LEVEL_COMPLETED, 0); 1612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mTotalGameTime = prefs.getFloat(PreferenceConstants.PREFERENCE_TOTAL_GAME_TIME, 0.0f); 1622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mRobotsDestroyed = prefs.getInt(PreferenceConstants.PREFERENCE_ROBOTS_DESTROYED, 0); 1632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlsCollected = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_COLLECTED, 0); 1642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlsTotal = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_TOTAL, 0); 1652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLinearMode = prefs.getInt(PreferenceConstants.PREFERENCE_LINEAR_MODE, 1662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm getIntent().getBooleanExtra("linearMode", false) ? 1 : 0); 1672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mExtrasUnlocked = prefs.getBoolean(PreferenceConstants.PREFERENCE_EXTRAS_UNLOCKED, false); 1682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mDifficulty = prefs.getInt(PreferenceConstants.PREFERENCE_DIFFICULTY, getIntent().getIntExtra("difficulty", 1)); 1692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mGame.bootstrap(this, dm.widthPixels, dm.heightPixels, defaultWidth, defaultHeight, mDifficulty); 1712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mGLSurfaceView.setRenderer(mGame.getRenderer()); 1722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm int levelTreeResource = R.xml.level_tree; 1752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (mLinearMode != 0) { 1762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm levelTreeResource = R.xml.linear_level_tree; 1772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 1782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 179cfd74d65d832137e20e193c960802afba73b5d38sm 180cfd74d65d832137e20e193c960802afba73b5d38sm // Android activity lifecycle rules make it possible for this activity to be created 181cfd74d65d832137e20e193c960802afba73b5d38sm // and come to the foreground without the MainMenu Activity ever running, so in that 182cfd74d65d832137e20e193c960802afba73b5d38sm // case we need to make sure that this static data is valid. 1832b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (!LevelTree.isLoaded(levelTreeResource)) { 1842b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm LevelTree.loadLevelTree(levelTreeResource, this); 185cfd74d65d832137e20e193c960802afba73b5d38sm LevelTree.loadAllDialog(this); 186cfd74d65d832137e20e193c960802afba73b5d38sm } 187cfd74d65d832137e20e193c960802afba73b5d38sm 1882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (getIntent().getBooleanExtra("startAtLevelSelect", false)) { 1892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Intent i = new Intent(this, LevelSelectActivity.class); 1902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm i.putExtra("unlockAll", true); 1912b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm startActivityForResult(i, ACTIVITY_CHANGE_LEVELS); 192cfd74d65d832137e20e193c960802afba73b5d38sm } else { 1932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (!LevelTree.levelIsValid(mLevelRow, mLevelIndex)) { 1942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // bad data? Let's try to recover. 1952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 1962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // is the row valid? 1972b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (LevelTree.rowIsValid(mLevelRow)) { 1982b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // In that case, just start the row over. 1992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelIndex = 0; 2002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm completed = 0; 2012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } else if (LevelTree.rowIsValid(mLevelRow - 1)) { 2022b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // If not, try to back up a row. 2032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelRow--; 2042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelIndex = 0; 2052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm completed = 0; 2062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 2072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 2082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 2092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (!LevelTree.levelIsValid(mLevelRow, mLevelIndex)) { 2102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // if all else fails, start the game over. 2112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelRow = 0; 2122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelIndex = 0; 2132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm completed = 0; 2142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 2152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 2162b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 2172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm LevelTree.updateCompletedState(mLevelRow, completed); 2182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 2192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mGame.setPendingLevel(LevelTree.get(mLevelRow, mLevelIndex)); 2202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (LevelTree.get(mLevelRow, mLevelIndex).showWaitMessage) { 2212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm showWaitMessage(); 2222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } else { 2232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm hideWaitMessage(); 2242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 225cfd74d65d832137e20e193c960802afba73b5d38sm } 226cfd74d65d832137e20e193c960802afba73b5d38sm mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 227cfd74d65d832137e20e193c960802afba73b5d38sm 228cfd74d65d832137e20e193c960802afba73b5d38sm // This activity uses the media stream. 229cfd74d65d832137e20e193c960802afba73b5d38sm setVolumeControlStream(AudioManager.STREAM_MUSIC); 230cfd74d65d832137e20e193c960802afba73b5d38sm 231cfd74d65d832137e20e193c960802afba73b5d38sm 2322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mSessionId = prefs.getLong(PreferenceConstants.PREFERENCE_SESSION_ID, System.currentTimeMillis()); 233cfd74d65d832137e20e193c960802afba73b5d38sm 234cfd74d65d832137e20e193c960802afba73b5d38sm 235cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporter = null; 236cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporterThread = null; 2372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean statsEnabled = prefs.getBoolean(PreferenceConstants.PREFERENCE_STATS_ENABLED, true); 238cfd74d65d832137e20e193c960802afba73b5d38sm if (statsEnabled) { 239cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporter = new EventReporter(); 240cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporterThread = new Thread(mEventReporter); 241cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporterThread.setName("EventReporter"); 242cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporterThread.start(); 243cfd74d65d832137e20e193c960802afba73b5d38sm } 244cfd74d65d832137e20e193c960802afba73b5d38sm } 245cfd74d65d832137e20e193c960802afba73b5d38sm 246cfd74d65d832137e20e193c960802afba73b5d38sm 247cfd74d65d832137e20e193c960802afba73b5d38sm @Override 248cfd74d65d832137e20e193c960802afba73b5d38sm protected void onDestroy() { 249cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.d("AndouKun", "onDestroy()"); 250cfd74d65d832137e20e193c960802afba73b5d38sm mGame.stop(); 251cfd74d65d832137e20e193c960802afba73b5d38sm if (mEventReporterThread != null) { 252cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporter.stop(); 253cfd74d65d832137e20e193c960802afba73b5d38sm try { 254cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporterThread.join(); 255cfd74d65d832137e20e193c960802afba73b5d38sm } catch (InterruptedException e) { 256cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporterThread.interrupt(); 257cfd74d65d832137e20e193c960802afba73b5d38sm } 258cfd74d65d832137e20e193c960802afba73b5d38sm } 259cfd74d65d832137e20e193c960802afba73b5d38sm super.onDestroy(); 260cfd74d65d832137e20e193c960802afba73b5d38sm 261cfd74d65d832137e20e193c960802afba73b5d38sm } 262cfd74d65d832137e20e193c960802afba73b5d38sm 263cfd74d65d832137e20e193c960802afba73b5d38sm 264cfd74d65d832137e20e193c960802afba73b5d38sm @Override 265cfd74d65d832137e20e193c960802afba73b5d38sm protected void onPause() { 266cfd74d65d832137e20e193c960802afba73b5d38sm super.onPause(); 267cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.d("AndouKun", "onPause"); 268cfd74d65d832137e20e193c960802afba73b5d38sm 269cfd74d65d832137e20e193c960802afba73b5d38sm hidePauseMessage(); 270cfd74d65d832137e20e193c960802afba73b5d38sm 271cfd74d65d832137e20e193c960802afba73b5d38sm mGame.onPause(); 272cfd74d65d832137e20e193c960802afba73b5d38sm mGLSurfaceView.onPause(); 273cfd74d65d832137e20e193c960802afba73b5d38sm mGame.getRenderer().onPause(); // hack! 274cfd74d65d832137e20e193c960802afba73b5d38sm 275cfd74d65d832137e20e193c960802afba73b5d38sm if (mMethodTracing) { 276cfd74d65d832137e20e193c960802afba73b5d38sm Debug.stopMethodTracing(); 277cfd74d65d832137e20e193c960802afba73b5d38sm mMethodTracing = false; 278cfd74d65d832137e20e193c960802afba73b5d38sm } 279cfd74d65d832137e20e193c960802afba73b5d38sm if (mSensorManager != null) { 280cfd74d65d832137e20e193c960802afba73b5d38sm mSensorManager.unregisterListener(this); 281cfd74d65d832137e20e193c960802afba73b5d38sm } 282cfd74d65d832137e20e193c960802afba73b5d38sm } 283cfd74d65d832137e20e193c960802afba73b5d38sm 284cfd74d65d832137e20e193c960802afba73b5d38sm @Override 285cfd74d65d832137e20e193c960802afba73b5d38sm protected void onResume() { 286cfd74d65d832137e20e193c960802afba73b5d38sm super.onResume(); 287e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm 288e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm // Preferences may have changed while we were paused. 2892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE); 2902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean debugLogs = prefs.getBoolean(PreferenceConstants.PREFERENCE_ENABLE_DEBUG, false); 291e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm 292e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm if (VERSION < 0 || debugLogs) { 293e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm DebugLog.setDebugLogging(true); 294e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm } else { 295e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm DebugLog.setDebugLogging(false); 296e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm } 297e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm 298cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.d("AndouKun", "onResume"); 299cfd74d65d832137e20e193c960802afba73b5d38sm mGLSurfaceView.onResume(); 300cfd74d65d832137e20e193c960802afba73b5d38sm mGame.onResume(this, false); 301e1fe50fadc9160b2c4ee09350b781c9b80d54e1fsm 302cfd74d65d832137e20e193c960802afba73b5d38sm 3032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean soundEnabled = prefs.getBoolean(PreferenceConstants.PREFERENCE_SOUND_ENABLED, true); 3042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean safeMode = prefs.getBoolean(PreferenceConstants.PREFERENCE_SAFE_MODE, false); 3052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean clickAttack = prefs.getBoolean(PreferenceConstants.PREFERENCE_CLICK_ATTACK, true); 3062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean tiltControls = prefs.getBoolean(PreferenceConstants.PREFERENCE_TILT_CONTROLS, false); 3072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int tiltSensitivity = prefs.getInt(PreferenceConstants.PREFERENCE_TILT_SENSITIVITY, 50); 3082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int movementSensitivity = prefs.getInt(PreferenceConstants.PREFERENCE_MOVEMENT_SENSITIVITY, 100); 3092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final boolean onScreenControls = prefs.getBoolean(PreferenceConstants.PREFERENCE_SCREEN_CONTROLS, false); 3102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 3112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int leftKey = prefs.getInt(PreferenceConstants.PREFERENCE_LEFT_KEY, KeyEvent.KEYCODE_DPAD_LEFT); 3122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int rightKey = prefs.getInt(PreferenceConstants.PREFERENCE_RIGHT_KEY, KeyEvent.KEYCODE_DPAD_RIGHT); 3132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int jumpKey = prefs.getInt(PreferenceConstants.PREFERENCE_JUMP_KEY, KeyEvent.KEYCODE_SPACE); 3142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final int attackKey = prefs.getInt(PreferenceConstants.PREFERENCE_ATTACK_KEY, KeyEvent.KEYCODE_SHIFT_LEFT); 315cfd74d65d832137e20e193c960802afba73b5d38sm 316cfd74d65d832137e20e193c960802afba73b5d38sm mGame.setSoundEnabled(soundEnabled); 3172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mGame.setControlOptions(clickAttack, tiltControls, tiltSensitivity, movementSensitivity, onScreenControls); 3183c1e67e433728684b5f228c5d4f3e5b1457bb271sm mGame.setKeyConfig(leftKey, rightKey, jumpKey, attackKey); 3199d4cc2572d37983607df38b0f4216ed76ac51814sm mGame.setSafeMode(safeMode); 320cfd74d65d832137e20e193c960802afba73b5d38sm 321cfd74d65d832137e20e193c960802afba73b5d38sm if (mSensorManager != null) { 322cfd74d65d832137e20e193c960802afba73b5d38sm Sensor orientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); 323cfd74d65d832137e20e193c960802afba73b5d38sm if (orientation != null) { 324cfd74d65d832137e20e193c960802afba73b5d38sm mSensorManager.registerListener(this, 325cfd74d65d832137e20e193c960802afba73b5d38sm orientation, 326cfd74d65d832137e20e193c960802afba73b5d38sm SensorManager.SENSOR_DELAY_GAME, 327cfd74d65d832137e20e193c960802afba73b5d38sm null); 328cfd74d65d832137e20e193c960802afba73b5d38sm } 329cfd74d65d832137e20e193c960802afba73b5d38sm } 330cfd74d65d832137e20e193c960802afba73b5d38sm } 331cfd74d65d832137e20e193c960802afba73b5d38sm 332cfd74d65d832137e20e193c960802afba73b5d38sm @Override 333cfd74d65d832137e20e193c960802afba73b5d38sm public boolean onTrackballEvent(MotionEvent event) { 3349d4cc2572d37983607df38b0f4216ed76ac51814sm if (!mGame.isPaused()) { 3359d4cc2572d37983607df38b0f4216ed76ac51814sm mGame.onTrackballEvent(event); 3369d4cc2572d37983607df38b0f4216ed76ac51814sm final long time = System.currentTimeMillis(); 3379d4cc2572d37983607df38b0f4216ed76ac51814sm mLastRollTime = time; 3389d4cc2572d37983607df38b0f4216ed76ac51814sm } 339cfd74d65d832137e20e193c960802afba73b5d38sm return true; 340cfd74d65d832137e20e193c960802afba73b5d38sm } 341cfd74d65d832137e20e193c960802afba73b5d38sm 342cfd74d65d832137e20e193c960802afba73b5d38sm @Override 343cfd74d65d832137e20e193c960802afba73b5d38sm public boolean onTouchEvent(MotionEvent event) { 3449d4cc2572d37983607df38b0f4216ed76ac51814sm if (!mGame.isPaused()) { 3459d4cc2572d37983607df38b0f4216ed76ac51814sm mGame.onTouchEvent(event); 3469d4cc2572d37983607df38b0f4216ed76ac51814sm 3479d4cc2572d37983607df38b0f4216ed76ac51814sm final long time = System.currentTimeMillis(); 3489d4cc2572d37983607df38b0f4216ed76ac51814sm if (event.getAction() == MotionEvent.ACTION_MOVE && time - mLastTouchTime < 32) { 3499d4cc2572d37983607df38b0f4216ed76ac51814sm // Sleep so that the main thread doesn't get flooded with UI events. 3509d4cc2572d37983607df38b0f4216ed76ac51814sm try { 3519d4cc2572d37983607df38b0f4216ed76ac51814sm Thread.sleep(32); 3529d4cc2572d37983607df38b0f4216ed76ac51814sm } catch (InterruptedException e) { 3539d4cc2572d37983607df38b0f4216ed76ac51814sm // No big deal if this sleep is interrupted. 3549d4cc2572d37983607df38b0f4216ed76ac51814sm } 3559d4cc2572d37983607df38b0f4216ed76ac51814sm mGame.getRenderer().waitDrawingComplete(); 356cfd74d65d832137e20e193c960802afba73b5d38sm } 3579d4cc2572d37983607df38b0f4216ed76ac51814sm mLastTouchTime = time; 3589d4cc2572d37983607df38b0f4216ed76ac51814sm } 359cfd74d65d832137e20e193c960802afba73b5d38sm return true; 360cfd74d65d832137e20e193c960802afba73b5d38sm } 361cfd74d65d832137e20e193c960802afba73b5d38sm 362cfd74d65d832137e20e193c960802afba73b5d38sm @Override 363cfd74d65d832137e20e193c960802afba73b5d38sm public boolean onKeyDown(int keyCode, KeyEvent event) { 364cfd74d65d832137e20e193c960802afba73b5d38sm boolean result = true; 365cfd74d65d832137e20e193c960802afba73b5d38sm if (keyCode == KeyEvent.KEYCODE_BACK) { 366cfd74d65d832137e20e193c960802afba73b5d38sm final long time = System.currentTimeMillis(); 3672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (time - mLastRollTime > ROLL_TO_FACE_BUTTON_DELAY && 3682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm time - mLastTouchTime > ROLL_TO_FACE_BUTTON_DELAY) { 369cfd74d65d832137e20e193c960802afba73b5d38sm showDialog(QUIT_GAME_DIALOG); 370cfd74d65d832137e20e193c960802afba73b5d38sm result = true; 371cfd74d65d832137e20e193c960802afba73b5d38sm } 372cfd74d65d832137e20e193c960802afba73b5d38sm } else if (keyCode == KeyEvent.KEYCODE_MENU) { 373cfd74d65d832137e20e193c960802afba73b5d38sm result = true; 374cfd74d65d832137e20e193c960802afba73b5d38sm if (mGame.isPaused()) { 375cfd74d65d832137e20e193c960802afba73b5d38sm hidePauseMessage(); 376cfd74d65d832137e20e193c960802afba73b5d38sm mGame.onResume(this, true); 377cfd74d65d832137e20e193c960802afba73b5d38sm } else { 378cfd74d65d832137e20e193c960802afba73b5d38sm final long time = System.currentTimeMillis(); 3792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (time - mLastRollTime > ROLL_TO_FACE_BUTTON_DELAY && 3802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm time - mLastTouchTime > ROLL_TO_FACE_BUTTON_DELAY) { 381cfd74d65d832137e20e193c960802afba73b5d38sm showPauseMessage(); 382cfd74d65d832137e20e193c960802afba73b5d38sm mGame.onPause(); 383cfd74d65d832137e20e193c960802afba73b5d38sm } 384cfd74d65d832137e20e193c960802afba73b5d38sm if (VERSION < 0) { 385cfd74d65d832137e20e193c960802afba73b5d38sm result = false; // Allow the debug menu to come up in debug mode. 386cfd74d65d832137e20e193c960802afba73b5d38sm } 387cfd74d65d832137e20e193c960802afba73b5d38sm } 388cfd74d65d832137e20e193c960802afba73b5d38sm } else { 389cfd74d65d832137e20e193c960802afba73b5d38sm result = mGame.onKeyDownEvent(keyCode); 390cfd74d65d832137e20e193c960802afba73b5d38sm // Sleep so that the main thread doesn't get flooded with UI events. 391cfd74d65d832137e20e193c960802afba73b5d38sm try { 392cfd74d65d832137e20e193c960802afba73b5d38sm Thread.sleep(4); 393cfd74d65d832137e20e193c960802afba73b5d38sm } catch (InterruptedException e) { 394cfd74d65d832137e20e193c960802afba73b5d38sm // No big deal if this sleep is interrupted. 395cfd74d65d832137e20e193c960802afba73b5d38sm } 396cfd74d65d832137e20e193c960802afba73b5d38sm } 397cfd74d65d832137e20e193c960802afba73b5d38sm return result; 398cfd74d65d832137e20e193c960802afba73b5d38sm } 399cfd74d65d832137e20e193c960802afba73b5d38sm 400cfd74d65d832137e20e193c960802afba73b5d38sm @Override 401cfd74d65d832137e20e193c960802afba73b5d38sm public boolean onKeyUp(int keyCode, KeyEvent event) { 402cfd74d65d832137e20e193c960802afba73b5d38sm boolean result = false; 403cfd74d65d832137e20e193c960802afba73b5d38sm if (keyCode == KeyEvent.KEYCODE_BACK) { 404cfd74d65d832137e20e193c960802afba73b5d38sm result = true; 405cfd74d65d832137e20e193c960802afba73b5d38sm } else if (keyCode == KeyEvent.KEYCODE_MENU){ 406cfd74d65d832137e20e193c960802afba73b5d38sm if (VERSION < 0) { 407cfd74d65d832137e20e193c960802afba73b5d38sm result = false; // Allow the debug menu to come up in debug mode. 408cfd74d65d832137e20e193c960802afba73b5d38sm } 409cfd74d65d832137e20e193c960802afba73b5d38sm } else { 410cfd74d65d832137e20e193c960802afba73b5d38sm result = mGame.onKeyUpEvent(keyCode); 411cfd74d65d832137e20e193c960802afba73b5d38sm // Sleep so that the main thread doesn't get flooded with UI events. 412cfd74d65d832137e20e193c960802afba73b5d38sm try { 413cfd74d65d832137e20e193c960802afba73b5d38sm Thread.sleep(4); 414cfd74d65d832137e20e193c960802afba73b5d38sm } catch (InterruptedException e) { 415cfd74d65d832137e20e193c960802afba73b5d38sm // No big deal if this sleep is interrupted. 416cfd74d65d832137e20e193c960802afba73b5d38sm } 417cfd74d65d832137e20e193c960802afba73b5d38sm } 418cfd74d65d832137e20e193c960802afba73b5d38sm return result; 419cfd74d65d832137e20e193c960802afba73b5d38sm } 420cfd74d65d832137e20e193c960802afba73b5d38sm 421cfd74d65d832137e20e193c960802afba73b5d38sm @Override 422cfd74d65d832137e20e193c960802afba73b5d38sm public boolean onCreateOptionsMenu(Menu menu) { 423cfd74d65d832137e20e193c960802afba73b5d38sm super.onCreateOptionsMenu(menu); 424cfd74d65d832137e20e193c960802afba73b5d38sm boolean handled = false; 425cfd74d65d832137e20e193c960802afba73b5d38sm // Only allow the debug menu in development versions. 426cfd74d65d832137e20e193c960802afba73b5d38sm if (VERSION < 0) { 427cfd74d65d832137e20e193c960802afba73b5d38sm menu.add(0, CHANGE_LEVEL_ID, 0, R.string.change_level); 428cfd74d65d832137e20e193c960802afba73b5d38sm menu.add(0, TEST_ANIMATION_ID, 0, R.string.test_animation); 429cfd74d65d832137e20e193c960802afba73b5d38sm menu.add(0, TEST_DIARY_ID, 0, R.string.test_diary); 430cfd74d65d832137e20e193c960802afba73b5d38sm 431cfd74d65d832137e20e193c960802afba73b5d38sm menu.add(0, METHOD_TRACING_ID, 0, R.string.method_tracing); 432cfd74d65d832137e20e193c960802afba73b5d38sm handled = true; 433cfd74d65d832137e20e193c960802afba73b5d38sm } 434cfd74d65d832137e20e193c960802afba73b5d38sm 435cfd74d65d832137e20e193c960802afba73b5d38sm return handled; 436cfd74d65d832137e20e193c960802afba73b5d38sm } 437cfd74d65d832137e20e193c960802afba73b5d38sm 438cfd74d65d832137e20e193c960802afba73b5d38sm @Override 439cfd74d65d832137e20e193c960802afba73b5d38sm public boolean onMenuItemSelected(int featureId, MenuItem item) { 440cfd74d65d832137e20e193c960802afba73b5d38sm Intent i; 441cfd74d65d832137e20e193c960802afba73b5d38sm switch(item.getItemId()) { 442cfd74d65d832137e20e193c960802afba73b5d38sm case CHANGE_LEVEL_ID: 443cfd74d65d832137e20e193c960802afba73b5d38sm i = new Intent(this, LevelSelectActivity.class); 444cfd74d65d832137e20e193c960802afba73b5d38sm startActivityForResult(i, ACTIVITY_CHANGE_LEVELS); 445cfd74d65d832137e20e193c960802afba73b5d38sm return true; 446cfd74d65d832137e20e193c960802afba73b5d38sm case TEST_ANIMATION_ID: 447cfd74d65d832137e20e193c960802afba73b5d38sm i = new Intent(this, AnimationPlayerActivity.class); 448cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("animation", AnimationPlayerActivity.ROKUDOU_ENDING); 449cfd74d65d832137e20e193c960802afba73b5d38sm startActivity(i); 450cfd74d65d832137e20e193c960802afba73b5d38sm return true; 451cfd74d65d832137e20e193c960802afba73b5d38sm case TEST_DIARY_ID: 452cfd74d65d832137e20e193c960802afba73b5d38sm i = new Intent(this, DiaryActivity.class); 453cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("text", R.string.Diary10); 454cfd74d65d832137e20e193c960802afba73b5d38sm startActivity(i); 455cfd74d65d832137e20e193c960802afba73b5d38sm return true; 456cfd74d65d832137e20e193c960802afba73b5d38sm case METHOD_TRACING_ID: 457cfd74d65d832137e20e193c960802afba73b5d38sm if (mMethodTracing) { 458cfd74d65d832137e20e193c960802afba73b5d38sm Debug.stopMethodTracing(); 459cfd74d65d832137e20e193c960802afba73b5d38sm } else { 460cfd74d65d832137e20e193c960802afba73b5d38sm Debug.startMethodTracing("andou"); 461cfd74d65d832137e20e193c960802afba73b5d38sm } 462cfd74d65d832137e20e193c960802afba73b5d38sm mMethodTracing = !mMethodTracing; 463cfd74d65d832137e20e193c960802afba73b5d38sm return true; 464cfd74d65d832137e20e193c960802afba73b5d38sm } 465cfd74d65d832137e20e193c960802afba73b5d38sm 466cfd74d65d832137e20e193c960802afba73b5d38sm return super.onMenuItemSelected(featureId, item); 467cfd74d65d832137e20e193c960802afba73b5d38sm } 468cfd74d65d832137e20e193c960802afba73b5d38sm 469cfd74d65d832137e20e193c960802afba73b5d38sm @Override 470cfd74d65d832137e20e193c960802afba73b5d38sm protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 471cfd74d65d832137e20e193c960802afba73b5d38sm super.onActivityResult(requestCode, resultCode, intent); 472cfd74d65d832137e20e193c960802afba73b5d38sm 473cfd74d65d832137e20e193c960802afba73b5d38sm if (requestCode == ACTIVITY_CHANGE_LEVELS) { 474cfd74d65d832137e20e193c960802afba73b5d38sm if (resultCode == RESULT_OK) { 475cfd74d65d832137e20e193c960802afba73b5d38sm mLevelRow = intent.getExtras().getInt("row"); 476cfd74d65d832137e20e193c960802afba73b5d38sm mLevelIndex = intent.getExtras().getInt("index"); 4772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm LevelTree.updateCompletedState(mLevelRow, 0); 4782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 479cfd74d65d832137e20e193c960802afba73b5d38sm saveGame(); 480cfd74d65d832137e20e193c960802afba73b5d38sm 481cfd74d65d832137e20e193c960802afba73b5d38sm mGame.setPendingLevel(LevelTree.get(mLevelRow, mLevelIndex)); 482cfd74d65d832137e20e193c960802afba73b5d38sm if (LevelTree.get(mLevelRow, mLevelIndex).showWaitMessage) { 483cfd74d65d832137e20e193c960802afba73b5d38sm showWaitMessage(); 484cfd74d65d832137e20e193c960802afba73b5d38sm } else { 485cfd74d65d832137e20e193c960802afba73b5d38sm hideWaitMessage(); 486cfd74d65d832137e20e193c960802afba73b5d38sm } 487cfd74d65d832137e20e193c960802afba73b5d38sm 488cfd74d65d832137e20e193c960802afba73b5d38sm } 489cfd74d65d832137e20e193c960802afba73b5d38sm } else if (requestCode == ACTIVITY_ANIMATION_PLAYER) { 4902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm int lastAnimation = intent.getIntExtra("animation", -1); 4912b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm // record ending events. 4922b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (lastAnimation > -1) { 4932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mGame.setLastEnding(lastAnimation); 4942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 495cfd74d65d832137e20e193c960802afba73b5d38sm // on finishing animation playback, force a level change. 496cfd74d65d832137e20e193c960802afba73b5d38sm onGameFlowEvent(GameFlowEvent.EVENT_GO_TO_NEXT_LEVEL, 0); 497cfd74d65d832137e20e193c960802afba73b5d38sm } 498cfd74d65d832137e20e193c960802afba73b5d38sm } 499cfd74d65d832137e20e193c960802afba73b5d38sm 500cfd74d65d832137e20e193c960802afba73b5d38sm /* 501cfd74d65d832137e20e193c960802afba73b5d38sm * When the game thread needs to stop its own execution (to go to a new level, or restart the 502cfd74d65d832137e20e193c960802afba73b5d38sm * current level), it registers a runnable on the main thread which orders the action via this 503cfd74d65d832137e20e193c960802afba73b5d38sm * function. 504cfd74d65d832137e20e193c960802afba73b5d38sm */ 505cfd74d65d832137e20e193c960802afba73b5d38sm public void onGameFlowEvent(int eventCode, int index) { 506cfd74d65d832137e20e193c960802afba73b5d38sm switch (eventCode) { 507cfd74d65d832137e20e193c960802afba73b5d38sm case GameFlowEvent.EVENT_END_GAME: 508cfd74d65d832137e20e193c960802afba73b5d38sm mGame.stop(); 509cfd74d65d832137e20e193c960802afba73b5d38sm finish(); 510cfd74d65d832137e20e193c960802afba73b5d38sm break; 511cfd74d65d832137e20e193c960802afba73b5d38sm case GameFlowEvent.EVENT_RESTART_LEVEL: 512cfd74d65d832137e20e193c960802afba73b5d38sm if (LevelTree.get(mLevelRow, mLevelIndex).restartable) { 513cfd74d65d832137e20e193c960802afba73b5d38sm if (mEventReporter != null) { 514cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporter.addEvent(EventReporter.EVENT_DEATH, 515cfd74d65d832137e20e193c960802afba73b5d38sm mGame.getLastDeathPosition().x, 516cfd74d65d832137e20e193c960802afba73b5d38sm mGame.getLastDeathPosition().y, 517cfd74d65d832137e20e193c960802afba73b5d38sm mGame.getGameTime(), 518cfd74d65d832137e20e193c960802afba73b5d38sm LevelTree.get(mLevelRow, mLevelIndex).name, 519cfd74d65d832137e20e193c960802afba73b5d38sm VERSION, 520cfd74d65d832137e20e193c960802afba73b5d38sm mSessionId); 521cfd74d65d832137e20e193c960802afba73b5d38sm } 522cfd74d65d832137e20e193c960802afba73b5d38sm mGame.restartLevel(); 523cfd74d65d832137e20e193c960802afba73b5d38sm break; 524cfd74d65d832137e20e193c960802afba73b5d38sm } 525cfd74d65d832137e20e193c960802afba73b5d38sm // else, fall through and go to the next level. 526cfd74d65d832137e20e193c960802afba73b5d38sm case GameFlowEvent.EVENT_GO_TO_NEXT_LEVEL: 527cfd74d65d832137e20e193c960802afba73b5d38sm LevelTree.get(mLevelRow, mLevelIndex).completed = true; 528cfd74d65d832137e20e193c960802afba73b5d38sm final LevelTree.LevelGroup currentGroup = LevelTree.levels.get(mLevelRow); 529cfd74d65d832137e20e193c960802afba73b5d38sm final int count = currentGroup.levels.size(); 530cfd74d65d832137e20e193c960802afba73b5d38sm boolean groupCompleted = true; 531cfd74d65d832137e20e193c960802afba73b5d38sm if (mEventReporter != null) { 532cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporter.addEvent(EventReporter.EVENT_BEAT_LEVEL, 533cfd74d65d832137e20e193c960802afba73b5d38sm 0, 534cfd74d65d832137e20e193c960802afba73b5d38sm 0, 535cfd74d65d832137e20e193c960802afba73b5d38sm mGame.getGameTime(), 536cfd74d65d832137e20e193c960802afba73b5d38sm LevelTree.get(mLevelRow, mLevelIndex).name, 537cfd74d65d832137e20e193c960802afba73b5d38sm VERSION, 538cfd74d65d832137e20e193c960802afba73b5d38sm mSessionId); 539cfd74d65d832137e20e193c960802afba73b5d38sm } 540cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < count; x++) { 541cfd74d65d832137e20e193c960802afba73b5d38sm if (currentGroup.levels.get(x).completed == false) { 542cfd74d65d832137e20e193c960802afba73b5d38sm // We haven't completed the group yet. 543cfd74d65d832137e20e193c960802afba73b5d38sm mLevelIndex = x; 544cfd74d65d832137e20e193c960802afba73b5d38sm groupCompleted = false; 545cfd74d65d832137e20e193c960802afba73b5d38sm break; 546cfd74d65d832137e20e193c960802afba73b5d38sm } 547cfd74d65d832137e20e193c960802afba73b5d38sm } 548cfd74d65d832137e20e193c960802afba73b5d38sm 549cfd74d65d832137e20e193c960802afba73b5d38sm if (groupCompleted) { 550cfd74d65d832137e20e193c960802afba73b5d38sm mLevelIndex = 0; 551cfd74d65d832137e20e193c960802afba73b5d38sm mLevelRow++; 552cfd74d65d832137e20e193c960802afba73b5d38sm } 553cfd74d65d832137e20e193c960802afba73b5d38sm 5542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mTotalGameTime += mGame.getGameTime(); 5552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mRobotsDestroyed += mGame.getRobotsDestroyed(); 5562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlsCollected += mGame.getPearlsCollected(); 5572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPearlsTotal += mGame.getPearlsTotal(); 558cfd74d65d832137e20e193c960802afba73b5d38sm 559cfd74d65d832137e20e193c960802afba73b5d38sm if (mLevelRow < LevelTree.levels.size()) { 560cfd74d65d832137e20e193c960802afba73b5d38sm final LevelTree.Level currentLevel = LevelTree.get(mLevelRow, mLevelIndex); 561cfd74d65d832137e20e193c960802afba73b5d38sm if (currentLevel.inThePast || LevelTree.levels.get(mLevelRow).levels.size() > 1) { 562cfd74d65d832137e20e193c960802afba73b5d38sm // go to the level select. 563cfd74d65d832137e20e193c960802afba73b5d38sm Intent i = new Intent(this, LevelSelectActivity.class); 564cfd74d65d832137e20e193c960802afba73b5d38sm startActivityForResult(i, ACTIVITY_CHANGE_LEVELS); 5652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (UIConstants.mOverridePendingTransition != null) { 5662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm try { 5672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm UIConstants.mOverridePendingTransition.invoke(AndouKun.this, R.anim.activity_fade_in, R.anim.activity_fade_out); 5682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (InvocationTargetException ite) { 5692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Invocation Target Exception"); 5702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (IllegalAccessException ie) { 5712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Illegal Access Exception"); 5722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 5732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 574cfd74d65d832137e20e193c960802afba73b5d38sm } else { 575cfd74d65d832137e20e193c960802afba73b5d38sm // go directly to the next level 576cfd74d65d832137e20e193c960802afba73b5d38sm mGame.setPendingLevel(currentLevel); 577cfd74d65d832137e20e193c960802afba73b5d38sm if (currentLevel.showWaitMessage) { 578cfd74d65d832137e20e193c960802afba73b5d38sm showWaitMessage(); 579cfd74d65d832137e20e193c960802afba73b5d38sm } else { 580cfd74d65d832137e20e193c960802afba73b5d38sm hideWaitMessage(); 581cfd74d65d832137e20e193c960802afba73b5d38sm } 582cfd74d65d832137e20e193c960802afba73b5d38sm mGame.requestNewLevel(); 583cfd74d65d832137e20e193c960802afba73b5d38sm } 584cfd74d65d832137e20e193c960802afba73b5d38sm saveGame(); 585cfd74d65d832137e20e193c960802afba73b5d38sm 586cfd74d65d832137e20e193c960802afba73b5d38sm } else { 587cfd74d65d832137e20e193c960802afba73b5d38sm if (mEventReporter != null) { 588cfd74d65d832137e20e193c960802afba73b5d38sm mEventReporter.addEvent(EventReporter.EVENT_BEAT_GAME, 589cfd74d65d832137e20e193c960802afba73b5d38sm 0, 590cfd74d65d832137e20e193c960802afba73b5d38sm 0, 591cfd74d65d832137e20e193c960802afba73b5d38sm mGame.getGameTime(), 592cfd74d65d832137e20e193c960802afba73b5d38sm "end", 593cfd74d65d832137e20e193c960802afba73b5d38sm VERSION, 594cfd74d65d832137e20e193c960802afba73b5d38sm mSessionId); 595cfd74d65d832137e20e193c960802afba73b5d38sm } 596cfd74d65d832137e20e193c960802afba73b5d38sm // We beat the game! 597cfd74d65d832137e20e193c960802afba73b5d38sm mLevelRow = 0; 598cfd74d65d832137e20e193c960802afba73b5d38sm mLevelIndex = 0; 5992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLastEnding = mGame.getLastEnding(); 6002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mExtrasUnlocked = true; 601cfd74d65d832137e20e193c960802afba73b5d38sm saveGame(); 602cfd74d65d832137e20e193c960802afba73b5d38sm mGame.stop(); 6032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm Intent i = new Intent(this, GameOverActivity.class); 6042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm startActivity(i); 6052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (UIConstants.mOverridePendingTransition != null) { 6062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm try { 6072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm UIConstants.mOverridePendingTransition.invoke(AndouKun.this, R.anim.activity_fade_in, R.anim.activity_fade_out); 6082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (InvocationTargetException ite) { 6092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Invocation Target Exception"); 6102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (IllegalAccessException ie) { 6112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Illegal Access Exception"); 6122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 6132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 614cfd74d65d832137e20e193c960802afba73b5d38sm finish(); 6152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm 616cfd74d65d832137e20e193c960802afba73b5d38sm } 617cfd74d65d832137e20e193c960802afba73b5d38sm break; 618cfd74d65d832137e20e193c960802afba73b5d38sm case GameFlowEvent.EVENT_SHOW_DIARY: 619cfd74d65d832137e20e193c960802afba73b5d38sm Intent i = new Intent(this, DiaryActivity.class); 620cfd74d65d832137e20e193c960802afba73b5d38sm LevelTree.Level level = LevelTree.get(mLevelRow, mLevelIndex); 621cfd74d65d832137e20e193c960802afba73b5d38sm level.diaryCollected = true; 622cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("text", level.dialogResources.diaryEntry); 623cfd74d65d832137e20e193c960802afba73b5d38sm startActivity(i); 6242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (UIConstants.mOverridePendingTransition != null) { 6252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm try { 6262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm UIConstants.mOverridePendingTransition.invoke(AndouKun.this, R.anim.activity_fade_in, R.anim.activity_fade_out); 6272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (InvocationTargetException ite) { 6282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Invocation Target Exception"); 6292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (IllegalAccessException ie) { 6302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Illegal Access Exception"); 6312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 6322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 633cfd74d65d832137e20e193c960802afba73b5d38sm break; 634cfd74d65d832137e20e193c960802afba73b5d38sm 635cfd74d65d832137e20e193c960802afba73b5d38sm case GameFlowEvent.EVENT_SHOW_DIALOG_CHARACTER1: 636cfd74d65d832137e20e193c960802afba73b5d38sm i = new Intent(this, ConversationDialogActivity.class); 637cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("levelRow", mLevelRow); 638cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("levelIndex", mLevelIndex); 639cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("index", index); 640cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("character", 1); 641cfd74d65d832137e20e193c960802afba73b5d38sm startActivity(i); 642cfd74d65d832137e20e193c960802afba73b5d38sm break; 643cfd74d65d832137e20e193c960802afba73b5d38sm 644cfd74d65d832137e20e193c960802afba73b5d38sm case GameFlowEvent.EVENT_SHOW_DIALOG_CHARACTER2: 645cfd74d65d832137e20e193c960802afba73b5d38sm i = new Intent(this, ConversationDialogActivity.class); 646cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("levelRow", mLevelRow); 647cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("levelIndex", mLevelIndex); 648cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("index", index); 649cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("character", 2); 650cfd74d65d832137e20e193c960802afba73b5d38sm startActivity(i); 651cfd74d65d832137e20e193c960802afba73b5d38sm break; 652cfd74d65d832137e20e193c960802afba73b5d38sm case GameFlowEvent.EVENT_SHOW_ANIMATION: 653cfd74d65d832137e20e193c960802afba73b5d38sm i = new Intent(this, AnimationPlayerActivity.class); 654cfd74d65d832137e20e193c960802afba73b5d38sm i.putExtra("animation", index); 655cfd74d65d832137e20e193c960802afba73b5d38sm startActivityForResult(i, ACTIVITY_ANIMATION_PLAYER); 6562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (UIConstants.mOverridePendingTransition != null) { 6572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm try { 6582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm UIConstants.mOverridePendingTransition.invoke(AndouKun.this, R.anim.activity_fade_in, R.anim.activity_fade_out); 6592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (InvocationTargetException ite) { 6602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Invocation Target Exception"); 6612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (IllegalAccessException ie) { 6622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Illegal Access Exception"); 6632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 6642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 665cfd74d65d832137e20e193c960802afba73b5d38sm break; 666cfd74d65d832137e20e193c960802afba73b5d38sm 667cfd74d65d832137e20e193c960802afba73b5d38sm } 668cfd74d65d832137e20e193c960802afba73b5d38sm } 669cfd74d65d832137e20e193c960802afba73b5d38sm 670cfd74d65d832137e20e193c960802afba73b5d38sm protected void saveGame() { 671cfd74d65d832137e20e193c960802afba73b5d38sm if (mPrefsEditor != null) { 672cfd74d65d832137e20e193c960802afba73b5d38sm final int completed = LevelTree.packCompletedLevels(mLevelRow); 6732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_LEVEL_ROW, mLevelRow); 6742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_LEVEL_INDEX, mLevelIndex); 6752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_LEVEL_COMPLETED, completed); 6762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putLong(PreferenceConstants.PREFERENCE_SESSION_ID, mSessionId); 6772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putFloat(PreferenceConstants.PREFERENCE_TOTAL_GAME_TIME, mTotalGameTime); 6782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_LAST_ENDING, mLastEnding); 6792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_ROBOTS_DESTROYED, mRobotsDestroyed); 6802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_PEARLS_COLLECTED, mPearlsCollected); 6812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_PEARLS_TOTAL, mPearlsTotal); 6822b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_LINEAR_MODE, mLinearMode); 6832b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putBoolean(PreferenceConstants.PREFERENCE_EXTRAS_UNLOCKED, mExtrasUnlocked); 6842b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mPrefsEditor.putInt(PreferenceConstants.PREFERENCE_DIFFICULTY, mDifficulty); 685cfd74d65d832137e20e193c960802afba73b5d38sm mPrefsEditor.commit(); 686cfd74d65d832137e20e193c960802afba73b5d38sm } 687cfd74d65d832137e20e193c960802afba73b5d38sm } 688cfd74d65d832137e20e193c960802afba73b5d38sm 689cfd74d65d832137e20e193c960802afba73b5d38sm protected void showPauseMessage() { 690cfd74d65d832137e20e193c960802afba73b5d38sm if (mPauseMessage != null) { 691cfd74d65d832137e20e193c960802afba73b5d38sm mPauseMessage.setVisibility(View.VISIBLE); 692cfd74d65d832137e20e193c960802afba73b5d38sm } 6932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (mLevelNameBox != null && mLevelName != null) { 6942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelName.setText(LevelTree.get(mLevelRow, mLevelIndex).name); 6952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelNameBox.setVisibility(View.VISIBLE); 6962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 697cfd74d65d832137e20e193c960802afba73b5d38sm } 698cfd74d65d832137e20e193c960802afba73b5d38sm 699cfd74d65d832137e20e193c960802afba73b5d38sm protected void hidePauseMessage() { 700cfd74d65d832137e20e193c960802afba73b5d38sm if (mPauseMessage != null) { 701cfd74d65d832137e20e193c960802afba73b5d38sm mPauseMessage.setVisibility(View.GONE); 702cfd74d65d832137e20e193c960802afba73b5d38sm } 7032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (mLevelNameBox != null) { 7042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm mLevelNameBox.setVisibility(View.GONE); 7052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 706cfd74d65d832137e20e193c960802afba73b5d38sm } 707cfd74d65d832137e20e193c960802afba73b5d38sm 708cfd74d65d832137e20e193c960802afba73b5d38sm protected void showWaitMessage() { 709cfd74d65d832137e20e193c960802afba73b5d38sm if (mWaitMessage != null) { 710cfd74d65d832137e20e193c960802afba73b5d38sm mWaitMessage.setVisibility(View.VISIBLE); 711cfd74d65d832137e20e193c960802afba73b5d38sm mWaitMessage.startAnimation(mWaitFadeAnimation); 712cfd74d65d832137e20e193c960802afba73b5d38sm } 713cfd74d65d832137e20e193c960802afba73b5d38sm } 714cfd74d65d832137e20e193c960802afba73b5d38sm 715cfd74d65d832137e20e193c960802afba73b5d38sm protected void hideWaitMessage() { 716cfd74d65d832137e20e193c960802afba73b5d38sm if (mWaitMessage != null) { 717cfd74d65d832137e20e193c960802afba73b5d38sm mWaitMessage.setVisibility(View.GONE); 718cfd74d65d832137e20e193c960802afba73b5d38sm mWaitMessage.clearAnimation(); 719cfd74d65d832137e20e193c960802afba73b5d38sm } 720cfd74d65d832137e20e193c960802afba73b5d38sm } 721cfd74d65d832137e20e193c960802afba73b5d38sm 722cfd74d65d832137e20e193c960802afba73b5d38sm 723cfd74d65d832137e20e193c960802afba73b5d38sm public void onAccuracyChanged(Sensor sensor, int accuracy) { 724cfd74d65d832137e20e193c960802afba73b5d38sm // TODO Auto-generated method stub 725cfd74d65d832137e20e193c960802afba73b5d38sm 726cfd74d65d832137e20e193c960802afba73b5d38sm } 727cfd74d65d832137e20e193c960802afba73b5d38sm 728cfd74d65d832137e20e193c960802afba73b5d38sm 729cfd74d65d832137e20e193c960802afba73b5d38sm public void onSensorChanged(SensorEvent event) { 730cfd74d65d832137e20e193c960802afba73b5d38sm synchronized (this) { 731cfd74d65d832137e20e193c960802afba73b5d38sm if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { 7322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final float x = event.values[1]; 7332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final float y = event.values[2]; 7342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm final float z = event.values[0]; 735cfd74d65d832137e20e193c960802afba73b5d38sm mGame.onOrientationEvent(x, y, z); 736cfd74d65d832137e20e193c960802afba73b5d38sm } 737cfd74d65d832137e20e193c960802afba73b5d38sm } 738cfd74d65d832137e20e193c960802afba73b5d38sm } 739cfd74d65d832137e20e193c960802afba73b5d38sm 740cfd74d65d832137e20e193c960802afba73b5d38sm @Override 741cfd74d65d832137e20e193c960802afba73b5d38sm protected Dialog onCreateDialog(int id) { 742cfd74d65d832137e20e193c960802afba73b5d38sm Dialog dialog = null; 743cfd74d65d832137e20e193c960802afba73b5d38sm if (id == QUIT_GAME_DIALOG) { 744cfd74d65d832137e20e193c960802afba73b5d38sm 745cfd74d65d832137e20e193c960802afba73b5d38sm dialog = new AlertDialog.Builder(this) 746cfd74d65d832137e20e193c960802afba73b5d38sm .setTitle(R.string.quit_game_dialog_title) 747cfd74d65d832137e20e193c960802afba73b5d38sm .setPositiveButton(R.string.quit_game_dialog_ok, new DialogInterface.OnClickListener() { 748cfd74d65d832137e20e193c960802afba73b5d38sm public void onClick(DialogInterface dialog, int whichButton) { 749cfd74d65d832137e20e193c960802afba73b5d38sm finish(); 7502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm if (UIConstants.mOverridePendingTransition != null) { 7512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm try { 7522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm UIConstants.mOverridePendingTransition.invoke(AndouKun.this, R.anim.activity_fade_in, R.anim.activity_fade_out); 7532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (InvocationTargetException ite) { 7542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Invocation Target Exception"); 7552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } catch (IllegalAccessException ie) { 7562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm DebugLog.d("Activity Transition", "Illegal Access Exception"); 7572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 7582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm } 759cfd74d65d832137e20e193c960802afba73b5d38sm } 760cfd74d65d832137e20e193c960802afba73b5d38sm }) 761cfd74d65d832137e20e193c960802afba73b5d38sm .setNegativeButton(R.string.quit_game_dialog_cancel, null) 762cfd74d65d832137e20e193c960802afba73b5d38sm .setMessage(R.string.quit_game_dialog_message) 763cfd74d65d832137e20e193c960802afba73b5d38sm .create(); 764cfd74d65d832137e20e193c960802afba73b5d38sm } 765cfd74d65d832137e20e193c960802afba73b5d38sm return dialog; 766cfd74d65d832137e20e193c960802afba73b5d38sm } 767cfd74d65d832137e20e193c960802afba73b5d38sm} 768