// Use this for initialization
    protected virtual void Start()
    {
        op = FindObjectOfType <ObjectPool>();

        if (team == Team.TEAM1)
        {
            m_generals = op.team1Generals;
        }
        if (team == Team.TEAM2)
        {
            m_generals = op.team2Generals;
        }

        m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[0].transform.position, Quaternion.Euler(-90, 0, 0));
        m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [0];

        currentSelectedUnit = m_generals[index].gameObject;
        m_navigationArrowActor.moveMarkerToMyBoy();

        cameraController.MoveCameraTo(m_generals[index].transform.position);

        currentGeneral = m_generals[index];

        DisablesMoveTargets();
    }
Ejemplo n.º 2
0
 public Transform AllocateTarget(TroopActor ta)
 {
     foreach (FormationPosition fp in formationPositions)
     {
         if (fp.assignedUnit.rankState == RankState.dead)
         {
             fp.taken = false;
         }
         if (!fp.taken)
         {
             fp.assignedUnit = ta;
             fp.taken        = true;
             return(fp.fromPos);
         }
     }
     FormationPosition newFP = new FormationPosition();
     {
         GameObject newFormPos     = new GameObject("dad");
         GameObject trackedFormPos = Instantiate(moveTargetPrefab, NextFormPos() + positionOffset, transform.rotation);
         Destroy(newFormPos);
         trackedFormPos.name = "Formation Position " + formationPositions.Count + 1;
         if (!moveTarget)
         {
             CreateMoveTarget();
         }
         trackedFormPos.transform.parent = moveTarget.transform;
         newFP.fromPos      = trackedFormPos.transform;
         newFP.taken        = true;
         newFP.assignedUnit = ta;
         formationPositions.Add(newFP);
         return(newFP.fromPos);
     }
 }
Ejemplo n.º 3
0
    public void Die(TroopActor ta)
    {
        ta.onDie.Invoke();
        if (ta.rankState == RankState.IsGeneral)
        {
            if (ClosestAlly())
            {
                ta.PromoteToGeneral(ClosestAlly());
            }
            ta.rankState = RankState.dead;
            if (moveTarget)
            {
                Destroy(moveTarget.gameObject);
            }
        }
        ta.rankState = RankState.dead;

        if (ta.team == Team.TEAM1)
        {
            op.team1Generals.Remove(ta);
        }

        if (ta.team == Team.TEAM2)
        {
            op.team2Generals.Remove(ta);
        }

        gameObject.SetActive(false);
    }
Ejemplo n.º 4
0
 void AssignToGeneral(TroopActor ta)
 {
     rankState = RankState.FollowingGeneral;
     myGeneral = ta;
     if (moveTarget)
     {
         Destroy(moveTarget.gameObject);
     }
     moveTarget = ta.AllocateTarget(this);
 }
Ejemplo n.º 5
0
    private void OnTriggerEnter(Collider collision)
    {
        TroopActor ta = collision.gameObject.GetComponent <TroopActor>();

        if (ta)
        {
            lastCollided = ta;
            OnColEnter.Invoke();
        }
    }
Ejemplo n.º 6
0
 bool withinRange(GunSettings gun, TroopActor troop)
 {
     if (Vector3.Distance(troop.transform.position, transform.position) > gun.attackRangeMin && Vector3.Distance(troop.transform.position, transform.position) < gun.attackRangeMax)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 7
0
    bool IsAttackableUnit(TroopActor t)
    {
        foreach (UnitClasses unitclass in strengths)
        {
            if (t.unitClass == unitclass)
            {
                return(true);
            }
        }

        return(false);
    }
Ejemplo n.º 8
0
    void RankAction()
    {
        if (rankState == RankState.FollowingGeneral)
        {
            if (myGeneral.rankState != RankState.IsGeneral)
            {
                rankState   = RankState.LookingForGeneral;
                killMeAfter = 0.5f;
            }
        }
        if (rankState == RankState.LookingForGeneral)
        {
            SetAttackType(AttackType.AUTO);

            TroopActor AssignToMe = RandomGeneral();
            if (AssignToMe)
            {
                AssignToGeneral(AssignToMe);
            }
            else
            {
                PromoteToGeneral(this);
            }
            if (killMeAfter <= 0)
            {
                Die(this);
            }
            else
            {
                killMeAfter -= Time.deltaTime;
            }
        }
        if (rankState == RankState.dead)
        {
            if (moveTarget)
            {
                moveTarget.gameObject.SetActive(false);
            }
            gameObject.SetActive(false);
        }
        else
        {
            gameObject.SetActive(true);
        }
        if (rankState == RankState.IsGeneral)
        {
            if (transform.localScale != originSize * 1.75f)
            {
                transform.localScale = originSize * 1.2f;
            }
        }
    }
Ejemplo n.º 9
0
    void SpawnObject()
    {
        TroopActor ta = ObjectToSpawnAvaliable();

        lastSpawnedObject = ta.gameObject;
        if (ta.gameObject.activeInHierarchy == false)
        {
            ta.gameObject.SetActive(true);
        }
        ta.SetHealth(ta.maxHealth);
        ta.rankState          = TroopActor.RankState.LookingForGeneral;
        ta.transform.position = spawnPoint.position;
    }
Ejemplo n.º 10
0
    bool CanHitTarget(TroopActor checkThis)
    {
        bool canHit = false;

        foreach (UnitClasses uc in strengths)
        {
            if (checkThis.unitClass == uc)
            {
                canHit = true;
            }
        }
        return(canHit);
    }
Ejemplo n.º 11
0
 void AttackTarget()
 {
     if (targetToAttack.rankState != RankState.dead)
     {
         AttackSelectedEnemy(targetToAttack);
     }
     else
     {
         attackType = AttackType.AUTO;
         Move();
         targetToAttack = null;
     }
 }
Ejemplo n.º 12
0
    public void PromoteToGeneral(TroopActor ta)
    {
        ta.OnBecomeGeneral.Invoke();
        ta.rankState  = RankState.IsGeneral;
        ta.moveTarget = null;

        if (ta.team == Team.TEAM1)
        {
            op.team1Generals.Add(ta);
        }

        if (ta.team == Team.TEAM2)
        {
            op.team2Generals.Add(ta);
        }
    }
Ejemplo n.º 13
0
    private void OnTriggerEnter(Collider other)
    {
        TroopActor currentActor = other.GetComponent <TroopActor>();

        if (currentActor)
        {
            if (other.GetComponent <TroopActor>().team == Team.TEAM1)
            {
                team1unitsInZone.Add(other.GetComponent <TroopActor>());
            }
            else if (other.GetComponent <TroopActor>().team == Team.TEAM2)
            {
                team2unitsInZone.Add(other.GetComponent <TroopActor>());
            }
        }
    }
Ejemplo n.º 14
0
    public void SetTeam(Team t)
    {
        TroopActor ta = bigBase.GetComponentInChildren <TroopActor>();

        HangerSpawner[] hangers = bigBase.GetComponentsInChildren <HangerSpawner>();
        TriggerWin      tw      = bigBase.GetComponentInChildren <TriggerWin>();
        PortraitData    pd      = bigBase.GetComponentInChildren <PortraitData>();

        if (pd)
        {
            pd.team      = t;
            pd.TeamColor = primaryColour;
        }
        else
        {
            Debug.LogWarning("Please assign a PortraitData Component to " + bigBase.name);
        }

        if (ta)
        {
            ta.team = t;
        }
        else
        {
            Debug.LogWarning("please assign a Troop Actor Component to " + bigBase.name);
        }
        if (hangers.Length > 0)
        {
            foreach (HangerSpawner hanger in hangers)
            {
                hanger.team = t;
            }
        }
        else
        {
            Debug.LogWarning("please assign at least one HangerSpawner Component to " + bigBase.name);
        }
        if (tw)
        {
            tw.team = t;
        }
        else
        {
            Debug.LogWarning("please assign a TriggerWin Component to " + bigBase.name);
        }
    }
Ejemplo n.º 15
0
    private void OnTriggerExit(Collider other)
    {
        TroopActor currentActor = other.GetComponent <TroopActor>();

        if (currentActor)
        {
            if (other.GetComponent <TroopActor>().team == Team.TEAM1)
            {
                team1unitsInZone.Remove(other.GetComponent <TroopActor>());
            }

            if (other.GetComponent <TroopActor>().team == Team.TEAM2)
            {
                team2unitsInZone.Remove(other.GetComponent <TroopActor>());
            }
        }
    }
Ejemplo n.º 16
0
    TroopActor ClosestGeneral()
    {
        float      dis         = 0f;
        TroopActor closestAlly = null;

        foreach (TroopActor ta in op.allTroopActors)
        {
            if (ta.rankState != RankState.dead)
            {
                if ((dis == 0f || Vector3.Distance(ta.transform.position, transform.position) < dis) && ta != this && ta.team == team && ta.rankState == RankState.IsGeneral)
                {
                    dis         = Vector3.Distance(ta.transform.position, transform.position);
                    closestAlly = ta;
                }
            }
        }
        return(closestAlly);
    }
Ejemplo n.º 17
0
    TroopActor ClosestEnemy(GunSettings gun)
    {
        float      dis          = 0f;
        TroopActor closestEnemy = null;

        foreach (TroopActor ta in op.allTroopActors)
        {
            if (ta.rankState != RankState.dead && IsAttackableUnit(ta))
            {
                if ((dis == 0f || Vector3.Distance(ta.transform.position, transform.position) < dis) && EnemyInRange(ta.transform, gun) && ta != this && ta.team != team)
                {
                    dis          = Vector3.Distance(ta.transform.position, transform.position);
                    closestEnemy = ta;
                }
            }
        }
        return(closestEnemy);
    }
    /*Toggle between Generals, decrement or increment the generals list, but setting true or false for the function parameters*/
    void CheckGeneralState(bool increase, bool decrease)
    {
        if (increase)
        {
            index++;

            if (index >= m_generals.Count)
            {
                index = 0;
            }


            currentGeneral = m_generals[index];

            currentSelectedUnit = m_generals[index].gameObject;
            m_navigationArrowActor.m_navMarker.transform.position = currentSelectedUnit.transform.position;

            m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[index].transform.position, Quaternion.Euler(-90, 0, 0));
            m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [index];

            EnableMoveTargetsForSelectedGeneral();
            DisablesMoveTargets();
        }
        if (decrease)
        {
            if (index <= 0)
            {
                index = m_generals.Count;
            }

            index--;

            currentSelectedUnit = m_generals[index].gameObject;

            currentGeneral = m_generals[index];

            m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[index].transform.position, Quaternion.Euler(-90, 0, 0));
            m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [index];

            EnableMoveTargetsForSelectedGeneral();
            DisablesMoveTargets();
        }
    }
    void ClosestEnemyUnit()
    {
        float dis = 0;

        foreach (TroopActor T in op.allTroopActors)
        {
            if (m_tank == null && T.team != m_team && T.rankState != RankState.dead)
            {
                if (Vector3.Distance(m_currentMarker.transform.position, T.transform.position) < 20f)
                {
                    if (dis == 0 || Vector3.Distance(m_currentMarker.transform.position, T.transform.position) < dis)
                    {
                        dis    = Vector3.Distance(m_currentMarker.transform.position, T.transform.position);
                        m_tank = T;
                    }
                }
            }
        }

        if (m_tank != null)
        {
            if (Vector3.Distance(m_currentMarker.transform.position, m_tank.transform.position) > 20f)
            {
                m_tank = null;
                SimpleAnimate sa = m_currentMarker.GetComponentInChildren <SimpleAnimate>();
                if (sa)
                {
                    sa.speedModifier = 1;
                }
            }
            else
            {
                SimpleAnimate sa = m_currentMarker.GetComponentInChildren <SimpleAnimate>();
                if (sa)
                {
                    sa.speedModifier = 5f;
                }
            }
        }
    }
Ejemplo n.º 20
0
    public void Die(TroopActor ta)
    {
        ta.onDie.Invoke();
        if (ta.rankState == RankState.IsGeneral)
        {
            ta.rankState = RankState.dead;
            if (moveTarget)
            {
                Destroy(moveTarget.gameObject);
            }
        }
        ta.rankState = RankState.dead;

        if (ta.team == Team.TEAM1)
        {
            op.team1Generals.Remove(ta);
        }

        if (ta.team == Team.TEAM2)
        {
            op.team2Generals.Remove(ta);
        }
    }
Ejemplo n.º 21
0
    void AttackSelectedEnemy(TroopActor troopToAttack)
    {
        foreach (GunSettings gun in guns)
        {
            if (troopToAttack && withinRange(gun, troopToAttack))
            {
                gun.attackTarget            = ClosestEnemy(gun);
                gun.turret.rotation         = Quaternion.Slerp(gun.turret.rotation, Quaternion.LookRotation(gun.attackTarget.transform.position - gun.turret.position), gun.turretAimSpeed * Time.deltaTime);
                gun.turret.localEulerAngles = new Vector3(0, gun.turret.localEulerAngles.y, 0);

                gun.barrel.rotation         = Quaternion.Slerp(gun.barrel.rotation, Quaternion.LookRotation(gun.attackTarget.transform.position - gun.barrel.position), gun.barrelAimSpeed * Time.deltaTime);
                gun.barrel.localEulerAngles = new Vector3(gun.barrel.localEulerAngles.x, 0, 0);
                gun.m_gunTimer -= Time.deltaTime;

                if (gun.m_gunTimer < Time.deltaTime)
                {
                    DrawLineRender(gun.turret, troopToAttack.transform);

                    ResetGunTimer(gun);
                    Fire(gun);
                }
            }
        }
    }
Ejemplo n.º 22
0
    // Update is called once per frame
    void Update()
    {
        if (pd)
        {
            if (uiStuff.portrait.sprite != pd.baseFace)
            {
                uiStuff.portrait.sprite = pd.baseFace;
            }
            if (uiStuff.imagesToColor.Length > 0)
            {
                foreach (Image panel in uiStuff.imagesToColor)
                {
                    if (panel.color.r != pd.TeamColor.r || panel.color.b != pd.TeamColor.b || panel.color.g != pd.TeamColor.g)
                    {
                        panel.color = pd.TeamColor;
                    }
                }
            }

            if (!BaseTa)
            {
                BaseTa = pd.gameObject.GetComponentInChildren <TroopActor>();
            }
        }
        else
        {
            foreach (PortraitData pdi in FindObjectsOfType <PortraitData>())
            {
                if (pdi.team == team)
                {
                    pd = pdi;
                }
            }
        }

        if (uiStuff.sldr && BaseTa)
        {
            if (uiStuff.sldr.maxValue != BaseTa.maxHealth)
            {
                uiStuff.sldr.maxValue = BaseTa.maxHealth;
            }
            uiStuff.sldr.value = BaseTa.currentHealth;
        }
        foreach (SelectionImage si in selectionImages)
        {
            if (tc.currentSelectedUnit)
            {
                if (tc.currentSelectedUnit.GetComponent <TroopActor> ().unitClass == si.unitClass)
                {
                    if (!si.selected)
                    {
                        si.selected  = true;
                        si.img.color = Color.white;
                    }
                }
                else
                {
                    if (si.selected)
                    {
                        si.selected  = false;
                        si.img.color = Color.black;
                    }
                }
            }
        }
    }
    // Update is called once per frame
    protected virtual void Update()
    {
        if (m_controller == null)
        {
            foreach (Controller c in FindObjectsOfType <Controller>())
            {
                if (team == Team.TEAM1 && c.m_playerIndex == 0)
                {
                    m_controller = c;
                }

                if (team == Team.TEAM2 && c.m_playerIndex == 1)
                {
                    m_controller = c;
                }
            }
        }

        cameraController.currentUnit = currentSelectedUnit;

        if (m_generals.Count == 0)
        {
            Destroy(m_currentSelectionCircle);
        }
        else if (!currentSelectedUnit.activeInHierarchy || currentSelectedUnit.GetComponent <TroopActor>().rankState == RankState.dead)
        {
            currentGeneral = m_generals[0];

            currentSelectedUnit = m_generals[0].gameObject;
            m_navigationArrowActor.m_navMarker.transform.position = currentSelectedUnit.transform.position;

            m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[0].transform.position, Quaternion.Euler(-90, 0, 0));

            m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [0];
            EnableMoveTargetsForSelectedGeneral();
            DisablesMoveTargets();
        }
        else
        {
            QuickSelect();

            if (m_controller.DpadLeftWasPress() && m_generals.Count > 0)
            {
                //destroy the currect circle
                if (m_currentSelectionCircle != null)
                {
                    Destroy(m_currentSelectionCircle);
                }

                CheckGeneralState(false, true);
            }

            if (m_controller.DpadRightWasPress() && m_generals.Count > 0)
            {
                //destory the currect circle
                if (m_currentSelectionCircle != null)
                {
                    Destroy(m_currentSelectionCircle);
                }

                CheckGeneralState(true, false);
            }

            if (m_navigationArrowActor.m_tank != null && m_controller.Action3WasPress() && !m_navigationArrowActor.m_airStrikeState && !m_navigationArrowActor.ChangeSate)
            {
                if (UnitToAttack != m_navigationArrowActor.m_tank)
                {
                    UnitToAttack = m_navigationArrowActor.m_tank;
                }
            }
            else if (m_controller.Action1WasPress() && !m_navigationArrowActor.m_airStrikeState)
            {
                if (UnitToAttack != null)
                {
                    UnitToAttack = null;
                }

                m_generals[index].targetToAttack = null;
                m_generals[index].SetAttackType(AttackType.AUTO);
                foreach (TroopActor T in op.allTroopActors)
                {
                    if (T.myGeneral == m_generals[index])
                    {
                        T.targetToAttack = null;
                        T.SetAttackType(AttackType.AUTO);
                    }
                }

                m_generals[index].moveTarget.transform.position = m_navigationArrowActor.m_currentMarker.transform.position;
                m_generals[index].moveTarget.transform.rotation = m_navigationArrowActor.m_currentMarker.transform.rotation;
            }

            SquadGangAttackSelectedUnit();

            if (m_currentSelectionCircle != null && index >= 0 && m_generals.Count > 0)
            {
                m_currentSelectionCircle.transform.position = m_generals[index].transform.position;
            }
        }
    }