/// <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); }
/// <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); } }
/// <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); }); }
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; } } }
/// <summary> /// 敵データを登録する /// </summary> /// <param name="kind"></param> /// <param name="enemy"></param> public void RegisterEnemy(EnemyKind kind, EnemyBase enemy) { enemyList[kind].Add(enemy); }
/// <summary> /// 敵情報を削除する /// </summary> /// <param name="kind"></param> /// <param name="enemy"></param> public void RemoveEnemy(EnemyKind kind, EnemyBase enemy) { enemyList[kind].Remove(enemy); }
/// <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); } }
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; } } }