Ejemplo n.º 1
0
        /// <summary>
        /// Generate a new enemy with specified kind.
        /// </summary>
        /// <param name="enemyKind"></param>
        private void GenerateEnemy(EnemyKind enemyKind)
        {
            // Get left max.
            int leftMax = 0;

            switch (enemyKind)
            {
            case EnemyKind.SmallEnemy:
                leftMax = Settings.SmallEnemyLeftMax;
                break;

            case EnemyKind.MiddleEnemy:
                leftMax = Settings.MiddleEnemyLeftMax;
                break;

            case EnemyKind.LargeEnemy:
                leftMax = Settings.LargeEnemyLeftMax;
                break;
            }

            // Random generate a number as its startX.
            int startX = random.Next(Settings.EnemyLeftMin, leftMax);

            // Generate the enemy.
            Enemy enemy = new Enemy(enemyKind, startX, level);

            // Add it to the linked list that contains all alive enemies.
            enemies.AddFirst(enemy);

            // Add it to the main scene.
            mainScene.Children.Add(enemy.EnemyImage);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 指定された種類の敵を指定の数だけ出現させる
 /// </summary>
 /// <param name="kind"></param>
 /// <param name="num"></param>
 public void CreateEnemy(EnemyKind kind)
 {
     if (enemyFactories.ContainsKey(kind))
     {
         EnemyBase enemy = enemyFactories[kind].CreateEnemy();
         enemyList[kind].Add(enemy);
     }
 }
Ejemplo n.º 3
0
    /// <summary>
    /// 敵生成ファクトリーを登録
    /// </summary>
    /// <param name="kind"></param>
    /// <param name="factory"></param>
    public void RegisterEnemyFactory(EnemyKind kind, IEnemyFactory factory)
    {
        enemyFactories.Add(kind, factory);

        // コールバック用に種類を保持
        EnemyKind enemyKind = kind;

        factory.AddSpawnListener(
            (createdEnemy) =>
        {
            enemyList[enemyKind].Add(createdEnemy);
        });
    }
Ejemplo n.º 4
0
    void spawnCheck()
    {
        if (_enemiesToSpawn > 0 && Time.time > _nextSpawnTime)//checks if there are enemies left to spawn this wave and if it is time to spawn a enemy, if it executes it ajusts the amount of enemies that need to spawn, resets the timer and spawns a enemy
        {
            _enemiesToSpawn--;
            _nextSpawnTime = Time.time + _currentWave.spawnTime;

            if(_112233)//functie die er voor zorgt dat als 112233 true is dat de eerste eerst worden gespawned dan de 2e en dan de 3e
            {
                if(_currentWave.enemyCount1 != 0)
                {
                    _currentEnemy = _enemies[0];
                    _enemy = _currentEnemy.enemy;
                    _currentWave.enemyCount1--;
                }
                else if (_currentWave.enemyCount2 != 0)
                {
                    _currentEnemy = _enemies[1];
                    _enemy = _currentEnemy.enemy;
                    _currentWave.enemyCount2--;
                }
                else if (_currentWave.enemyCount3 != 0)
                {
                    _currentEnemy = _enemies[2];
                    _enemy = _currentEnemy.enemy;
                    _currentWave.enemyCount3--;
                }
                else if (_currentWave.enemyCount4 != 0)
                {
                    _currentEnemy = _enemies[3];
                    _enemy = _currentEnemy.enemy;
                    _currentWave.enemyCount4--;
                }
                else if (_currentWave.enemyCount5 != 0)
                {
                    _currentEnemy = _enemies[4];
                    _enemy = _currentEnemy.enemy;
                    _currentWave.enemyCount5--;
                }
            }

            Enemy spawnedEnemy = Instantiate(_enemy, transform.position, Quaternion.identity) as Enemy;
            spawnedEnemy.OnDeath += OnEnemyDeath;//when ondeath is called, onenemydeath wil be called to
        }
        if (waveDone == true)
        {
            _maxTimeCounter -= Time.deltaTime;

            if (_maxTimeCounter <= 0)
            {
                NextWave();
                _wavesCounter++;
                waveDone = false;
            }
        }
    }
Ejemplo n.º 5
0
 /// <summary>
 /// 敵データを登録する
 /// </summary>
 /// <param name="kind"></param>
 /// <param name="enemy"></param>
 public void RegisterEnemy(EnemyKind kind, EnemyBase enemy)
 {
     enemyList[kind].Add(enemy);
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 敵情報を削除する
 /// </summary>
 /// <param name="kind"></param>
 /// <param name="enemy"></param>
 public void RemoveEnemy(EnemyKind kind, EnemyBase enemy)
 {
     enemyList[kind].Remove(enemy);
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Initializes a new instance of the Enemy class with given enemy kind, startX and level.
        /// </summary>
        /// <param name="enemyKind">Specifies which kind of enemy it is.</param>
        /// <param name="startX">The x-coordinate of the top-left point of this enemy's image to show.</param>
        /// <param name="level">Currrent difficulty level.</param>
        public Enemy(EnemyKind enemyKind, double startX, int level)
        {
            // Initialize a new Image for this enemy to show.
            this.EnemyImage = new Image();

            // Save the kind.
            this.EnemyKind = enemyKind;

            // Set its coordinate.
            Canvas.SetLeft(this.EnemyImage, startX);
            Canvas.SetTop(this.EnemyImage, Settings.EnemyStartY);

            // Initialize the collection of colliders of this enemy.
            Colliders = new LinkedList <ICollider>();

            // Set the image to display when destroying to 0.
            destroyImageIndex = 0;

            // This enemy is alive when initializing, so it can't be removed.
            this.CanBeRemoved = false;

            // Get the coordinate of the top-left point of this enemy's image.
            // This will be re-used for multiple times.
            double left = this.Left;
            double top  = this.Top;

            if (enemyKind == EnemyKind.SmallEnemy)
            {
                // Configure the flying and destroying images, speed, HP, and score of small enemy.
                destroyImages          = SmallEnemyDestroyImages;
                this.EnemyImage.Source = SmallEnemyImage;
                speed      = Settings.SmallEnemyInitialSpeed + level;
                this.HP    = Settings.SmallEnemyInitialHP;
                this.Score = Settings.SmallEnemyScore;

                // Generate colliders of this enemy.
                Rectangle2D rectangleCollider = new Rectangle2D(left + Settings.SmallRectangleColliderLeftOffset,
                                                                top + Settings.SmallRectangleColliderTopOffset,
                                                                Settings.SmallRectangleColliderWidth,
                                                                Settings.SmallRectangleColliderHeight);
                Circle circleCollider = new Circle(left + Settings.SmallCircleColliderCenterXOffset,
                                                   top + Settings.SmallCircleColliderCenterYOffset,
                                                   Settings.SmallCircleColliderRadius);

                Point2D p1 = new Point2D(left + Settings.SmallLeftTriangleVertex1XOffset,
                                         top + Settings.SmallLeftTriangleVertex1YOffset);
                Point2D p2 = new Point2D(left + Settings.SmallLeftTriangleVertex2XOffset,
                                         top + Settings.SmallLeftTriangleVertex2YOffset);
                Point2D p3 = new Point2D(left + Settings.SmallLeftTriangleVertex3XOffset,
                                         top + Settings.SmallLeftTriangleVertex3YOffset);
                Point2D p4 = new Point2D(left + Settings.SmallRightTriangleVertex1XOffset,
                                         top + Settings.SmallRightTriangleVertex1YOffset);
                Point2D p5 = new Point2D(left + Settings.SmallRightTriangleVertex2XOffset,
                                         top + Settings.SmallRightTriangleVertex2YOffset);
                Point2D p6 = new Point2D(left + Settings.SmallRightTriangleVertex3XOffset,
                                         top + Settings.SmallRightTriangleVertex3YOffset);
                Triangle2D leftTriangleCollider  = new Triangle2D(p1, p2, p3);
                Triangle2D rightTriangleCollider = new Triangle2D(p4, p5, p6);

                // Add colliders to the collider collection.
                Colliders.AddLast(rectangleCollider);
                Colliders.AddLast(circleCollider);
                Colliders.AddLast(leftTriangleCollider);
                Colliders.AddLast(rightTriangleCollider);
            }
            else if (enemyKind == EnemyKind.MiddleEnemy)
            {
                // Configure the flying and destroying images, speed, HP, and score of middle enemy.
                destroyImages          = MiddleEnemyDestroyImages;
                this.EnemyImage.Source = MiddleEnemyImage;
                speed      = Settings.MiddleEnemyInitialSpeed + level;
                this.HP    = Settings.MiddleEnemyInitialHP;
                this.Score = Settings.MiddleEnemyScore;

                // Generate colliders of this enemy.
                Rectangle2D upRectangleCollider = new Rectangle2D(left + Settings.MiddleUpRectangleColliderLeftOffset,
                                                                  top + Settings.MiddleUpRectangleColliderTopOffset,
                                                                  Settings.MiddleUpRectangleColliderWidth,
                                                                  Settings.MiddleUpRectangleColliderHeight);
                Rectangle2D downRectangleCollider = new Rectangle2D(left + Settings.MiddleDownRectangleColliderLeftOffset,
                                                                    top + Settings.MiddleDownRectangleColliderTopOffset,
                                                                    Settings.MiddleDownRectangleColliderWidth,
                                                                    Settings.MiddleDownRectangleColliderHeight);

                // Add colliders to the collider collection.
                Colliders.AddLast(upRectangleCollider);
                Colliders.AddLast(downRectangleCollider);
            }
            else
            {
                // Configure the flying and destroying images, speed, HP, and score of large enemy.
                destroyImages          = LargeEnemyDestroyImages;
                this.EnemyImage.Source = LargeEnemyImage;
                speed      = Settings.LargeEnemyInitialSpeed + level;
                this.HP    = Settings.LargeEnemyInitialHP;
                this.Score = Settings.LargeEnemyScore;

                this.EnemyImage.Width = Settings.LargeEnemyWidth;

                // Generate colliders of this enemy.
                Rectangle2D upLeftRectangleCollider = new Rectangle2D(left + Settings.LargeUpLeftRectangleColliderLeftOffset,
                                                                      top + Settings.LargeUpLeftRectangleColliderTopOffset,
                                                                      Settings.LargeUpLeftRectangleColliderWidth,
                                                                      Settings.LargeUpLeftRectangleColliderHeight);

                Rectangle2D upRightRectangleCollider = new Rectangle2D(left + Settings.LargeUpRightRectangleColliderLeftOffset,
                                                                       top + Settings.LargeUpRightRectangleColliderTopOffset,
                                                                       Settings.LargeUpRightRectangleColliderWidth,
                                                                       Settings.LargeUpRightRectangleColliderHeight);

                Rectangle2D middleRectangleCollider = new Rectangle2D(left + Settings.LargeMiddleRectangleColliderLeftOffset,
                                                                      top + Settings.LargeMiddleRectangleColliderTopOffset,
                                                                      Settings.LargeMiddleRectangleColliderWidth,
                                                                      Settings.LargeMiddleRectangleColliderHeight);

                Rectangle2D downRectangleCollider = new Rectangle2D(left + Settings.LargeDownRectangleColliderLeftOffset,
                                                                    top + Settings.LargeDownRectangleColliderTopOffset,
                                                                    Settings.LargeDownRectangleColliderWidth,
                                                                    Settings.LargeDownRectangleColliderHeight);

                Rectangle2D leftRectangleCollider = new Rectangle2D(left + Settings.LargeLeftRectangleColliderLeftOffset,
                                                                    top + Settings.LargeLeftRectangleColliderTopOffset,
                                                                    Settings.LargeLeftRectangleColliderWidth,
                                                                    Settings.LargeLeftRectangleColliderHeight);

                Rectangle2D rightRectangleCollider = new Rectangle2D(left + Settings.LargeRightRectangleColliderLeftOffset,
                                                                     top + Settings.LargeRightRectangleColliderTopOffset,
                                                                     Settings.LargeRightRectangleColliderWidth,
                                                                     Settings.LargeRightRectangleColliderHeight);

                // Add colliders to the collider collection.
                Colliders.AddLast(upLeftRectangleCollider);
                Colliders.AddLast(upRightRectangleCollider);
                Colliders.AddLast(middleRectangleCollider);
                Colliders.AddLast(downRectangleCollider);
                Colliders.AddLast(leftRectangleCollider);
                Colliders.AddLast(rightRectangleCollider);
            }
        }
Ejemplo n.º 8
0
    void spawnCheck()
    {
        //print(enemiesToSpawn);
        if (enemiesToSpawn > 0 && Time.time > nextSpawnTime)//checks if there are enemies left to spawn this wave and if it is time to spawn a enemy, if it executes it ajusts the amount of enemies that need to spawn, resets the timer and spawns a enemy
        {
            //print("kijk");
            enemiesToSpawn--;
            nextSpawnTime = Time.time + currentWave.spawnTime;

            //print("ello" + enemy);
            if (_112233)//functie die er voor zorgt dat als 112233 true is dat de eerste eerst worden gespawned dan de 2e en dan de 3e
            {
                if (currentWave.enemyCount1 != 0)
                {
                    currentEnemy = enemies[0];
                    enemy = currentEnemy.enemy;
                    currentWave.enemyCount1--;
                }
                else if (currentWave.enemyCount2 != 0)
                {
                    currentEnemy = enemies[1];
                    enemy = currentEnemy.enemy;
                    currentWave.enemyCount2--;
                }
                else if (currentWave.enemyCount3 != 0)
                {
                    currentEnemy = enemies[2];
                    enemy = currentEnemy.enemy;
                    currentWave.enemyCount3--;
                }
                else if (currentWave.enemyCount4 != 0)
                {
                    currentEnemy = enemies[3];
                    enemy = currentEnemy.enemy;
                    currentWave.enemyCount4--;
                }
                else if (currentWave.enemyCount5 != 0)
                {
                    currentEnemy = enemies[4];
                    enemy = currentEnemy.enemy;
                    currentWave.enemyCount5--;
                }
            }
            if (spawnpointDivider >= spawnpoints.Length)
            {
                spawnpointDivider = 0;
            }
            Guard spawnedEnemy = Instantiate(enemy, spawnpoints[spawnpointDivider].position, Quaternion.identity) as Guard;
            spawnpointDivider++;
            spawnedEnemy.OnDeath += OnEnemyDeath;//when ondeath is called, onenemydeath wil be called to
        }
        if (waveDone == true)
        {
            maxTimeCounter -= Time.deltaTime;

            if (maxTimeCounter <= 0)
            {
                NextWave();

                print("test me biatch");
                wavesCounter++;
                waveDone = false;
            }
        }
    }