/// <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; } }