public void Attack() { Debug.Log(leader.name + " giving attack command to grunts!"); leader.grunts = leader.gruntSlotList.GetComponent <GruntSlotList>().GetGrunts(); if (leader.grunts != null) { foreach (GameObject grunt in leader.grunts) { grunt.GetComponent <GruntController>().Attack(leader.enemies); } } leader.AnimTimer(1, "AttackAnim"); }
void Shoot(GameObject target) { if (target != null) { //Accuracy calculations Vector3 deviation3D = Random.insideUnitCircle * leader.accuracy; Quaternion rot = Quaternion.LookRotation(Vector3.forward + deviation3D); Vector3 fwd = leader.transform.rotation * rot * Vector3.forward; //Shooting ray RaycastHit hit; Debug.DrawRay(leader.transform.position, fwd * 100, Color.red, 0.5f); if (Physics.Raycast(leader.transform.position, fwd, out hit, 100)) { if (hit.transform.tag == leader.enemyTag) { if (hit.transform.GetComponent <StatePatternLeader>()) //if target is a leader { StatePatternLeader enemyLeader = hit.transform.GetComponent <StatePatternLeader>(); enemyLeader.health -= 25; if (enemyLeader.health < 1) { leader.RemoveEnemyLeader(enemyLeader); } } else if (hit.transform.GetComponent <GruntController>()) //if target is a grunt { GruntController enemyGrunt = hit.transform.GetComponent <GruntController>(); enemyGrunt.health -= 25; if (enemyGrunt.health < 1) { leader.RemoveEnemyGrunt(enemyGrunt); } } } } } leader.AnimTimer(1, "ShootAnim"); }