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
    private void Start()
    {
        TurnUp();
        Color color = SM.GetArmy(transform) == CM.yourArmy ? new Color32(87, 193, 0, 255) : new Color32(193, 0, 0, 255);

        transform.Find("Health").Find("Filler").GetComponent <UnityEngine.UI.Image>().color = color;
    }
Esempio n. 3
0
    private void Start()
    {
        army = SM.GetArmy(transform.parent.parent);

        allPossibleAttacks = new Attack[] { new Attack_Shoot() };
        projectiles        = new string[] { "Arrow" };

        deltaTar = 0.08f; // per 1
        minRange = 5f;
        maxRange = 30f;
        weight   = 1f;
    }
Esempio n. 4
0
    private void Start()
    {
        army = SM.GetArmy(transform.parent.parent);

        allPossibleAttacks = new Attack[] { new Attack_Swing(), new Attack_FastPierce() };
        effects            = new WEffect[] { SM.MakeBleed };

        minRange    = 0f;
        maxRange    = 2.6f;
        weight      = 1.5f;
        minBasicDmg = 30f;
        maxBasicDmg = 40f;
        critPoss    = 0.1f;
        critMult    = 4f;
    }
Esempio n. 5
0
    private void Start()
    {
        army = SM.GetArmy(transform.parent.parent);

        allPossibleAttacks = new Attack[] { new Attack_Swing() };
        effects            = new WEffect[] { SM.Push };

        minRange    = 1.2f;
        maxRange    = 4f;
        weight      = 5f;
        minBasicDmg = 50f;
        maxBasicDmg = 80f;
        critPoss    = 0.04f;
        critMult    = 4f;
    }
Esempio n. 6
0
    private void Start()
    {
        army = SM.GetArmy(transform.parent.parent);

        allPossibleAttacks = new Attack[] { new Attack_FastPierce() };
        effects            = new WEffect[] { SM.Push };

        minRange    = 2.6f;
        maxRange    = 3.6f;
        weight      = 2f;
        minBasicDmg = 50f;
        maxBasicDmg = 70f;
        critPoss    = 0.3f;
        critMult    = 3f;
    }
Esempio n. 7
0
    private void OnTriggerStay2D(Collider2D col)
    {
        zEnd = -(transform.position.z + transform.GetComponent <Collider2D>().offset.y *(float)System.Math.Cos(Vector3.Angle(transform.up, Vector3.forward) * System.Math.PI / 180f));
        if (zEnd <= minHeight && col.gameObject.layer == SM.SoldierLayer && SM.GetArmy(col.transform) != army && dmgK > 0f)
        {
            float basicDmg   = (float)(SM._rnd.NextDouble()) * (maxBasicDmg - minBasicDmg) + minBasicDmg;
            bool  isCritical = SM._rnd.NextDouble() <= critPoss;
            basicDmg = isCritical ? basicDmg * critMult : basicDmg;
            float dmg = basicDmg * dmgDecK * dmgK * dKbyClass;
            if (SM.IsWarlord(col.transform.GetComponent <Soldier>()))
            {
                dmg = 9f;
            }

            foreach (WEffect eff in effects)
            {
                eff(col.transform, (col.transform.position - transform.position).normalized, dmg);
            }

            col.transform.GetComponent <Soldier>().TakeDamage(dmg);
            //Debug.Log(army + ": " + dmg + ((isCritical || dmgDecK < 1f) ? " (" : "") + (isCritical ? "  critical: x" + critMult : "") + (dmgDecK < 1f ? "  blocked: x" + dmgDecK : "") + ((isCritical || dmgDecK < 1f) ? "  )" : "") + ".");

            speed = Vector3.zero;
            //if(zEnd>=minHeight)
            //    transform.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("Soldier/" + transform.GetComponent<SpriteRenderer>().sprite.name + "_In");
            transform.parent   = col.transform;
            transform.position = transform.position + Vector3.forward * (col.transform.position.z + zEnd);
            transform.GetComponent <SpriteRenderer>().sortingLayerName            = "Default";
            transform.GetComponent <SpriteRenderer>().sortingOrder                = 1;
            transform.Find("Shadow").GetComponent <SpriteRenderer>().sortingOrder = 0;
            transform.GetComponent <Collider2D>().enabled        = false;
            transform.GetComponent <Projectile_Weapon>().enabled = false;
        }
        else if (col.gameObject.layer == SM.ProtectionLayer && SM.GetArmy(col.transform) != army && zEnd <= col.transform.GetComponent <Defence>().height)
        {
            dmgDecK            = col.transform.GetComponent <Defence>().dmgDecK;
            speed              = Vector3.zero;
            transform.parent   = col.transform;
            transform.position = transform.position + Vector3.forward * (col.transform.position.z + zEnd);
            transform.GetComponent <SpriteRenderer>().sortingLayerName            = "Default";
            transform.GetComponent <SpriteRenderer>().sortingOrder                = 1;
            transform.Find("Shadow").GetComponent <SpriteRenderer>().sortingOrder = 0;
            transform.GetComponent <Collider2D>().enabled        = false;
            transform.GetComponent <Projectile_Weapon>().enabled = false;
        }
    }
Esempio n. 8
0
    private void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.layer == SM.SoldierLayer && SM.GetArmy(col.transform) != army && dmgK > 0f)
        {
            float basicDmg   = (float)(SM._rnd.NextDouble()) * (maxBasicDmg - minBasicDmg) + minBasicDmg;
            bool  isCritical = SM._rnd.NextDouble() <= critPoss;
            basicDmg = isCritical ? basicDmg * critMult : basicDmg;
            float dmg = basicDmg * dmgDecK * dmgK * dKbyClass;

            foreach (WEffect eff in effects)
            {
                eff(col.transform, (col.transform.position - transform.parent.parent.position).normalized, dmg);
            }

            col.transform.GetComponent <Soldier>().TakeDamage(dmg);
            //Debug.Log(army + ": " + dmg + ((isCritical || dmgDecK < 1f) ? " (" : "") + (isCritical ? "  critical: x" + critMult : "") + (dmgDecK < 1f ? "  blocked: x" + dmgDecK : "") + ((isCritical || dmgDecK < 1f) ? "  )" : "") + ".");
        }
    }
Esempio n. 9
0
    private void GetEnemiesAround()
    {
        enemies.Clear();
        closestEnemy = null;
        closestRad   = float.MaxValue;
        fixedEnemy   = null;
        fixedRad     = float.MaxValue;
        //bool foundFixed = false;
        bool lookForWarlord = weapon.GetComponent <LongRanged_Weapon>() == null;

        //bool lookForWarlord = true;
        foreach (Transform soldier in SM.solds)
        {
            if ((soldier.position - transform.position).magnitude <= seeRadius)
            {
                if (SM.GetArmy(soldier) != army)
                {
                    //if (fixedEnemy == soldier)
                    //{
                    //    foundFixed = true;
                    //}
                    float newRad = Vector3.Magnitude(soldier.position - transform.position);
                    enemies.Add(soldier);

                    if (SM.IsWarlord(soldier.GetComponent <Soldier>()) && lookForWarlord)
                    {
                        fixedRad   = newRad;
                        fixedEnemy = soldier;
                    }
                    if (newRad < closestRad)
                    {
                        closestRad   = newRad;
                        closestEnemy = soldier;
                    }
                }
            }
        }
        //if (enemies.Count == 0)
        //    fixedEnemy = null;
        //else if (!foundFixed)
        //    fixedEnemy = closestEnemy;
    }
Esempio n. 10
0
    void Start()
    {
        Soldier s = transform.parent.GetComponent <Soldier>();

        if (!SM.IsWarlord(s))
        {
            _army = SM.GetArmy(transform.parent);

            int _LtexNum = Resources.LoadAll <Sprite>("S_Patterns/" + _army + "/L/").Length;
            int _RtexNum = Resources.LoadAll <Sprite>("S_Patterns/" + _army + "/R/").Length;

            transform.Find("Ltex").GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("S_Patterns/" + _army + "/L/S_Pattern_L_" + SM._rnd.Next(_LtexNum) + "_" + _army);
            transform.Find("Rtex").GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("S_Patterns/" + _army + "/R/S_Pattern_R_" + SM._rnd.Next(_RtexNum) + "_" + _army);

            if (!SM.IsOfficer(s))
            {
                int _MtexNum = Resources.LoadAll <Sprite>("S_Patterns/" + _army + "/M/").Length;
                transform.Find("Mtex").GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("S_Patterns/" + _army + "/M/S_Pattern_M_" + SM._rnd.Next(_MtexNum) + "_" + _army);
            }
        }
    }
Esempio n. 11
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);
            }
        }
    }