Esempio n. 1
0
    void Update()
    {
        UpdateNow();

        float takeRad = 10f;

        Collider2D[] soldiersToTake = Physics2D.OverlapCircleAll(transform.position, takeRad, 1 << SM.SoldierLayer);
        foreach (Collider2D sold in soldiersToTake)
        {
            Transform soldier = sold.transform;
            int       index   = freeIndex;
            if (SM.GetArmy(soldier) == army && index != -1 && SM.IsPrivate(soldier.GetComponent <Soldier>()))
            {
                Private priv = SM.AsPrivate(soldier.GetComponent <Soldier>());
                if (!priv.officer && priv.eqSet == eqSet)
                {
                    Vector3 pos = formation[index];
                    priv.deltaV = pos;
                    priv.index  = index;
                    subs[index] = priv.transform.Find("Soldier").GetComponent <Soldier>();
                    priv.SetOfficer(this);
                    soldier.GetComponent <Soldier>().moral = soldier.GetComponent <Soldier>().moral > 50f ? soldier.GetComponent <Soldier>().moral : 50f;
                    soldier.GetComponent <Soldier>().DefendNow();
                    if (CM.Contains(this.transform.Find("Soldier").GetComponent <Soldier>()))
                    {
                        soldier.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Soldier/S_Base_HL_" + army);
                    }
                    else
                    {
                        soldier.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Soldier/S_Base_" + army);
                    }
                }
            }
        }
    }
Esempio n. 2
0
    void Start()
    {
        StartNow();

        transform.name = army + "_Officer";

        subs = new Soldier[formation.Length];

        for (int i = 0; i < formation.Length; i++)
        {
            Vector3    pos  = formation[i];
            GameObject priv = (GameObject)Instantiate((GameObject)Resources.Load("Private"), transform.position + Vector3.right * pos.x + Vector3.up * pos.y, transform.rotation);
            priv.GetComponent <Private>().deltaV = pos;
            priv.GetComponent <Private>().index  = i;
            //priv.transform.parent = soldiers;
            priv.GetComponent <Private>().army  = army;
            priv.GetComponent <Private>().eqSet = eqSet;
            priv.transform.name = army + "_Private";
            subs[i]             = priv.transform.Find("Soldier").GetComponent <Soldier>();
        }

        foreach (Soldier sub in subs)
        {
            SM.AsPrivate(sub).SetOfficer(this);
        }

        foreach (AI ai in FindObjectsOfType <AI>())
        {
            if (army == ai.aiArmy)
            {
                ai.plusTarget(transform.Find("Soldier").GetComponent <Soldier>());
            }
        }
    }
Esempio n. 3
0
 private void Defend()
 {
     foreach (Soldier off in targets)
     {
         Soldier[] subs = SM.AsOfficer(off).subs;
         off.DefendNow(3f);
         foreach (Soldier sold in subs)
         {
             if (sold != null)
             {
                 sold.DefendNow(SM.AsPrivate(sold).PrivPos(), 3f);
             }
         }
     }
 }
Esempio n. 4
0
 private static void Move()
 {
     if (!keepFormation)
     {
         foreach (Soldier off in targets)
         {
             Soldier[] subs = SM.AsOfficer(off).subs;
             off.MoveNow(mousePos);
             foreach (Soldier sold in subs)
             {
                 if (sold != null)
                 {
                     sold.MoveNow(SM.AsPrivate(sold).PrivPos(mousePos));
                 }
             }
         }
     }
     else
     {
         Vector3 cent = Vector3.zero;
         foreach (Soldier off in targets)
         {
             cent += off.transform.position;
         }
         cent /= targets.Count;
         foreach (Soldier off in targets)
         {
             Vector3   coord = mousePos + off.transform.position - cent;
             Soldier[] subs  = SM.AsOfficer(off).subs;
             off.MoveNow(coord);
             foreach (Soldier sold in subs)
             {
                 if (sold != null)
                 {
                     sold.MoveNow(SM.AsPrivate(sold).PrivPos(coord));
                 }
             }
         }
     }
 }
Esempio n. 5
0
 private void CheckMoral()
 {
     if (SM.IsPrivate(this))
     {
         if (moral <= 0)
         {
             float   l    = 60f;
             Vector3 runV = -(army == "B" ? (SM.rWarlord.position - transform.position) : (SM.bWarlord.position - transform.position)).normalized * l;
             order = new OrdMove(transform.position + runV);
             if (SM.AsPrivate(this).officer != null)
             {
                 Officer off = SM.AsOfficer(SM.AsPrivate(this).officer);
                 off.subs[SM.AsPrivate(this).index]     = null;
                 GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Soldier/S_Base_" + army + "_NO");
                 Private priv = SM.AsPrivate(this);
                 priv.deltaV = Vector3.zero;
                 priv.index  = -1;
                 priv.SetOfficer(null);
             }
         }
     }
 }
Esempio n. 6
0
 private void LoseGainMoral()
 {
     if (SM.IsPrivate(this))
     {
         if (Time.time - lastLostHP < timeBeforeHPrec)
         {
             Private pr = SM.AsPrivate(this);
             float   k1 = 18f * (maxHP - health) / maxHP;
             float   k2 = pr.officer == null ? 2f : (1f / (SM.AsOfficer(pr.officer).subs.Length + 3));
             float   k3 = 20f;
             moral -= k1 * k2 * k3 * Time.deltaTime;
             if (moral < 0f)
             {
                 moral = 0f;
             }
         }
         //else
         //{
         //    float k = 5;
         //    moral += k * Time.deltaTime;
         //}
     }
 }
Esempio n. 7
0
    public void DestroyIt()
    {
        //Debug.Log("DEAD END");
        transform.Translate(new Vector3(0, 0, 0.6f));

        Transform sold = transform.Find("Soldier");

        SM.RemoveSoldier(sold);
        Soldier sol = sold.GetComponent <Soldier>();

        if (SM.IsWarlord(sol))
        {
            if (army == CM.yourArmy)
            {
                SM.OnDefeat();
            }
            else
            {
                SM.OnVictory();
            }
        }
        else if (SM.IsOfficer(sol))
        {
            foreach (Soldier s in SM.AsOfficer(sol).subs)
            {
                if (s != null)
                {
                    s.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Soldier/S_Base_" + army + "_NO");
                    Private priv = SM.AsPrivate(s);
                    priv.deltaV = Vector3.zero;
                    priv.index  = -1;
                    priv.SetOfficer(null);
                }
            }
        }
        else if (SM.IsPrivate(sol))
        {
            if (SM.AsPrivate(sol).officer != null)
            {
                Officer off = SM.AsOfficer(SM.AsPrivate(sol).officer);
                off.subs[SM.AsPrivate(sol).index] = null;
            }
        }

        sold.GetComponent <Collider2D>().enabled = false;
        //sold.GetComponent<Collider2D>().isTrigger = false;
        //transform.GetComponent<Rigidbody2D>().mass = 0.01f;
        //sold.gameObject.layer = LayerMask.NameToLayer("Default");
        sold.GetComponent <Soldier>().enabled  = false;
        sold.GetComponent <Animator>().enabled = false;
        GameObject.Destroy(sold.Find("nonTrigger").gameObject);
        GameObject.Destroy(sold.Find("Textures").gameObject);

        Transform lH = sold.Find("L_Hand");
        Transform rH = sold.Find("R_Hand");

        lH.GetComponent <SpriteRenderer>().sprite                      = Resources.Load <Sprite>("Soldier/S_Hand_G");
        lH.GetComponent <SpriteRenderer>().sortingLayerName            = "Default";
        lH.GetComponent <SpriteRenderer>().sortingOrder                = 2;
        lH.Find("Shadow").GetComponent <SpriteRenderer>().sortingOrder = 1;
        rH.GetComponent <SpriteRenderer>().sprite                      = Resources.Load <Sprite>("Soldier/S_Hand_G");
        rH.GetComponent <SpriteRenderer>().sortingLayerName            = "Default";
        rH.GetComponent <SpriteRenderer>().sortingOrder                = 2;
        rH.Find("Shadow").GetComponent <SpriteRenderer>().sortingOrder = 1;
        Transform lW = lH.childCount > 1 ? lH.GetChild(1) : null;
        Transform rW = rH.childCount > 1 ? rH.GetChild(1) : null;

        if (lW != null)
        {
            lW.GetComponent <InHand>().Drop();
        }
        if (rW != null)
        {
            rW.GetComponent <InHand>().Drop();
        }

        //GameObject.Destroy(transform.Find("Bars").GetComponent<Canvas>());
        GameObject.Destroy(transform.Find("Bars").gameObject);

        CM.minusTarget(sol);
        foreach (AI ai in FindObjectsOfType <AI>())
        {
            ai.minusTarget(sol);
        }
        sold.GetComponent <SpriteRenderer>().sprite                      = Resources.Load <Sprite>("Soldier/S_Base_G_" + army);
        sold.GetComponent <SpriteRenderer>().sortingLayerName            = "Default";
        sold.GetComponent <SpriteRenderer>().sortingOrder                = 2;
        sold.Find("Shadow").GetComponent <SpriteRenderer>().sortingOrder = 1;

        transform.SetParent(SM.trash.transform);

        transform.GetComponent <Soldier_Upper>().enabled = false;
    }
Esempio n. 8
0
    private void Defend(float x, float y, float rad)
    {
        Vector3 center          = new Vector3(x, y, 0);
        float   closestToCenter = float.MaxValue;
        //Vector3 center = transform.position;
        float     defR           = (rad + mRange) > seeRadius ? seeRadius : (rad + mRange);
        Transform remEnemy       = null;
        bool      lookForWarlord = weapon.GetComponent <LongRanged_Weapon>() == null;

        foreach (Transform soldier in SM.solds)
        {
            if ((soldier.position - center).magnitude <= defR)
            {
                if (SM.GetArmy(soldier) != army)
                {
                    float r = (soldier.position - center).magnitude;

                    if (SM.IsWarlord(soldier.GetComponent <Soldier>()) && lookForWarlord)
                    {
                        fixedRad   = r;
                        fixedEnemy = soldier;
                    }

                    if (r < closestToCenter)
                    {
                        remEnemy        = soldier;
                        closestToCenter = r;
                    }
                }
            }
        }
        if (remEnemy == null)
        {
            if (!IsNearDestination(new Vector3(center.x, center.y)))
            {
                Attack(center.x, center.y);
            }
            else
            {
                StopMoving();
                if (speed == 0f)
                {
                    Transform off   = (SM.IsWarlord(this) || SM.IsOfficer(this) || SM.AsPrivate(this).officer == null) ? transform : SM.AsPrivate(this).officer.transform;
                    Vector3   toTar = army == "B" ? (SM.rWarlord.position - off.position) : (SM.bWarlord.position - off.position);
                    Vector3   v     = Math.Abs(toTar.x) >= Math.Abs(toTar.y) ? (toTar.x >= 0 ? Vector3.right : -Vector3.right) : (toTar.y >= 0 ? Vector3.up : -Vector3.up);
                    TurnTo(v);
                }
            }
        }
        else
        {
            if (fixedEnemy != null)
            {
                Attack(fixedEnemy.position.x, fixedEnemy.position.y);
            }
            else
            {
                Attack(remEnemy.position.x, remEnemy.position.y);
            }
        }
    }