示例#1
0
 public void ReleaseDisillusionRays(Goat goat)
 {
     //SoundsLibrary.PlaySound(SoundsLibrary.goatReleasingDisillusionRaysSound);
     UpdateDisillusionRaysPosition(goat);
     affectedByLoveInvisibility = false;
     goat.ChangeGoatAction(Goat.GoatActions.ReleasingDisillusionRays);
     disillusionRaysAnimation.currentFrame = 0;
     invisibilityElapsedTime = 0;
 }
示例#2
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;
            }
        }