public void AddDefenderToCreepTargetsList(DefenderEngagementHandler _newDefenderTarget)
 {
     if(_newDefenderTarget != null)
     {
         currentDefenderTargetsForThisCreep.Add(_newDefenderTarget); //Adds the new defender to local list
     }
 }
 public void RemoveDefenderFromList(DefenderEngagementHandler _defender) //Removes the defender from target list if it is in the target list
 {
     if(currentDefenderTargetsForThisCreep.Contains(_defender))
     {
         currentDefenderTargetsForThisCreep.Remove(_defender);
     }
 }
Exemplo n.º 3
0
 private void DefenderKilled(DefenderEngagementHandler _defender)
 {
     if (defender == _defender) //Make sure that it is THIS defender that died
     {
         //Debug.Log("I died");
         //RespawnDefender(respawnTimer);
         StartCoroutine(RespawnDefender(respawnTimer));
         //Reset the defender position.
         //Respawn after timer
     }
 }
Exemplo n.º 4
0
    void Start()
    {
        stats = GetComponent <scrCreepTypeDefiner>().CreepType; //Moved from awake to prevent conflict
        CreateHealthbar();
        CurrentHealth = stats.initialHealth;

        //This could be written better i suppose, using virtual classes or such. I might go back and make that change later, if I deem it necessary
        //or feel like I would like the practise. 4 now tho, lets focus on getting this done at my current level of understanding.
        _creep    = GetComponent <Creep>();
        _defender = GetComponent <DefenderEngagementHandler>();
    }
 private void CheckForDefenderDeath()
 {
     if(currentDefenderTargetsForThisCreep.Count <= 0)
     {
         currentDefenderTargetsForThisCreep.Clear();
         CurrentTarget = null;
         return;
     }
     if(currentDefenderTargetsForThisCreep[0].defenderIsAlive || currentDefenderTargetsForThisCreep[0] != null)
     {
         CurrentTarget = currentDefenderTargetsForThisCreep[0];
     }
     if (!CurrentTarget.defenderIsAlive) //Find new targets when current target dies
     {
         print("DefenderEngagementHandler died, removing defender");
         CurrentTarget.DefenderRemovedByCreep(CurrentTarget);
         currentDefenderTargetsForThisCreep.Remove(CurrentTarget); //Remove it from the list
         if(currentDefenderTargetsForThisCreep.Count <= 0)
         {
             print("No more defenders, returning to path.");
             CurrentTarget = null; //Set this to the next potential defender instead
             currentDefenderTargetsForThisCreep.Clear(); //Just to be sure
             ReturnToPath();
         }
         else //Get the next defender //
         {
             print("More defenders in list...");
             for(int i = 0; i < currentDefenderTargetsForThisCreep.Count; i++)
             {
                 if(currentDefenderTargetsForThisCreep[i].defenderIsAlive && !currentDefenderTargetsForThisCreep[i].thisDefenderIsEngagedAsMainTarget 
                     && !currentDefenderTargetsForThisCreep[i].defenderIsAlreadyMovingTowardsTarget)
                 {
                     print("Assigning new target");
                     if(CurrentTarget != null)
                     {
                         if(CurrentTarget.DefenderTowerTargetsReference.DefenderCreepList.Contains(thisCreep))
                         {
                             CurrentTarget = currentDefenderTargetsForThisCreep[i];
                             CurrentTarget.SetDefenderIsEngagedAsMainTargetTrue(thisCreep);
                         }
                     }
                 }
                 else if(i >= currentDefenderTargetsForThisCreep.Count)
                 {
                     print("...Actually, no more viable defenders after all");
                     currentDefenderTargetsForThisCreep.Clear();
                     CurrentTarget = null;
                 }
             }
         }
     }
 }
Exemplo n.º 6
0
 private void Awake()
 {
     defender         = GetComponent <DefenderEngagementHandler>(); //Get the instance
     defenderAnimator = GetComponent <scrDefenderAnimation>();      //Get the instance;
     DefenderIsCurrentlyMovingTowardsNewPossition = true;
     defenderHasANewPotentialTarget = false;
     t    = 0f;
     aPos = transform.position;
     randomlyGeneratedPossition = GetRandomPossition(); //Potential problem: I assume this possition is relative to the parent object. If not...
     ABPos = transform.Find("ABPos");
     BCPos = transform.Find("BCPos");
     defenderMovementSpeed = setDefenderMovementSpeed;
 }
Exemplo n.º 7
0
 public void DefenderRemovedByCreep(DefenderEngagementHandler _defender)
 {
     if (this != _defender)
     {
         return;
     }
     thisDefenderIsEngagedAsMainTarget = false;
     thisDefenderIsEngagedAsNoneTarget = false;
     CurrentCreepTarget = null;
     defenderAnimator.StopAttackAnimation();
     if (defenderIsAlive)
     {
         LookForNewTarget();
     }
 }
Exemplo n.º 8
0
 private void WhenDefenderDies(DefenderEngagementHandler _defender)
 {
     if (this == _defender)
     {
         defenderIsAlive = false;
         thisDefenderIsEngagedAsMainTarget = false; //Reset engagement on death
         thisDefenderIsEngagedAsNoneTarget = false;
         defenderAnimator.StopAttackAnimation();
         //print("I died");
     }
     else if (this != _defender && !thisDefenderIsEngagedAsMainTarget && defenderIsAlive && !defenderIsAlreadyMovingTowardsTarget)
     {
         //print("Some other defender died and I am free to help... I better help out!");
         LookForNewTarget();
     }
 }
Exemplo n.º 9
0
 public void DefenderEngageNewTargetAsMain(DefenderEngagementHandler _defender, Creep _target)
 {
     if (_defender != this || _target == null || !defenderTowerTargets.DefenderCreepList.Contains(_target))
     {
         print("Was attempting to engage target, but it dissapeared...");
         CurrentCreepTarget = null;
         LookForNewTarget();
         return;
     }
     if (CurrentCreepTarget != null)
     {
         CurrentCreepTarget.GetComponent <scrCreepEngagementHandler>().RemoveDefenderFromList(this);
     }
     thisDefenderIsEngagedAsMainTarget = true;
     thisDefenderIsEngagedAsNoneTarget = false;
     InformCreepTarget(_target);
 }
 private void CreepEngageTarget()
 {
     if (currentDefenderTargetsForThisCreep.Count <= 0) //Return if there are no current targets
     {
         ThisCreepIsEngaged = false;
         CurrentTarget = null;
         ReturnToPath();
         return;
     }
     if(currentDefenderTargetsForThisCreep.Count > 0)
     {
         thisCreep.StopMovement();
         if (CurrentTarget != null)
         {
             RotateTowardsTarget(CurrentTarget.transform.position);
         }
         CheckForDefenderDeath(); //4.Handle target death.
     }
 }
 private void DefenderRallyPointMoved(Creep _creep, List<DefenderEngagementHandler> _defenders) //Remove defenders from list
 {
     if(thisCreep == _creep) //If we are affected
     {
         //print("Rally point moved"); //works
         foreach(DefenderEngagementHandler defender in _defenders)
         {
             if(currentDefenderTargetsForThisCreep.Contains(defender))
             {
                 currentDefenderTargetsForThisCreep.Remove(defender); //This works!
             }
             if(currentDefenderTargetsForThisCreep.Count <= 0) //This is necessary
             {
                 CurrentTarget = null; //Reset the current target
                 ReturnToPath();
             }
         }            
     }
 }
Exemplo n.º 12
0
    private void spawnDefenders()
    {
        for (int i = 0; i < pooler.poolSizeCount; i++)
        {
            GameObject newInstance = pooler.GetInstanceFromPool();

            newInstance.transform.position = transform.position;                                            //Spawn the defenders at tower location

            defenders.Add(newInstance);                                                                     //Add defender to the list

            scrRallyPointPlacement defenderPossition = newInstance.GetComponent <scrRallyPointPlacement>(); //Get a reference to the instances defender stats script

            if (i != 0 && i < 4)                                                                            //Assign possitions for the newly instantiated defenders
            {
                defenderPossition.DefenderPossition = i + 1;
            }
            scrDefenderAnimation defenderAnimator = newInstance.GetComponent <scrDefenderAnimation>();
            defenderAnimator.GetDefenderRespawnPossition(defenderRespawnPos.position); //Assign the tower possition as the respawn possition for defenders
            DefenderEngagementHandler defender = newInstance.GetComponent <DefenderEngagementHandler>();
            defender.AssignDefenderTowerTargets(defenderTowerTargets);                 //Assign this script for local defenders, so they can use the list of targets
            defenderTowerTargets.InitializeLocalDefenders(defender);                   //Assign the defenders to the defenderTowerTargets, so they can be issued orders from the defenderTowerTargetets script
            newInstance.SetActive(true);                                               //Set defenders to active
        }
    }
Exemplo n.º 13
0
 private void Awake()
 {
     defenderAnimator = GetComponentInChildren <Animator>();        //Gets the reference of the animator
     defenderHealth   = GetComponent <scrUnitHealth>();             //Gets the instance
     defender         = GetComponent <DefenderEngagementHandler>(); //Gets the instance
 }
 public void InitializeLocalDefenders(DefenderEngagementHandler _defender)
 {
     Defenders.Add(_defender); //Add defenders to list
 }
 private void Start()
 {
     currentDefenderTargetsForThisCreep = new List<DefenderEngagementHandler>();
     ThisCreepIsEngaged = false;
     CurrentTarget = null; //starts with no target
 }