예제 #1
0
 public void UnregisterEnemy(IEnemyController enemy)
 {
     if (enemies.Contains(enemy))
     {
         enemies.Remove(enemy);
     }
 }
예제 #2
0
 public void RegisterEnemy(IEnemyController enemy)
 {
     if (!enemies.Contains(enemy))
     {
         enemies.Add(enemy);
     }
 }
예제 #3
0
 private void Awake()
 {
     _mapController   = gameObject.GetComponent <IMapController>();
     _tankController  = gameObject.GetComponent <ITankController>();
     _inputController = gameObject.GetComponent <IInputController>();
     _enemyController = gameObject.GetComponent <IEnemyController>();
 }
예제 #4
0
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.layer == LayerMask.NameToLayer("Player"))
        {
            // Damage player - caused by enemy shooting
            Player.GetInstanceHealth()?.Damage(damage);

            Score.IncreaseScore(ScoreValues.playerShot);
        }
        else if (collision.gameObject.layer == LayerMask.NameToLayer("Enemy"))
        {
            Armour armour = collision.gameObject.GetComponent <Armour>();

            if (armour != null && armour.IsActive())
            {
                // Damage armour - caused by player shooting
                armour?.Damage(damage);

                Score.IncreaseScore(ScoreValues.armouredEnemyShot);
            }
            else if (collision.gameObject.CompareTag("Head"))
            {
                EnemyHead enemyHead = collision.gameObject.GetComponent <EnemyHead>();

                // Kill enemy with 1 shot
                enemyHead?.KillEnemy();

                Score.IncreaseScore(ScoreValues.enemyHeadshot);
            }
            else if (collision.gameObject.CompareTag("HeadBoss"))
            {
                BossHead enemyHead = collision.gameObject.GetComponent <BossHead>();

                // Damage enemy - caused by player shooting
                enemyHead?.DamageHead(damage);

                Score.IncreaseScore(ScoreValues.enemyHeadshot);
            }
            else
            {
                IEnemyController enemyController = collision.gameObject.GetComponent <IEnemyController>();

                // Damage enemy - caused by player shooting
                enemyController?.DamageEnemy(damage);

                Score.IncreaseScore(ScoreValues.enemyShot);
            }
        }
        else if (collision.gameObject.layer == LayerMask.NameToLayer("Cover"))
        {
            Health coverHealth = collision.gameObject.GetComponent <Health>();

            // Damage cover - caused by enemy shooting
            coverHealth?.Damage(damage);
        }

        // Destroy Bullet
        Destroy(gameObject);
    }
예제 #5
0
    private void Awake()
    {
        _inputSystem      = GetComponent <IInputSystem>();
        _playerController = GetComponent <IPlayerController>();
        _enemyController  = GetComponent <IEnemyController>();
        _uiController     = GetComponent <IUiController>();

        _inputSystem.OnEscape   = OnEscape;
        _inputSystem.OnEscapeUp = () => _timeBeforeQuit = 0;
        _status = GameStatus.Start;
    }
예제 #6
0
    public GameplayController(ILevelSetter levelSetter, IEnemyController enemyController, IHealthController healthController, IGoldController goldController, ITowerController towerController, IObjectPooler objectPooler)
    {
        _levelSetter      = levelSetter;
        _enemyController  = enemyController;
        _healthController = healthController;
        _goldController   = goldController;
        _towerController  = towerController;
        _objectPooler     = objectPooler;

        _healthController.HealthIsZero += EndGame;
    }
예제 #7
0
 private bool CheckForEnemyPresence(IEnemyController enemyController, int nodeID)
 {
     if (nodeID == -1)
     {
         return(false);
     }
     if (enemyList.Count == 0)
     {
         return(false);
     }
     return(enemyController.GetCurrentNodeID() == nodeID);
 }
예제 #8
0
 private void OnCollisionEnter(Collision other)
 {
     if (other.collider.tag == "Moving_Platform")
     {
         print("enter platform  :)" + other.collider.name);
         this.transform.parent = other.collider.transform;
         _parentCount++;
     }
     if (other.collider.tag == "Enemy")
     {
         _enemyController = other.collider.GetComponent <IEnemyController>();
         _enemyController.Damage(this.gameObject);
     }
 }
예제 #9
0
        async private Task PerformMovement()
        {
            if (enemyList.Count == 0)
            {
                if (!playerService.PlayerDeathStatus())
                {
                    gameService.ChangeToPlayerState();
                }
                return;
            }

            List <IEnemyController> KillableEnemies = new List <IEnemyController>();
            List <Task>             taskToKill      = new List <Task>();

            Task moveTask;

            for (int i = 0; i < enemyList.Count; i++)
            {
                IEnemyController controller = enemyList[i];
                if (!playerService.PlayerDeathStatus())
                {
                    if (CheckForEnemyPresence(controller, playerService.GetPlayerNodeID()) && CheckForKillablePlayer(controller.GetEnemyType()))
                    {
                        KillableEnemies.Add(controller);
                        continue;
                    }
                    else
                    {
                        moveTask = controller.Move();
                        moveTaskList.Add(moveTask);
                    }
                }
            }
            await Task.WhenAll(moveTaskList.ToArray());

            moveTaskList.Clear();

            IEnemyController controllerToKill;

            for (int i = 0; i < KillableEnemies.Count; i++)
            {
                controllerToKill = KillableEnemies[i];
                KillEnemy(controllerToKill);
            }

            if (!playerService.PlayerDeathStatus())
            {
                gameService.ChangeToPlayerState();
            }
        }
예제 #10
0
    /// <summary>
    /// Spawns the team AI entities from the spawn managers.
    /// </summary>
    private void SpawnEnemyEntities()
    {
        // Test spawn
        GameObject spawnedDroid = Instantiate(gameManager.enemySettings.droidSentryPrefab, transform.position, Quaternion.identity);

        IAssignSceneActorTracker assignTracker = spawnedDroid.GetComponent <IAssignSceneActorTracker>();

        assignTracker.SetSceneActorTracker(actorTracker);
        actorTracker.RegisterEnemyEntity(spawnedDroid);

        IEnemyController enemyController = spawnedDroid.GetComponent <IEnemyController>();

        enemyController.InitialiseController();
    }
예제 #11
0
    private void OnParticleCollision(GameObject other)
    {
        if (other.tag == "Enemy")
        {
            _enemyController = other.GetComponent <IEnemyController>();
            _enemyController.EnemyHealth();
            gameObject.SetActive(false);
        }

        if (other.tag == "Stick")
        {
            _stickController = other.GetComponent <IStickContoller>();
            _stickController.BurnTheStick();
        }
    }
예제 #12
0
        async private void KillEnemy(IEnemyController controllerToKill)
        {
            if (controllerToKill.GetEnemyType() == EnemyType.DOGS)
            {
                starService.DogsKilled();
            }

            await controllerToKill.PlayAnimation(EnemyStates.DEATH);

            enemyList.Remove(controllerToKill);
            controllerToKill.Reset();
            signalBus.TryFire(new EnemyDeathSignal()
            {
                nodeID = controllerToKill.GetCurrentNodeID()
            });
        }
예제 #13
0
        async public void EnemyDead(EnemyKillSignal _killSignal)
        {
            var tempList = enemyList;

            for (int i = 0; i < tempList.Count; i++)
            {
                IEnemyController enemyController = tempList[i];
                if (enemyController.GetCurrentNodeID() == _killSignal.nodeID)
                {
                    if (CheckForKillableEnemy(enemyController, _killSignal.killMode))
                    {
                        enemyList.Remove(enemyController);
                        await enemyController.PlayAnimation(EnemyStates.DEATH);

                        enemyController.Reset();
                    }
                }
            }
            bool allDogsKilled = true;

            foreach (IEnemyController enemyController in enemyList)
            {
                if (enemyController.GetEnemyType() == EnemyType.DOGS)
                {
                    allDogsKilled = false;
                }
            }
            if (allDogsKilled)
            {
                starService.AllDogsKilled();
            }
            if (enemyList.Count == 0)
            {
                starService.AllDogsKilled();
                gameService.ChangeToPlayerState();
            }
            await new WaitForEndOfFrame();
        }
예제 #14
0
 private bool CheckForKillableEnemy(IEnemyController controller, KillMode killMode)
 {
     return(controller.IsKillable(killMode));
 }
예제 #15
0
 public void SetCallbacks(ILevelSetter levelSetter, IEnemyController enemyController, GameplayController gameplayController)
 {
     levelSetter.DataLoaded       += SetSpawnPosition;
     enemyController.NewWave      += SpawnWave;
     gameplayController.GameEnded += StopSpawning;
 }
예제 #16
0
		[SetUp] public void Init()
		{ 
			iEnemy = GetEnemyMock ();
			iEnemy.SetTag ().Returns ("Dead");
			eController = GetControllerMock (iEnemy);
		}
예제 #17
0
 void Awake()
 {
     seeker     = GetComponent <Seeker>();
     controller = GetComponent <IEnemyController>();
 }
예제 #18
0
 public EnemyController(IEnemyController concreteEnemyController)
 {
     enemyController = concreteEnemyController;
 }
예제 #19
0
 public void SetCurrentController(IEnemyController controller)
 {
     enemyController = controller;
 }
예제 #20
0
 public GameView(IShipController tankController, IEnemyController enemyController)
 {
     _shipController  = tankController;
     _enemyController = enemyController;
 }
예제 #21
0
 public TargetInfo(IEnemyController controller, float distance)
 {
     this.controller = controller;
     this.distance   = distance;
 }
예제 #22
0
		private EnemyCtrlController GetControllerMock(IEnemyController iEnemy) {
			var eController = Substitute.For<EnemyCtrlController> ();
			eController.SetEnemyController (iEnemy);
			return eController;
		}
		public void SetEnemyController(IEnemyController enemyController) {
			this.enemyController = enemyController;
		}