// 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"); } }
// 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; } } }
// 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); }