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