Beispiel #1
0
        public override void Update(TimeSpan dt, GenericInput input)
        {
            base.Update(dt, input);

            SpawnTimer = DateTime.Now - LastSpawn;
            if (SpawnTimer.TotalMilliseconds > TimeBetweenSpawns)
            {
                Message_SpawnMinions spawn = new Message_SpawnMinions(Level);
                MessageManager.AddMessageItem(spawn);
                LastSpawn = DateTime.Now;
            }
        }
Beispiel #2
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);
                }
            }
        }