Changeset 5053d90 in galcon-client for src/com/example/helloandroid/GameView.java


Ignore:
Timestamp:
May 30, 2010, 9:32:02 PM (15 years ago)
Author:
dportnoy <devnull@…>
Branches:
master
Children:
c27abf4
Parents:
b6a9b5f
Message:

The game now responds to touchscreen events and the player can select planets.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/com/example/helloandroid/GameView.java

    rb6a9b5f r5053d90  
    1717import android.util.Log;
    1818import android.view.KeyEvent;
     19import android.view.MotionEvent;
    1920import android.view.SurfaceHolder;
    2021import android.view.SurfaceView;
     
    170171        private double mY;
    171172       
    172         private ArrayList<Planet> planets;
     173        public Object planetsLock;
     174       
     175        public ArrayList<Planet> planets;
     176        public Planet planetSelected;
    173177
    174178        public DrawingThread(SurfaceHolder surfaceHolder, Context context,
     
    215219            mHeading = 0;
    216220            mEngineFiring = true;
     221       
     222            planetsLock = new Object();
    217223           
    218224            planets = new ArrayList<Planet>();
     225            planetSelected = null;
    219226        }
    220227
     
    463470            }
    464471        }
    465 
     472       
    466473        /* Callback invoked when the surface dimensions change. */
    467474        public void setSurfaceSize(int width, int height) {
     
    475482                Random rand = new Random();
    476483
    477                 for(int x=0; x<15; x++) {
    478                         Planet p = new Planet(rand.nextInt(45)+5, rand.nextInt(mCanvasWidth), rand.nextInt(mCanvasHeight));
    479                        
    480                         if(Planet.collisionDetected(p, planets)) {
    481                                 x--;
    482                         }else if(p.getX()-p.getRadius() < 0 || mCanvasWidth<=p.getX()+p.getRadius() ||
    483                                          p.getY()-p.getRadius() < 0 || mCanvasHeight<=p.getY()+p.getRadius()) {
    484                                 x--;
    485                         }else {
    486                                 p.setNumShips(rand.nextInt(150));
    487                                 p.setFaction(rand.nextInt(5));
    488                                 planets.add(p);
    489                         }
     484                synchronized(planetsLock) {
     485                        for(int x=0; x<15; x++) {
     486                                Planet p = new Planet(rand.nextInt(45)+5, rand.nextInt(mCanvasWidth), rand.nextInt(mCanvasHeight));
     487                               
     488                                if(Planet.collisionDetected(p, planets)) {
     489                                        x--;
     490                                }else if(p.getX()-p.getRadius() < 0 || mCanvasWidth<=p.getX()+p.getRadius() ||
     491                                                 p.getY()-p.getRadius() < 0 || mCanvasHeight<=p.getY()+p.getRadius()) {
     492                                        x--;
     493                                }else {
     494                                        p.setNumShips(rand.nextInt(150));
     495                                        p.setFaction(rand.nextInt(5));
     496                                        planets.add(p);
     497                                }
     498                        }
    490499                }
    491500                       
     
    569578         */
    570579        private void doDraw(Canvas canvas) {
    571             // Draw the background image. Operations on the Canvas accumulate
    572             // so this is like clearing the screen.
     580                canvas.drawBitmap(mBackgroundImage, 0, 0, null);
     581                synchronized(planetsLock) {
     582                        for(Planet p : planets) {
     583                        p.draw(canvas, mLinePaint, mTextPaint);
     584                }
     585                }
    573586           
    574                 //Log.i("Gencon", "doDraw called");
     587                if(planetSelected != null) {
     588                        planetSelected.drawSelectionCircle(canvas);
     589                }
    575590               
    576                 canvas.drawBitmap(mBackgroundImage, 0, 0, null);
    577             for(Planet p : planets) {
    578                 p.draw(canvas, mLinePaint, mTextPaint);
    579             }
    580            
    581591            int yTop = mCanvasHeight - ((int) mY + mLanderHeight / 2);
    582592            int xLeft = (int) mX - mLanderWidth / 2;
     
    585595            canvas.save();
    586596            canvas.rotate((float)mHeading, (float)mX, mCanvasHeight - (float)mY);
    587             if (mMode == STATE_LOSE) {
    588                 //mCrashedImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
    589                 //mCrashedImage.draw(canvas);
    590             } else if (mEngineFiring) {
    591                 //mFiringImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
    592                 //mFiringImage.draw(canvas);
    593             } else {
    594                 mLanderImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
    595                 mLanderImage.draw(canvas);
    596             }
     597           
     598            mLanderImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
     599            mLanderImage.draw(canvas);
     600               
    597601            canvas.restore();
    598602        }
     
    655659            }
    656660
    657             for(Planet p : planets) {
    658                 p.update();
     661            synchronized(planetsLock) {
     662                for(Planet p : planets) {
     663                        p.update();
     664                }
    659665            }
    660666           
     
    740746    }
    741747
     748    @Override public boolean onTouchEvent(MotionEvent event) {
     749        Log.i("Gencon", "Detected touch event");
     750       
     751        synchronized(thread.planetsLock) {
     752                if(thread.planetSelected != null) {
     753                        thread.planetSelected.unselect();
     754                        thread.planetSelected = null;
     755                }
     756               
     757                for(Planet p : thread.planets) {
     758                        if(p.contains((int)event.getX(), (int)event.getY())) {
     759                                p.select();
     760                                thread.planetSelected = p;
     761                                break;
     762                        }
     763                }
     764        }
     765       
     766        return true;
     767    }
     768   
    742769    /**
    743770     * Fetches the animation thread corresponding to this LunarView.
Note: See TracChangeset for help on using the changeset viewer.