Index: src/com/example/helloandroid/GameView.java
===================================================================
--- src/com/example/helloandroid/GameView.java	(revision 61c4fbcbb69a721f2e7174dffd017c29e9a313ac)
+++ src/com/example/helloandroid/GameView.java	(revision 95509e1555a9c2b96767adadd547aaaae0956996)
@@ -6,7 +6,6 @@
 import android.content.Context;
 import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
+import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.drawable.Drawable;
@@ -34,22 +33,4 @@
     class DrawingThread extends Thread {
         /*
-         * Difficulty setting constants
-         */
-        public static final int DIFFICULTY_EASY = 0;
-        public static final int DIFFICULTY_HARD = 1;
-        public static final int DIFFICULTY_MEDIUM = 2;
-        /*
-         * Physics constants
-         */
-        public static final int PHYS_DOWN_ACCEL_SEC = 35;
-        public static final int PHYS_FIRE_ACCEL_SEC = 80;
-        public static final int PHYS_FUEL_INIT = 60;
-        public static final int PHYS_FUEL_MAX = 100;
-        public static final int PHYS_FUEL_SEC = 10;
-        public static final int PHYS_SLEW_SEC = 120; // degrees/second rotate
-        public static final int PHYS_SPEED_HYPERSPACE = 180;
-        public static final int PHYS_SPEED_INIT = 30;
-        public static final int PHYS_SPEED_MAX = 120;
-        /*
          * State-tracking constants
          */
@@ -61,86 +42,19 @@
 
         /*
-         * Goal condition constants
-         */
-        public static final int TARGET_ANGLE = 18; // > this angle means crash
-        public static final int TARGET_BOTTOM_PADDING = 17; // px below gear
-        public static final int TARGET_PAD_HEIGHT = 8; // how high above ground
-        public static final int TARGET_SPEED = 28; // > this speed means crash
-        public static final double TARGET_WIDTH = 1.6; // width of target
-        /*
          * UI constants (i.e. the speed & fuel bars)
          */
         public static final int UI_BAR = 100; // width of the bar(s)
         public static final int UI_BAR_HEIGHT = 10; // height of the bar(s)
-        private static final String KEY_DIFFICULTY = "mDifficulty";
-        private static final String KEY_DX = "mDX";
-
-        private static final String KEY_DY = "mDY";
-        private static final String KEY_FUEL = "mFuel";
-        private static final String KEY_GOAL_ANGLE = "mGoalAngle";
-        private static final String KEY_GOAL_SPEED = "mGoalSpeed";
-        private static final String KEY_GOAL_WIDTH = "mGoalWidth";
-
-        private static final String KEY_GOAL_X = "mGoalX";
-        private static final String KEY_HEADING = "mHeading";
-        private static final String KEY_LANDER_HEIGHT = "mLanderHeight";
-        private static final String KEY_LANDER_WIDTH = "mLanderWidth";
-        private static final String KEY_WINS = "mWinsInARow";
-
-        private static final String KEY_X = "mX";
-        private static final String KEY_Y = "mY";
 
         /*
          * Member (state) fields
          */
-        /** The drawable to use as the background of the animation canvas */
-        private Bitmap mBackgroundImage;
 
         private int mCanvasHeight = 1;
         private int mCanvasWidth = 1;
 
-        /** Default is MEDIUM. */
-        private int mDifficulty;
-
-        /** Velocity */
-        private double mDX;
-        private double mDY;
-
-        /** Is the engine burning? */
-        private boolean mEngineFiring;
-
-        /** Fuel remaining */
-        private double mFuel;
-
-        /** Allowed angle. */
-        private int mGoalAngle;
-
-        /** Allowed speed. */
-        private int mGoalSpeed;
-
-        /** Width of the landing pad. */
-        private int mGoalWidth;
-
-        /** X of the landing pad. */
-        private int mGoalX;
-
         /** Message handler used by thread to interact with TextView */
         private Handler mHandler;
 
-        /**
-         * Lander heading in degrees, with 0 up, 90 right. Kept in the range
-         * 0..360.
-         */
-        private double mHeading;
-
-        /** Pixel height of lander image. */
-        private int mLanderHeight;
-
-        /** What to draw for the Lander in its normal state */
-        private Drawable mLanderImage;
-
-        /** Pixel width of lander image. */
-        private int mLanderWidth;
-
         /** Used to figure out elapsed time between frames */
         private long mLastTime;
@@ -149,13 +63,7 @@
         private Paint mLinePaint, mTextPaint;
 
-        /** "Bad" speed-too-high variant of the line color. */
-        private Paint mLinePaintBad;
-
         /** The state of the game. One of READY, RUNNING, PAUSE, LOSE, or WIN */
         private int mMode;
 
-        /** Currently rotating, -1 left, 0 none, 1 right. */
-        private int mRotating;
-
         /** Indicate whether the surface has been created & is ready to draw */
         private boolean mRun = false;
@@ -163,11 +71,4 @@
         /** Handle to the surface manager object we interact with */
         private SurfaceHolder mSurfaceHolder;
-
-        /** Number of wins in a row. */
-        private int mWinsInARow;
-
-        /** lander center. */
-        private double mX;
-        private double mY;
         
         public Object planetsLock, fleetsLock;
@@ -184,16 +85,4 @@
             mContext = context;
 
-            Resources res = context.getResources();
-            // cache handles to our key sprites & other drawables
-            mLanderImage = context.getResources().getDrawable(R.drawable.lander_plain);
-
-            // load background image as a Bitmap instead of a Drawable b/c
-            // we don't need to transform it and it's faster to draw this way
-            mBackgroundImage = BitmapFactory.decodeResource(res, R.drawable.earthrise);
-
-            // Use the regular lander image as the model size for all sprites
-            mLanderWidth = mLanderImage.getIntrinsicWidth();
-            mLanderHeight = mLanderImage.getIntrinsicHeight();
-
             // Initialize paints for speedometer
             mLinePaint = new Paint();
@@ -201,23 +90,7 @@
             mLinePaint.setARGB(255, 0, 255, 0);
 
-            mLinePaintBad = new Paint();
-            mLinePaintBad.setAntiAlias(true);
-            mLinePaintBad.setARGB(255, 120, 180, 0);
-            
             mTextPaint = new Paint();
             mTextPaint.setAntiAlias(true);
             mTextPaint.setARGB(255, 255, 255, 255);
-
-            mWinsInARow = 0;
-            mDifficulty = DIFFICULTY_MEDIUM;
-
-            // initial show-up of lander (not yet playing)
-            mX = mLanderWidth;
-            mY = mLanderHeight * 2;
-            mFuel = PHYS_FUEL_INIT;
-            mDX = 0;
-            mDY = 0;
-            mHeading = 0;
-            mEngineFiring = true;
         
             planetsLock = new Object();
@@ -235,42 +108,4 @@
         public void doStart() {
             synchronized (mSurfaceHolder) {
-                // First set the game for Medium difficulty
-                mFuel = PHYS_FUEL_INIT;
-                mEngineFiring = false;
-                mGoalWidth = (int) (mLanderWidth * TARGET_WIDTH);
-                mGoalSpeed = TARGET_SPEED;
-                mGoalAngle = TARGET_ANGLE;
-                int speedInit = PHYS_SPEED_INIT;
-
-                // Adjust difficulty params for EASY/HARD
-                if (mDifficulty == DIFFICULTY_EASY) {
-                    mFuel = mFuel * 3 / 2;
-                    mGoalWidth = mGoalWidth * 4 / 3;
-                    mGoalSpeed = mGoalSpeed * 3 / 2;
-                    mGoalAngle = mGoalAngle * 4 / 3;
-                    speedInit = speedInit * 3 / 4;
-                } else if (mDifficulty == DIFFICULTY_HARD) {
-                    mFuel = mFuel * 7 / 8;
-                    mGoalWidth = mGoalWidth * 3 / 4;
-                    mGoalSpeed = mGoalSpeed * 7 / 8;
-                    speedInit = speedInit * 4 / 3;
-                }
-
-                // pick a convenient initial location for the lander sprite
-                mX = mCanvasWidth / 2;
-                mY = mCanvasHeight - mLanderHeight / 2;
-
-                // start with a little random motion
-                mDY = Math.random() * -speedInit;
-                mDX = Math.random() * 2 * speedInit - speedInit;
-                mHeading = 0;
-
-                // Figure initial spot for landing, not too near center
-                while (true) {
-                    mGoalX = (int) (Math.random() * (mCanvasWidth - mGoalWidth));
-                    if (Math.abs(mGoalX - (mX - mLanderWidth / 2)) > mCanvasHeight / 6)
-                        break;
-                }
-
                 mLastTime = System.currentTimeMillis() + 100;
                 setState(STATE_RUNNING);
@@ -284,35 +119,4 @@
             synchronized (mSurfaceHolder) {
                 if (mMode == STATE_RUNNING) setState(STATE_PAUSE);
-            }
-        }
-
-        /**
-         * Restores game state from the indicated Bundle. Typically called when
-         * the Activity is being restored after having been previously
-         * destroyed.
-         * 
-         * @param savedState Bundle containing the game state
-         */
-        public synchronized void restoreState(Bundle savedState) {
-            synchronized (mSurfaceHolder) {
-                setState(STATE_PAUSE);
-                mRotating = 0;
-                mEngineFiring = false;
-
-                mDifficulty = savedState.getInt(KEY_DIFFICULTY);
-                mX = savedState.getDouble(KEY_X);
-                mY = savedState.getDouble(KEY_Y);
-                mDX = savedState.getDouble(KEY_DX);
-                mDY = savedState.getDouble(KEY_DY);
-                mHeading = savedState.getDouble(KEY_HEADING);
-
-                mLanderWidth = savedState.getInt(KEY_LANDER_WIDTH);
-                mLanderHeight = savedState.getInt(KEY_LANDER_HEIGHT);
-                mGoalX = savedState.getInt(KEY_GOAL_X);
-                mGoalSpeed = savedState.getInt(KEY_GOAL_SPEED);
-                mGoalAngle = savedState.getInt(KEY_GOAL_ANGLE);
-                mGoalWidth = savedState.getInt(KEY_GOAL_WIDTH);
-                mWinsInARow = savedState.getInt(KEY_WINS);
-                mFuel = savedState.getDouble(KEY_FUEL);
             }
         }
@@ -344,53 +148,4 @@
 
         /**
-         * Dump game state to the provided Bundle. Typically called when the
-         * Activity is being suspended.
-         * 
-         * @return Bundle with this view's state
-         */
-        public Bundle saveState(Bundle map) {
-            synchronized (mSurfaceHolder) {
-                if (map != null) {
-                    map.putInt(KEY_DIFFICULTY, Integer.valueOf(mDifficulty));
-                    map.putDouble(KEY_X, Double.valueOf(mX));
-                    map.putDouble(KEY_Y, Double.valueOf(mY));
-                    map.putDouble(KEY_DX, Double.valueOf(mDX));
-                    map.putDouble(KEY_DY, Double.valueOf(mDY));
-                    map.putDouble(KEY_HEADING, Double.valueOf(mHeading));
-                    map.putInt(KEY_LANDER_WIDTH, Integer.valueOf(mLanderWidth));
-                    map.putInt(KEY_LANDER_HEIGHT, Integer
-                            .valueOf(mLanderHeight));
-                    map.putInt(KEY_GOAL_X, Integer.valueOf(mGoalX));
-                    map.putInt(KEY_GOAL_SPEED, Integer.valueOf(mGoalSpeed));
-                    map.putInt(KEY_GOAL_ANGLE, Integer.valueOf(mGoalAngle));
-                    map.putInt(KEY_GOAL_WIDTH, Integer.valueOf(mGoalWidth));
-                    map.putInt(KEY_WINS, Integer.valueOf(mWinsInARow));
-                    map.putDouble(KEY_FUEL, Double.valueOf(mFuel));
-                }
-            }
-            return map;
-        }
-
-        /**
-         * Sets the current difficulty.
-         * 
-         * @param difficulty
-         */
-        public void setDifficulty(int difficulty) {
-            synchronized (mSurfaceHolder) {
-                mDifficulty = difficulty;
-            }
-        }
-
-        /**
-         * Sets if the engine is currently firing.
-         */
-        public void setFiring(boolean firing) {
-            synchronized (mSurfaceHolder) {
-                mEngineFiring = firing;
-            }
-        }
-
-        /**
          * Used to signal the thread whether it should be running or not.
          * Passing true allows the thread to run; passing false will shut it
@@ -444,6 +199,4 @@
                     mHandler.sendMessage(msg);
                 } else {
-                    mRotating = 0;
-                    mEngineFiring = false;
                     Resources res = mContext.getResources();
                     CharSequence str = "";
@@ -454,14 +207,8 @@
                     else if (mMode == STATE_LOSE)
                         str = res.getText(R.string.mode_lose);
-                    else if (mMode == STATE_WIN)
-                        str = res.getString(R.string.mode_win_prefix)
-                                + mWinsInARow + " "
-                                + res.getString(R.string.mode_win_suffix);
 
                     if (message != null) {
                         str = message + "\n" + str;
                     }
-
-                    if (mMode == STATE_LOSE) mWinsInARow = 0;
 
                     Message msg = mHandler.obtainMessage();
@@ -502,7 +249,4 @@
 	                }
                 }
-                	
-                // don't forget to resize the background image
-                mBackgroundImage = Bitmap.createScaledBitmap(mBackgroundImage, width, height, true);
             }
         }
@@ -582,5 +326,6 @@
          */
         private void doDraw(Canvas canvas) {
-        	canvas.drawBitmap(mBackgroundImage, 0, 0, null);
+        	canvas.drawColor(Color.BLACK);
+        	
         	synchronized(planetsLock) {
         		for(Planet p : planets) {
@@ -598,16 +343,4 @@
             	}
         	}
-        	
-            int yTop = mCanvasHeight - ((int) mY + mLanderHeight / 2);
-            int xLeft = (int) mX - mLanderWidth / 2;
-
-            // Draw the ship with its current rotation
-            canvas.save();
-            canvas.rotate((float)mHeading, (float)mX, mCanvasHeight - (float)mY);
-            
-            mLanderImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
-            mLanderImage.draw(canvas);
-                
-            canvas.restore();
         }
 
@@ -626,46 +359,4 @@
             // by 100ms or whatever.
             if (mLastTime > now) return;
-
-            double elapsed = (now - mLastTime) / 1000.0;
-
-            // mRotating -- update heading
-            if (mRotating != 0) {
-                mHeading += mRotating * (PHYS_SLEW_SEC * elapsed);
-
-                // Bring things back into the range 0..360
-                if (mHeading < 0)
-                    mHeading += 360;
-                else if (mHeading >= 360) mHeading -= 360;
-            }
-
-            // Base accelerations -- 0 for x, gravity for y
-            double ddx = 0.0;
-            double ddy = -PHYS_DOWN_ACCEL_SEC * elapsed;
-
-            if (mEngineFiring) {
-                // taking 0 as up, 90 as to the right
-                // cos(deg) is ddy component, sin(deg) is ddx component
-                double elapsedFiring = elapsed;
-                double fuelUsed = elapsedFiring * PHYS_FUEL_SEC;
-
-                // tricky case where we run out of fuel partway through the
-                // elapsed
-                if (fuelUsed > mFuel) {
-                    elapsedFiring = mFuel / fuelUsed * elapsed;
-                    fuelUsed = mFuel;
-
-                    // Oddball case where we adjust the "control" from here
-                    mEngineFiring = false;
-                }
-
-                mFuel -= fuelUsed;
-
-                // have this much acceleration from the engine
-                double accel = PHYS_FIRE_ACCEL_SEC * elapsedFiring;
-
-                double radians = 2 * Math.PI * mHeading / 360;
-                ddx = Math.sin(radians) * accel;
-                ddy += Math.cos(radians) * accel;
-            }
 
             synchronized(planetsLock) {
@@ -680,40 +371,6 @@
             	}
             }
-            
-            double dxOld = mDX;
-            double dyOld = mDY;
-
-            // figure speeds for the end of the period
-            mDX += ddx;
-            mDY += ddy;
-
-            // figure position based on average speed during the period
-            mX += elapsed * (mDX + dxOld) / 2;
-            mY += elapsed * (mDY + dyOld) / 2;
 
             mLastTime = now;
-
-            // Evaluate if we have landed ... stop the game
-            double yLowerBound = TARGET_PAD_HEIGHT + mLanderHeight / 2
-                    - TARGET_BOTTOM_PADDING;
-            if (mY <= yLowerBound) {
-                mY = yLowerBound;
-
-                double speed = Math.sqrt(mDX * mDX + mDY * mDY);
-                boolean onGoal = (mGoalX <= mX - mLanderWidth / 2 && mX
-                        + mLanderWidth / 2 <= mGoalX + mGoalWidth);
-
-                // "Hyperspace" win -- upside down, going fast,
-                // puts you back at the top.
-                if (onGoal && Math.abs(mHeading - 180) < mGoalAngle
-                        && speed > PHYS_SPEED_HYPERSPACE) {
-                    mWinsInARow++;
-                    doStart();
-
-                    return;
-                    // Oddball case: this case does a return, all other cases
-                    // fall through to setMode() below.
-                }
-            }
         }
     }
@@ -764,7 +421,8 @@
 		        }
     			
-    			if(target != null) {
+    			if(target != null && thread.planetSelected.getFaction() != 0) {
     				synchronized(thread.fleetsLock) {
     	                	Fleet f = new Fleet(thread.planetSelected, target, 1, 1);
+    	                	f.setFaction(thread.planetSelected.getFaction());
     	                	thread.fleets.add(f);
                     }
