void Shooting() { Vector3 shootDir = currentTarget.transform.position - transform.position; RaycastHit hit; if (Physics.Raycast(transform.position, shootDir, out hit)) { if (hit.collider.GetComponent <SoldierStateScript>().currentSoldierState != SoldierAIState.Dead) { if (BoltisCycling == false && isReloading == false && currentAmmo >= 0) { currentAmmo--; var rbComp = hit.collider.GetComponent <Rigidbody>(); var impactForce = (currentTarget.transform.position - transform.position).normalized; if (rbComp) { rbComp.AddForceAtPosition(impactForce * 2, hit.point, ForceMode.Impulse); } currentTarget.GetComponent <SoldierStateScript>().currentSoldierState = SoldierAIState.Dead; if (currentAmmo <= 0) { currentSoldierState = SoldierAIState.Reloading; } StartCoroutine(CyclingTheBolt()); } } } }
IEnumerator CyclingTheBolt() { if (isReloading == false) { BoltisCycling = true; yield return(new WaitForSeconds(2)); BoltisCycling = false; currentSoldierState = SoldierAIState.Searching; } }
void Searching() { Collider[] hits = Physics.OverlapSphere(this.transform.position, visionRadius, ((1 << 8) | (1 << 9))); foreach (Collider hitCol in hits) { if (hitCol.gameObject.layer != this.gameObject.layer) { if (hitCol.gameObject.GetComponent <SoldierStateScript>().currentSoldierState != SoldierAIState.Dead) { currentTarget = hitCol.gameObject; } } } if (currentTarget != null) { currentSoldierState = SoldierAIState.Engaging; } }
void Aiming() { Vector3 aimDir = (currentTarget.gameObject.transform.position - transform.position).normalized; aimDir.y = 0; Quaternion rotation = Quaternion.LookRotation(aimDir); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * aimSpeed); if ((transform.rotation.eulerAngles - rotation.eulerAngles).magnitude < 0.1f) { currentSoldierState = SoldierAIState.Shooting; } if (currentTarget.GetComponent <SoldierStateScript>().currentSoldierState == SoldierAIState.Dead) { currentTarget = null; currentSoldierState = SoldierAIState.Searching; } }
void Engaging() { if (currentTarget != null) { nmagent.stoppingDistance = 40; } nmagent.SetDestination(currentTarget.transform.position); if (nmagent.velocity.magnitude == 0 && nmagent.remainingDistance < 40f && nmagent.hasPath == true) { currentSoldierState = SoldierAIState.Aiming; } Debug.Log(nmagent.remainingDistance); Debug.Log(nmagent.velocity); if (currentTarget.GetComponent <SoldierStateScript>().currentSoldierState == SoldierAIState.Dead) { currentTarget = null; currentSoldierState = SoldierAIState.Searching; } }
void Dead() { currentSoldierState = SoldierAIState.Dead; //enable ragdoll }