Esempio n. 1
0
    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
    }
Esempio n. 2
0
    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());
    }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
 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);
 }
Esempio n. 6
0
    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;
            }
        }
    }