ObjectDrawer.java :  » UnTagged » dsandr » ru » jecklandin » duckshot » Android Open Source

Android Open Source » UnTagged » dsandr 
dsandr » ru » jecklandin » duckshot » ObjectDrawer.java
package ru.jecklandin.duckshot;

import java.util.ArrayList;

import ru.jecklandin.duckshot.model.DuckShotModel;
import ru.jecklandin.duckshot.units.CreatureObject;
import ru.jecklandin.duckshot.units.GroundObject;
import ru.jecklandin.duckshot.units.Obstacle;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;

public class ObjectDrawer {
  private static final String TAG = "ObjectDrawer";
  private static ObjectDrawer s_instance;

  public static boolean lock = false;
  
  private Paint mPaint;
  private DuckShotModel model = DuckShotModel.getInstance();
  private ArrayList<CreatureObject> mMovingCreatures  = new ArrayList<CreatureObject>();

  private ObjectDrawer(Context ctx) {
    mPaint = new Paint();
    mPaint.setTypeface(DuckApplication.getCommonTypeface());
    mPaint.setTextSize(15);
    mPaint.setColor(Color.YELLOW);
  }
  
  public static long sLastTick;
  public static boolean isLate() {
    return (System.currentTimeMillis() - ObjectDrawer.sLastTick) > 50;
  }
  
  public static synchronized ObjectDrawer getInstance(Context ctx) {
    if (ObjectDrawer.s_instance == null) {
      ObjectDrawer.s_instance = new ObjectDrawer(ctx);
    }
    return s_instance;
  }

  public void drawGroundObject(Canvas c, GroundObject w) {

    for (CreatureObject d : w.mCreatures) {
      d.draw(c, mPaint);
      if (d.mMoveFlag) {
        mMovingCreatures.add(d);
      }
    }
    
    for (Obstacle obs : w.mObstacles) {
      obs.draw(c, mPaint);
    }

    w.draw(c, mPaint);
  }

  public boolean drawObjects(Canvas c) {
    drawEnvironment(c);
    
    mMovingCreatures.clear();
    
    synchronized (DuckShotModel.getInstance()) {
      for (int i = 0; i < model.mGrounds.size(); ++i) {
        GroundObject w = model.mGrounds.get(i);
        drawGroundObject(c, w);
      }

      // we need this to avoid concurrentexception (modifying waves while
      // iterating)
      for (CreatureObject d : mMovingCreatures) {
        d.move();
      }
      DuckShotModel.getInstance().notifyAll();
    }
    drawDeck(c);
    drawStones(c);
    
    return false;
  }
  
  private void drawEnvironment(Canvas c) {
    DuckApplication.getInstance().getCurrentLevel().mEnvironment.draw(c, mPaint);
  }

  private void drawStones(Canvas c) {
    synchronized (DuckShotModel.getInstance().mStones) {
      for (Stone stone: DuckShotModel.getInstance().mStones) {
        stone.draw(c, mPaint);
      }
    }
  }

  public void drawDeck(Canvas c) {
    Desk.getInstance().draw(c, mPaint);
  }
  
  public void drawLines(Canvas c) {
    for (int i:DuckShotModel.getInstance().mYes) {
      c.drawLine(0, i, 300, i, mPaint);
    }
  }
}

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.