Beispiel #1
0
  public Pack(GameMgr p, LinkedList<EnemyMallet> enemy) {
    _enemy = enemy;
    parent = p;
    packimg = BitmapFactory.decodeResource(res, R.drawable.pack);
    cir =
        new Circle(
            RatioAdjustment.FieldCenterX(),
            RatioAdjustment.FieldCenterY(),
            packimg.getWidth() / 2f);

    mineflag = true;

    if (p.getConnect().isClient()) {
      vec = new Vec(8f, -10f);
    } else {
      vec = new Vec(-8f, 10f);
    }

    src = new Rect(0, 0, packimg.getWidth(), packimg.getHeight());
    int dx = cir.getDrawX(), dy = cir.getDrawY();
    dst = new Rect(dx, dy, dx + packimg.getWidth(), dy + packimg.getHeight());

    refl = RatioAdjustment.RefLeft();
    refr = RatioAdjustment.RefRight();

    clientflag = false;
  }
Beispiel #2
0
 public void init() {
   check_mallet_state = 0;
   cir.set(0, 0, cir.getR());
   if (parent.getConnect().isClient()) {
     vec = new Vec(8f, -10f);
   } else {
     vec = new Vec(-8f, 10f);
   }
   mineflag = true;
 }
Beispiel #3
0
  @Override
  public boolean onUpdate() {

    if (!clientflag) {

      Circle nc = new Circle(cir.getX() + vec.getX(), cir.getY() + vec.getY(), cir.getR());

      // 自分のマレットとの接触判定
      int n = parent.CountMallet();
      for (int i = 0; i < n; i++) {
        if ((check_mallet_state & (1 << i)) > 0) {
          Mallet m = parent.GetMallet(i);
          Circle mc = m.getCircle();
          if (GeneralCalc.CheckCircleInCircle(nc, mc)) {
            float rad = GeneralCalc.CircleToCircleAngle(mc, nc);
            float force = GeneralCalc.CircleInCircleSize(nc, mc);
            force = force > 12f ? 12f : force;
            vec.setF(GeneralCalc.CircleInCircleSize(nc, mc), rad);
            //						Log.d("setF","mc:: ("+mc.getX()+","+mc.getY()+") nc::
            // ("+nc.getX()+","+nc.getY()+") angle = "+GeneralCalc.RadToDegree(rad));
            nc.setX(nc.getX() + vec.getX());
            nc.setY(nc.getY() + vec.getY());
            break;
          }
        }
      }

      // 左端チェック
      if (GeneralCalc.CheckCircleRefLeft(nc)) {
        nc.setX(2 * refl - (nc.getX() - nc.getR()));
        vec.revX();
      }
      // 右端チェック
      if (GeneralCalc.CheckCircleRefRight(nc)) {
        nc.setX(2 * refr - (nc.getX() + nc.getR()));
        vec.revX();
      }

      cir.set(nc);

      int dx = cir.getDrawX(), dy = cir.getDrawY();
      //			Log.d("dx dy","dx = "+dx+" dy = "+dy+" angle = " +
      // GeneralCalc.RadToDegree(vec.getAngle()));
      dst.set(dx, dy, dx + packimg.getWidth(), dy + packimg.getHeight());

      // 向きに合わせて回転
      tmpAngle = GeneralCalc.RadToDegree(vec.getAngle());
      matrix.setRotate(tmpAngle);
      zimg =
          Bitmap.createBitmap(packimg, 0, 0, packimg.getWidth(), packimg.getHeight(), matrix, true);
      src.set(0, 0, zimg.getWidth(), zimg.getHeight());
    }

    if (cir.getY() > RatioAdjustment.GoalY()) {
      parent.gameEnd();
      parent.setLose();
    } else if (cir.getY() >= RatioAdjustment.PackR()) {
      mineflag = true;
    } else if (mineflag && cir.getY() < RatioAdjustment.PackR()) {
      parent.setSendStart();
      mineflag = false;
    }

    clientflag = false;
    check_mallet_state = 0;
    return true;
  }