Пример #1
0
        /// <summary>
        /// Creates all waves of a shot.
        /// </summary>
        public List <Bullet> FireShot(Shot shot, List <Spawner> spawners,
                                      Vector2 playerCenter)
        {
            var newBullets = new List <Bullet>();

            if (shot is StreamShot ss)
            {
                activeStreams.Add(ss);
                foreach (int enemy in ss.Enemies)
                {
                    var spawner = Util.GetSpawnerFromShotIndex(spawners, enemy);
                    spawner.ActiveFlares.Add(new Flare(
                                                 shot.Color, (float)ss.Duration, arenaCenter, (float)ss.Time));
                }
            }
            else
            {
                foreach (var wave in shot.GetWaves())
                {
                    foreach (var enemy in wave.Enemies)
                    {
                        var spawner = Util.GetSpawnerFromShotIndex(spawners, enemy);
                        newBullets.AddRange(wave.Create(spawner.Center, spawner.Angle, playerCenter, Level.Info.Colors));
                        AddFlare(shot, spawner);

                        if (Config.GameSettings.DrawParticles)
                        {
                            particles.CreateShotSpawnParticles(spawner, shot.Color);
                        }
                    }
                }
            }

            return(newBullets);
        }
Пример #2
0
        /// <summary>
        /// Updates streams.
        /// </summary>
        private void UpdateStreams(LevelTime levelTime, Vector2 playerCenter)
        {
            // TODO Refactor this old mess

            if (ActiveStreams.Count == 0)
            {
                return;
            }

            for (int i = 0; i < ActiveStreams.Count; i++)
            {
                var stream = ActiveStreams[i];

                stream.TimeSinceLastShot += (float)levelTime.ElapsedMs;
                if (stream.TimeSinceLastShot >= StreamShot.FireFrequency)
                {
                    var currStreamTime = levelTime.SongPosition - stream.Time;
                    var currSpeed      = stream.Speed0 + (currStreamTime * ((stream.Speed1 - stream.Speed0) / stream.Duration));
                    var currAngle      = stream.Angle0 + (currStreamTime * ((stream.Angle1 - stream.Angle0) / stream.Duration));
                    var currOffset     = stream.Offset0 + (currStreamTime * ((stream.Offset1 - stream.Offset0) / stream.Duration));

                    bool lastShot = levelTime.SongPosition + StreamShot.FireFrequency > stream.Time + stream.Duration;

                    foreach (int enemy in stream.Enemies)
                    {
                        var spawner = Util.GetSpawnerFromShotIndex(spawners, enemy);
                        var wave    = new Wave()
                        {
                            BulletType     = stream.BulletType,
                            Amount         = stream.Amount0,
                            Speed          = currSpeed,
                            Angle          = currAngle,
                            Offset         = currOffset,
                            Aim            = stream.Aim,
                            HomingLifespan = stream.HomingLifespan,
                        };
                        Bullets.AddRange(wave.Create(spawner.Center, spawner.Angle,
                                                     playerCenter, level.Info.Colors));

                        if (lastShot && Config.GameSettings.DrawParticles)
                        {
                            particles.CreateShotSpawnParticles(spawner, stream.Color);
                        }
                    }

                    if (lastShot)
                    {
                        ActiveStreams.RemoveAt(i);
                        i--;
                    }
                    else
                    {
                        stream.TimeSinceLastShot -= StreamShot.FireFrequency;
                    }
                }
            }
        }