Beispiel #1
0
 // reappear at given position
 public void blink(float x, float y) {
   if (System.currentTimeMillis() - lastBlinkTime < blinkThreshold && y < surfaceY - getHeight()) {
     setPosition(x, y);
     currentSprite = 0;
     ninjaState = NinjaState.Jump;
     BlinkView.getSoundManager().playSound("appear");
   }
 }
Beispiel #2
0
  // disappear on press of button
  public void blink(NinjaDirection direction) {
    if (ninjaState != NinjaState.Blink && currentBlinks > 0) {
      ninjaState = NinjaState.Blink;
      lastBlinkTime = System.currentTimeMillis();
      ninjaDirection = direction;
      BlinkView.getSoundManager().playSound("blink");
      if (direction == NinjaDirection.Right) {
        ninjaView = NinjaView.Right;
      } else if (direction == NinjaDirection.Left) {
        ninjaView = NinjaView.Left;
      }

      currentBlinks--;
      tobeRecharged++;

      if (!isNinjaRecharging() && tobeRecharged > 0) {
        elapsedTimeSinceStart = 0;
      }
    }
  }
Beispiel #3
0
  // overrided methods to control game object
  @Override
  public void update(long fps, long deltaTimeInMS) {

    // recharging blinks
    elapsedTimeSinceStart += deltaTimeInMS;
    if (elapsedTimeSinceStart > blinkRechargeTime) {
      if (currentBlinks < maxBlinks && tobeRecharged > 0) {
        currentBlinks++;
        tobeRecharged--;

        if (tobeRecharged > 0) {
          elapsedTimeSinceStart = 0;
        }
      }
    }

    // ninja is jumping but direction key is pressed
    // so run after landing on ground
    if (runAfterLanding && isNinjaOnSurface()) {
      ninjaState = NinjaState.Run;
      runAfterLanding = false;
    }

    PointF loc = getPosition();

    // check collision with left wall
    if (loc.x < 0.0f) {
      if (ninjaState == NinjaState.Run) {
        if (ninjaDirection == NinjaDirection.Left) {
          ninjaState = NinjaState.Idle;
        } else if (ninjaDirection == NinjaDirection.Right) {
          ninjaState = NinjaState.Run;
        }
      }

      if (ninjaState == NinjaState.Jump || ninjaState == NinjaState.Blink) {
        ninjaState = NinjaState.Jump;
        jumpVelocityY = 0f;
        ninjaDirection = NinjaDirection.Up;
      }

      loc.x = 2.0f;
    }

    // check collision with right wall
    if (loc.x + getLength() > screenX) {
      if (ninjaState == NinjaState.Run) {
        if (ninjaDirection == NinjaDirection.Right) {
          ninjaState = NinjaState.Idle;
        } else if (ninjaDirection == NinjaDirection.Left) {
          ninjaState = NinjaState.Run;
        }
      }

      if (ninjaState == NinjaState.Jump || ninjaState == NinjaState.Blink) {
        ninjaState = NinjaState.Jump;
        jumpVelocityY = 0f;
        ninjaDirection = NinjaDirection.Up;
      }

      loc.x = screenX - getLength() - 2;
    }

    // set new location if ninja is running
    if (ninjaState == NinjaState.Run && ninjaDirection == NinjaDirection.Right) {
      loc.x = loc.x + ninjaVelocityX / fps;
    }

    if (ninjaState == NinjaState.Run && ninjaDirection == NinjaDirection.Left) {
      loc.x = loc.x - ninjaVelocityX / fps;
    }

    // make ninja jump
    if (ninjaState == NinjaState.Jump) {
      float deltaTime = deltaTimeInMS / 1000.0f;

      jumpVelocityY += (gravity * deltaTime / 2);
      loc.y += jumpVelocityY * deltaTime;
      jumpVelocityY += (gravity * deltaTime / 2);

      if (ninjaDirection == NinjaDirection.Right) {
        loc.x = loc.x + jumpVelocityX / fps;
      }

      if (ninjaDirection == NinjaDirection.Left) {
        loc.x = loc.x - jumpVelocityX / fps;
      }

      if (loc.y > surfaceY - getHeight()) {
        loc.y = surfaceY - getHeight();
        jumpVelocityY = 0;
        ninjaState = NinjaState.Idle;
        loc.y = surfaceY - getHeight();
      }
    }

    // make ninja slide
    if (ninjaState == NinjaState.Slide) {
      if (ninjaDirection == NinjaDirection.Right) {
        loc.x = loc.x + slideVelocity / fps;
        slideVelocity -= friction;
      }

      if (ninjaDirection == NinjaDirection.Left) {
        loc.x = loc.x - slideVelocity / fps;
        slideVelocity -= friction;
      }

      if (slideVelocity < 0) {
        slideVelocity = 0;
      }
    }

    // if blinked for a time period above threshold, reappear at a random position
    if (ninjaState == NinjaState.Blink) {
      if (System.currentTimeMillis() - lastBlinkTime > blinkThreshold) {
        int lowx = (int) getLength() + 5;
        int highx = (int) (screenX - getLength() - 5);
        loc.x = lowx + generator.nextInt(highx - lowx);

        int lowy = (int) getHeight();
        int highy = (int) (surfaceY - getHeight());
        loc.y = lowy + generator.nextInt(highy - lowy);
        ninjaState = NinjaState.Jump;
        BlinkView.getSoundManager().playSound("appear");
      }
    }

    if (ninjaState == NinjaState.Dead) {
      if (loc.y < surfaceY - getHeight()) {
        loc.y += jumpVelocityY / fps;
        jumpVelocityY += gravity;
      }
    }

    // update location of ninja
    setPosition(loc.x, loc.y);
  }