示例#1
0
        /// <summary>
        /// Mets à jour la tour.
        /// </summary>
        protected override void DoUpdate(GameTime time)
        {
            base.DoUpdate(time);

            // Temps d'attente avant de respawn.
            if (m_respawnTimer > 0)
            {
                m_respawnTimer -= (float)time.ElapsedGameTime.TotalSeconds;
                return;
            }

            // Si on doit spawn une vague
            if (m_waveTimer <= 0)
            {
                m_waveTimer = SpawnInterval;
                float decay = 0;
                for (int i = 0; i < VirusPerWave; i++)
                {
                    int iref = i;
                    var DatacenterCandidates = GameServer.GetMap().Entities.GetEntitiesByType((this.Type & EntityType.Teams) | EntityType.Datacenter);
                    if (DatacenterCandidates.Count > 0)
                    {
                        var Datacenter = DatacenterCandidates.First().Value;
                        SpawnPosition = Datacenter.Position;
                    }

                    GameServer.GetScene().EventSheduler.Schedule(new Scheduler.ActionDelegate(() =>
                    {
                        EntityVirus Virus = new EntityVirus()
                        {
                            Position = SpawnPosition,
                            Type     = EntityType.Virus | (this.Type & (EntityType.Team1 | EntityType.Team2)),
                            Row      = iref % RowCount,
                        };

                        if (HasBossBuff)
                        {
                            Virus.ApplyBossBuff();
                        }

                        GameServer.GetMap().Entities.Add(Virus.ID, Virus);
                    }), decay);
                    decay += SpawnDecay;
                }
            }

            // Décrémente le timer d'apparition des vagues.
            m_waveTimer -= (float)time.ElapsedGameTime.TotalSeconds;

            if (m_bossBuffTimer > 0)
            {
                m_bossBuffTimer -= (float)time.ElapsedGameTime.TotalSeconds;
            }
        }