public void ActionRepairWeapon(WagonWeapon weapon) { myState = HenchmenAI.HenchmenState.RepairWeapon; targetWeapon = weapon; target = weapon.transform.position; movementVector.x = (target - transform.position).normalized.x; //Start coroutine to move to weapon then fire it StartCoroutine(RepairWeapon()); //Start coroutine to move to weapon and repair it }
public void ActionFireWeapon(WagonWeapon weapon) { myState = HenchmenAI.HenchmenState.FireWeapon; targetWeapon = weapon; target = weapon.transform.position; movementVector.x = (target - transform.position).normalized.x; targetWeapon.IsInUse = true; //Start coroutine to move to weapon then fire it StartCoroutine(FireWeapon()); }
IEnumerator FireWeapon() { while ((transform.position - target).magnitude > 19.5) { Debug.Log((transform.position - target).magnitude); yield return(null); } movementVector = Vector2.zero; //Fire weapon while (myState == HenchmenAI.HenchmenState.FireWeapon) { yield return(null); } targetWeapon.IsInUse = false; targetWeapon = null; yield return(null); }
public WagonWeapon GetClosestAvailableWeapon(Transform henchman) { float currentClosestDistance = 0.0f; WagonWeapon currentClosestHenchman = null; for (int i = 0; i < wagonWeapons.Count; i++) { if (!wagonWeapons[i].IsInUse) { var distance = Vector2.Distance(henchman.position, wagonWeapons[i].transform.position); if (currentClosestDistance < distance) { currentClosestDistance = distance; currentClosestHenchman = wagonWeapons[i]; } } } return(currentClosestHenchman); }
IEnumerator RepairWeapon() { while ((transform.position - target).magnitude > 1) { //Debug.Log((transform.position - target).magnitude); yield return(null); } //Repair weapon movementVector = Vector2.zero; while (targetWeapon.weaponHP <= 50 && myState == HenchmenAI.HenchmenState.RepairWeapon) { targetWeapon.weaponHP += Time.deltaTime * repairRate; yield return(null); } if (myState == HenchmenAI.HenchmenState.RepairWeapon) { myState = HenchmenAI.HenchmenState.Idle; } targetWeapon.IsInUse = false; targetWeapon = null; yield return(null); }
private void UpdateHenchmenActions() { currentCooldown = actionCooldown; UpdatePriorities(); int henchmanIndex = 0; assignedHenchmen.Clear(); hState.Clear(); for (int i = 0; i < henchmenList.Count; i++) { assignedHenchmen.Add(false); if (hState.Count < henchmenList.Count) { hState.Add(henchmenList[i].myState); } } //Assign tasks for (int i = 0; i < statePriorities.Length; i++) { HenchmenState task = (HenchmenState)GetHighestPriorityTask(); for (int j = 0; j < henchmenList.Count; j++) { if (assignedHenchmen[j]) { continue; } //If already at task to be assigned, skip if (hState[j] == task) { assignedHenchmen[j] = true; continue; } //assign task switch (task) { case HenchmenState.FireWeapon: WagonWeapon weapon = wagonManagerList[henchmenList[j].wagonNo].GetClosestAvailableWeapon(henchmenList[j].transform); if (weapon == null) { continue; } henchmenList[j].ActionFireWeapon(weapon); break; case HenchmenState.FireMachineGuns: if (wagonRoofList[henchmenList[j].wagonNo] != null) { continue; } henchmenList[j].ActionFireMachineGun(); break; case HenchmenState.RepairWeapon: WagonWeapon weaponToRepair = wagonManagerList[henchmenList[j].wagonNo].GetClosestAvailableWeapon(henchmenList[j].transform); if (weaponToRepair == null) { continue; } henchmenList[j].ActionRepairWeapon(weaponToRepair); break; case HenchmenState.RepairWagon: henchmenList[j].ActionRepairWagon(wagonManagerList[henchmenList[j].wagonNo]); break; } hState[j] = task; //For weapon, check if weapon is free //For repair, check if wagon health <50 //For weapon repair, check weapon health assignedHenchmen[j] = true; } } }