public void ReleaseDisillusionRays(Goat goat) { //SoundsLibrary.PlaySound(SoundsLibrary.goatReleasingDisillusionRaysSound); UpdateDisillusionRaysPosition(goat); affectedByLoveInvisibility = false; goat.ChangeGoatAction(Goat.GoatActions.ReleasingDisillusionRays); disillusionRaysAnimation.currentFrame = 0; invisibilityElapsedTime = 0; }
public void Update(GameTime gameTime, Goat goat) { if (affectedByLoveInvisibility) { invisibilityElapsedTime += (int)gameTime.ElapsedGameTime.TotalMilliseconds; if (invisibilityElapsedTime > invisibilityMillisecondsTime) { ReleaseDisillusionRays(goat); } return; } switch (goat.goatActions) { case Goat.GoatActions.InLove: heartElapsedTime += (int)gameTime.ElapsedGameTime.TotalMilliseconds; if (heartElapsedTime > heartMillisecondsTime) { if (!showHeart) { showHeart = true; timesHeartBlinked++; } else { showHeart = false; if (timesHeartBlinked >= maxHeartBlinks) { affectedByLoveInvisibility = true; goat.ChangeGoatAction(Goat.GoatActions.None); timesHeartBlinked = 0; goat.sp -= manaCost; } } heartElapsedTime = 0; } if (showHeart) { UpdateHeartPosition(goat); } break; case Goat.GoatActions.ReleasingDisillusionRays: UpdateDisillusionRaysPosition(goat); foreach (Player p in Game1.players) { if (p != goat) { bool alreadyHit = false; if (playersHitByDisillusionRays.Count > 0) { foreach (Player ph in playersHitByDisillusionRays) { if (ph == p) { alreadyHit = true; } } } if (!alreadyHit) { if (disillusionRaysAnimation.destinationRect.Intersects(p.body) && !p.playerIsDead) { p.hp -= disillusionRaysDamage; playersHitByDisillusionRays.Add(p); } } } } if (disillusionRaysAnimation.LastFrame()) { goat.ChangeGoatAction(Goat.GoatActions.None); playersHitByDisillusionRays.Clear(); return; } disillusionRaysAnimation.Update(gameTime); break; } }