Exemple #1
0
        /// <summary>
        /// Update the Attack item
        /// </summary>
        /// <param name="dt"> A delta time since the last update was called</param>
        /// <param name="input">A GenericInput to process.</param>
        public override void Update(TimeSpan dt, GenericInput input)
        {
            //on keyboard input determine the Hero's direction
            if (input is GenericKeyboardInput)
            {
                GenericKeyboardInput gki = (GenericKeyboardInput)input;
                DirectionIn = new Vector2(DirectionX, DirectionY);
                DetermineDirection(gki);
                DirectionOut = new Vector2(DirectionX, DirectionY);
                AnimateHero();
            }

            //on mouse click launch an attack
            if (input is MouseGenericInput)
            {
                MouseGenericInput mgi = (MouseGenericInput)input;

                if (mgi.MouseInputType == MouseGenericInput.MouseGenericInputType.MouseClick && (DirectionX * DirectionX + DirectionY * DirectionY) != 0)
                {
                    // create the scene switch message to switch the current scene to the top score scene
                    Message_Attack heroAttack = new Message_Attack("Arrow", this.DirectionX, this.DirectionY, Location, Message_Attack.AttackType.Hero_Arrow, ArrowRange, ArrowDamage);
                    MessageManager.AddMessageItem(heroAttack);
                }
            }
            //update hero location
            SetLocation(dt);
            HealthBar = new Windows.Foundation.Rect(Location.X - 10, Location.Y - 10, 50, 5);
        }
Exemple #2
0
        /// <summary>
        /// Update the Attack item
        /// </summary>
        /// <param name="dt"> A delta time since the last update was called</param>
        /// <param name="input">A GenericInput to process.</param>
        public override void Update(TimeSpan dt, GenericInput input)
        {
            //boss moves towards hero
            HeroDirectionVector();

            //boss attacks on a timer
            TimeSinceAttack = DateTime.Now - LastAttack;

            if (TimeSinceAttack.TotalMilliseconds > TimeBetweenAttacks)
            {
                Message_Attack VillainAttack = new Message_Attack("Villain_Attack", DirectionX, DirectionY, this.Location, Message_Attack.AttackType.Minion_Arrow, Range, Damage);
                MessageManager.AddMessageItem(VillainAttack);
                LastAttack = DateTime.Now;
            }

            //Update bosses location on call to update
            SetLocation(dt);
        }
Exemple #3
0
        /// <summary>
        /// Updates the scene based on incoming messages
        /// </summary>
        /// <param name="dt">Delta time since thew last update was called</param>
        /// <param name="message"> incoming message</param>
        public override void Update(TimeSpan dt, GenericMessage message)
        {
            foreach (GenericItem gi in objects)
            {
                //update each generic item
                gi.Update(dt, message);
            }
            foreach (Hero hero in heros)
            {
                //update each generic item
                hero.Update(dt, message);
            }
            foreach (Villain villain in villains)
            {
                //update each generic item
                villain.Update(dt, message);
            }

            if (message is Message_Attack)
            {
                Message_Attack mhe = (Message_Attack)message;

                switch (mhe.Type)
                {
                case (Message_Attack.AttackType.Hero_Arrow):
                {
                    //(Terry)TODO: add rotation to arrows, this might require using something other than CanvasBitmap images
                    Attack attack = new Attack(mhe.Name, mhe.DirectionX, mhe.DirectionY, mhe.Location, Attack.AttackType.Hero_Arrow, mhe.Range, mhe.Damage);
                    attack.SetBitmapFromImageDictionary("Arrow");
                    this.AddObject(attack);
                    break;
                }

                case (Message_Attack.AttackType.Minion_Arrow):
                {
                    Attack arrow = new Attack(mhe.Name, mhe.DirectionX, mhe.DirectionY, mhe.Location, Attack.AttackType.Boss_Arrow, mhe.Range, mhe.Damage);
                    arrow.SetBitmapFromImageDictionary("Arrow");
                    this.AddObject(arrow);
                    break;
                }
                }
            }

            //if two generic items on the canvas have collided find out what collided and apply aprpriate damage
            if (message is Message_Collision)
            {
                Message_Collision attackInfo = (Message_Collision)message;

                if (attackInfo.CollisionObject is Attack)
                {
                    Attack attack = (Attack)attackInfo.CollisionObject;

                    //if the boss is hit by an attack, increase score, reduce bosses health and remove the attack
                    if (attackInfo.Victim is Boss)
                    {
                        Boss boss = (Boss)attackInfo.Victim;
                        boss.CurrentHealth -= attack.Damage;
                        Score += attack.Damage;
                        _score_label.UpdateText("SCORE: " + Score);
                        objects.Remove(attackInfo.CollisionObject);

                        if (boss.CurrentHealth <= 0.0f)
                        {
                            boss.Level        += 1;
                            boss.MaxHealth    += 100;
                            boss.CurrentHealth = boss.MaxHealth;
                        }
                    }
                    // if the attack hit a minion, remove the attack and the minion
                    else if (attackInfo.Victim is Villain)
                    {
                        Villain villain = (Villain)attackInfo.Victim;
                        villains.Remove(villain);
                        objects.Remove(attackInfo.CollisionObject);
                    }
                    //if the attack hit the hero, reduce hero's health and check for game over
                    else if (attackInfo.Victim is Hero)
                    {
                        Hero hero = (Hero)attackInfo.Victim;
                        hero.CurrentHealth -= attack.Damage;
                        objects.Remove(attackInfo.CollisionObject);
                        if (hero.CurrentHealth <= 0)
                        {
                            heros.Remove(hero);
                            //add tombstone image where hero died?
                            // If all heroes (spelled correctly this time) have died it's game over
                            if (heros.Count <= 0)
                            {
                                game_over = true;
                            }
                        }
                    }
                }
            }
            // switch to game over scene
            if (game_over)
            {
                Message_SceneSwitch mss = new Message_SceneSwitch("Game Over Scene");
                MessageManager.AddMessageItem(mss);
            }

            if (message is Message_SpawnMinions)
            {
                Message_SpawnMinions spawn = (Message_SpawnMinions)message;
                Random r = new Random();
                for (int i = 0; i < spawn.NumberOfMinions; i++)
                {
                    Villain villain = new Villain("minion");
                    villain.Location = new System.Numerics.Vector2(r.Next(0, _width), r.Next(0, _height));
                    villain.SetBitmapFromImageDictionary("MinionLeft");
                    this.AddObject(villain);
                }
            }
        }