Example #1
0
        /// <summary>
        /// Метод добавление нв игру объектов.
        /// </summary>
        private void GenerateObjects()
        {
            int rnd = rand.Next(0, 1000);

            if (rnd > 900)
            {
                Meteor ast = new Meteor(
                    new Point(rand.Next(Width + 100, Width + 650), rand.Next(0, Height)),                                           //Координаты астероида
                    new Point(rand.Next(-9, -2), 0),                                                                                //Направление и скорость движения астероида
                    new Size(rand.Next(50, 110), rand.Next(50, 110)),                                                               //Размеры астероида
                    loader.ResList.Where(t => t.resType == "asteroid").OrderBy(arg => Guid.NewGuid()).Take(1).FirstOrDefault().img, //Изображение каждого астероида выбирается случайным образом из загруженных ресурсов
                    Buffer.Graphics,
                    new Size(Width, Height),
                    rand.Next(-10, 10));
                ast.EnemyMessage += MessageArrive;
                objs.Add(ast);
            }
            else if (rnd < 10)
            {
                RemontComplect heal = new RemontComplect(
                    new Point(rand.Next(Width + 100, Width + 650), rand.Next(0, Height)), //Координаты аптечки
                    new Point(rand.Next(-9, -2), 0),                                      //Направление и скорость движения аптечки
                    new Size(35, 35),                                                     //Размеры аптечки
                    Image.FromFile(@"..\..\res\img\remkomplect.png"),
                    Buffer.Graphics,
                    new Size(Width, Height),
                    rand.Next(10, 60));    //Количество жизней, восполняемых ремкомплектом
                heal.RemontComplectMessage += MessageArrive;
                objs.Add(heal);
            }
            else if (rnd > 890)
            {
                Enemy en = new Enemy(
                    new Point(rand.Next(Width + 100, Width + 650), rand.Next(0, Height)), //Координаты врага
                    new Point(rand.Next(-5, -2), 0),                                      //Направление и скорость движения врага
                    new Size(216, 303),                                                   //Размеры врага
                    Image.FromFile(@"..\..\res\img\ship2.png"),
                    Buffer.Graphics,
                    new Size(Width, Height),
                    rand.Next(60, 90),     //Количество жизней врага
                    rand);
                en.EventMessage += MessageArrive;
                objs.Add(en);
            }
        }
Example #2
0
        private void UpdateAsteroids()
        {
            for (int i = 0; i < _maxAsteroids; i++)
            {
                Meteor meteor = _asteroids[i];

                if (meteor == null || meteor.Dead)
                {
                    continue;
                }

                meteor.transform.Rotate(new Vector3(0, 0, 5f * Time.fixedDeltaTime));

                EdgeWarp(meteor);
            }

            if (_debris == null)
            {
                return;
            }

            int debrisCount = _debris.Length;

            for (int i = 0; i < debrisCount; i++)
            {
                Meteor meteor = _debris[i];

                if (meteor == null || meteor.Dead)
                {
                    continue;
                }

                meteor.transform.Rotate(new Vector3(0, 0, 5f * Time.fixedDeltaTime));

                EdgeWarp(meteor);
            }
        }
Example #3
0
        public void AddMeteorDebris(Meteor meteor, Collider2D other)
        {
            if (meteor.Debris == null || meteor.Debris.Length < 1)
            {
                return;
            }

            int     count     = meteor.Debris.Length;
            int     poolCount = _debris.Length;
            Vector2 direction = other.transform.up.normalized;
            Vector3 position  = meteor.transform.position;

            _aliveEntities += count;

            for (int i = 0; i < count; i++)
            {
                Vector3 newPosition = new Vector3(position.x + (float)_rnd.NextDouble(), position.y + (float)_rnd.NextDouble(), 0f);
                Vector2 force       = direction * ((i + 1) * .5f);

                Meteor debris = Instantiate(meteor.Debris[i], newPosition, meteor.transform.rotation, _asteroidsRoot);

                debris.Rigidbody.AddForceAtPosition(force, meteor.transform.position, ForceMode2D.Impulse);

                for (int j = 0; j < poolCount; j++)
                {
                    if (_debris[j] != null)
                    {
                        continue;
                    }

                    _debris[j] = debris;

                    break;
                }
            }
        }