예제 #1
0
        private void Add(IAsteroid asteroid)
        {
            asteroid.BecomeInvisible    += OnAsteroidInvisible;
            asteroid.CollisionPerformed += OnCollisionDetected;

            asteroid.Speed = Math.Max(1.0f, _flightTime / 3.0f);
        }
예제 #2
0
 void IPlayerShipView.Die(IAsteroid asteroidHit)
 {
     if(asteroidHit != null)
         asteroidHit.GetRekt();
     OnDie.Invoke();
     transform.localPosition = new Vector3(0, 0, 0);
 }
예제 #3
0
        private void Add(IAsteroid asteroid)
        {
            asteroid.BecomeInvisible += OnAsteroidInvisible;
            asteroid.CollisionPerformed += OnCollisionDetected;

            asteroid.Speed = Math.Max(1.0f, _flightTime / 3.0f);
        }
예제 #4
0
 public AsteroidDestroyedPayload(AsteroidType asteroidType, Vector2 pos, IAsteroid asteroid)
 {
     EventName    = GameConsts.AsteroidDestroyed;
     AsteroidType = asteroidType;
     Pos          = pos;
     Asteroid     = asteroid;
 }
예제 #5
0
 public void Add(IAsteroid asteroid)
 {
     lock (lockHandle)
     {
         _AsteroidCollection.AddFirst(new Asteroid(asteroid));
         _Count++;
     }
 }
예제 #6
0
 /// <summary>
 /// Copy- Konstuktor
 /// </summary>
 /// <param name="src"></param>
 public Asteroid(IAsteroid src)
     : this(
         Name : src.Name,
         DistanceSunInAU : src.DistanceSunInAU,
         DiameterInKm : src.DiameterInKm,
         E : src.E,
         OrbitalTime : src.OrbitalTimeInEarthYears,
         Albedo : src.Albedo)
 {
 }
예제 #7
0
 public void Construct(
     IAsteroid asteoid,
     Pool asteroidPool,
     AsteroidCommonSettings asteroidCommonSettings
     )
 {
     this.asteroid               = asteoid;
     this.asteroidPool           = asteroidPool;
     this.asteroidCommonSettings = asteroidCommonSettings;
     currentHealth               = asteroidCommonSettings.Health;
 }
예제 #8
0
 public AsteroidMoveHandler(
     IAsteroid asteroid,
     AsteroidFacade asteroidFacade,
     AsteroidFacade.Pool asteroidFactory,
     ScreenBoundary screenBoundary
     )
 {
     this.asteroid        = asteroid;
     this.asteroidFacade  = asteroidFacade;
     this.asteroidFactory = asteroidFactory;
     this.screenBoundary  = screenBoundary;
 }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        IAsteroid asteroid = collision.GetComponent <IAsteroid>();

        if (asteroid != null && shieldBlock == true)
        {
            updateShieldHealth(-gc.asteroidShieldDamage);
            gc.score += gc.asteroidPoints;
            asteroid.Split();
        }
        else if (collision.gameObject.tag == "EnemyAmmo" && shieldBlock == true)
        {
            updateShieldHealth(-gc.asteroidShieldDamage);
            Destroy(collision.gameObject);
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        IAsteroid asteroid = collision.GetComponent <IAsteroid>();
        IEnemy    enemy    = collision.GetComponent <IEnemy>();

        if (asteroid != null)
        {
            asteroid.Split();
            gc.score += gc.asteroidPoints;
            removeObject();
        }
        else if (enemy != null)
        {
            enemy.takeDamage(1);
            gc.money += enemy.getMoneyWorth();
            removeObject();
        }
    }
 public void Add(IAsteroid a)
 {
     if (!_Asteroids.Any(ast => ast.Name == a.Name))
     {
         _Asteroids.Add(
             new Asteroid(
                 Name: a.Name,
                 DiameterInKm: a.DiameterInKm,
                 Albedo: a.Albedo,
                 DistanceSunInAU: a.DistanceSunInAU,
                 E: a.E,
                 OrbitalTime: a.OrbitalTimeInEarthYears));
     }
     else
     {
         throw new ArgumentException("Der Asteroid mit dem Namen " + a.Name + " ist bereits erfasst");
     }
 }
예제 #12
0
        static void Main(string[] args)
        {
            RandomAsteroidFactory factory = new RandomAsteroidFactory();

            Console.WriteLine("Our Asteroid Factory will create randomly some asteroids");

            int numberOfAsteroids = 0;

            Task[] asteroidTasks = new Task[20];

            List <IAsteroid> asteroids = new List <IAsteroid>();

            while (numberOfAsteroids < 20)
            {
                IAsteroid newAsteroid = factory.CreateAsteroid();
                asteroids.Add(newAsteroid);
                asteroidTasks[numberOfAsteroids] = newAsteroid.MoveTask;
                numberOfAsteroids++;
            }

            Task.WaitAll(asteroidTasks);
            foreach (IAsteroid asteroid in asteroids)
            {
                Console.WriteLine($"Asteroid_{numberOfAsteroids}:" +
                                  $"\n\tType: {asteroid.GetType().Name}" +
                                  $"\n\t\tChildren:");
                int numberOfChild = 0;
                if (asteroid.Children.Count > 0)
                {
                    foreach (IAsteroid child in asteroid.Children)
                    {
                        Console.WriteLine($"\t\t\t* Child_{++numberOfChild}: {child.GetType().Name}");
                    }
                }
            }
        }
예제 #13
0
 private void OnCollisionDetected(IAsteroid asteroid, Vector3 pos)
 {
     FxPlayer.PlaySmallBlast(pos);
     RemoveAsteroid(asteroid);
     SpaceShip.Hp--;
 }
예제 #14
0
 private void OnAsteroidInvisible(IAsteroid asteroid)
 {
     RemoveAsteroid(asteroid);
 }
 public AsteroidRotationHandler(IAsteroid asteroid)
 {
     this.asteroid = asteroid;
 }
예제 #16
0
 public void AddAsteroid(IAsteroid asteroidToAdd)
 {
     asteroids.Add(asteroidToAdd);
 }
예제 #17
0
 public static void SkipRef()
 {
     Ref = null;
 }
예제 #18
0
        public static void Process()
        {
            //	столкновения
            List<Point> mean = new List<Point>();
            Point pos1, pos2;
            int r1, r2;
            for (int i = 0; i < Asteroids.Count; i++)
            {
                pos1 = Asteroids[i].GetCoords();
                r1 = Asteroids[i].GetRadius();
                mean = Cell.GetMeaningfulCells(Asteroids[i].GetCoords(), Asteroids[i].GetRadius() + MaxRadius);
                for (int j = 0; j < mean.Count; j++)
                {
                    for (int k = 0; k < Field[mean[j].X][mean[j].Y].AsterLinks.Count; k++)
                    {
                        if (Field[mean[j].X][mean[j].Y].AsterLinks[k] != i)
                        {
                            pos2 = Asteroids[Field[mean[j].X][mean[j].Y].AsterLinks[k]].GetCoords();
                            r2 = Asteroids[Field[mean[j].X][mean[j].Y].AsterLinks[k]].GetRadius();
                            if (r1 + r2 > (int)Math.Sqrt((pos1.X - pos2.X) * (pos1.X - pos2.X) + (pos1.Y - pos2.Y) * (pos1.Y - pos2.Y)))
                            {
                                Clash(i, Field[mean[j].X][mean[j].Y].AsterLinks[k], pos1, pos2, r1, r2);
                            }
                        }
                    }
                }
            }

            //	движение
            for (int i = 0; i < Asteroids.Count; i++)
                Asteroids[i].Move();

            //	смерть
            for (int i = Asteroids.Count - 1; i >= 0; i--)
                if (!Asteroids[i].IsAlive())
                {
                    if (Asteroids[i].IsExplode())
                    {
                        Point pos = Asteroids[i].GetCoords();
                        if (!((pos.X < -MaxRadius) || (pos.X > WorldSize + MaxRadius) || (pos.Y < -MaxRadius) || (pos.Y > WorldSize + MaxRadius)))
                            AsterMassDestroed += Asteroids[i].GetMass();
                        Explosions.Add(AsterAvalible.GetExplosionName(Asteroids[i].GetIntType()), pos.X, pos.Y);
                    }
                    else
                            AsterMassDestroed -= Asteroids[i].GetMass();
                    if (Ref != null)
                    {
                        if (Ref.Equals(Asteroids[i]))
                            Ref = null;
                    }
                    Asteroids.RemoveAt(i);
                }
        }
예제 #19
0
 private void RemoveAsteroid(IAsteroid asteroid)
 {
     asteroid.BecomeInvisible    -= OnAsteroidInvisible;
     asteroid.CollisionPerformed -= OnCollisionDetected;
     asteroid.SelfDestroy();
 }
예제 #20
0
 // -1 -нету, иначе есть
 public static int GetAsteroid(Point pos)
 {
     int x, y;
     for (int i = 0; i < Asteroids.Count; i++)
     {
         x = Asteroids[i].GetCoords().X;
         y = Asteroids[i].GetCoords().Y;
         if (Asteroids[i].GetRadius() >= (int)Math.Sqrt((pos.X - x) * (pos.X - x) + (pos.Y - y) * (pos.Y - y)))
         {
             Ref = Asteroids[i];
             return i;
         }
     }
     return -1;
 }
예제 #21
0
 public static void CreateWorld(int worldrad)
 {
     Ref = null;
     AsterMassDestroed = 0;
     Asteroids = new List<IAsteroid>();
     Field = new Cell[Cell.MaxInd.X + 1][];
     for (int i = 0; i < Field.Length; i++)
     {
         Field[i] = new Cell[Cell.MaxInd.Y + 1];
         for (int j = 0; j < Field[i].Length; j++)
             Field[i][j] = new Cell(new Point(i, j));
     }
 }
예제 #22
0
 private void SpawnAsteroid(IAsteroid asteroid)
 {
     asteroid.SetPositionAndRotation(GetRandomSpawn());
     asteroid.SetActive(true);
 }
예제 #23
0
 public void RemoveAsteroid(IAsteroid asteroidToRemove)
 {
     asteroids.Remove(asteroidToRemove);
 }
예제 #24
0
 private void OnCollisionDetected(IAsteroid asteroid, Vector3 pos)
 {
     FxPlayer.PlaySmallBlast(pos);
     RemoveAsteroid(asteroid);
     SpaceShip.Hp--;
 }
예제 #25
0
 private void RemoveAsteroid(IAsteroid asteroid)
 {
     asteroid.BecomeInvisible -= OnAsteroidInvisible;
     asteroid.CollisionPerformed -= OnCollisionDetected;
     asteroid.SelfDestroy();
 }
예제 #26
0
 public static void Prepare()
 {
     Point ind;
     int i = 0;
     ClearCells();
     while (i < Asteroids.Count)
     {
         while ((i < Asteroids.Count) && (!CheckDistance(Asteroids[i].GetCoords())))
         {
             if (Ref != null)
             {
                 if (Ref.Equals(Asteroids[i]))
                     Ref = null;
             }
             Asteroids.RemoveAt(i);
         }
         if (i < Asteroids.Count)
         {
             ind = Cell.GetCellIndex(Asteroids[i].GetCoords());
             Field[ind.X][ind.Y].AddAsterLink(i);
         }
         i++;
     }
 }
예제 #27
0
 public void Die(IAsteroid asteroidHit)
 {
     if (controller.isInvincible) return;
     view.Die(asteroidHit);
     controller.Die();
 }
예제 #28
0
 private void OnAsteroidInvisible(IAsteroid asteroid)
 {
     RemoveAsteroid(asteroid);
 }