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); } } } } }
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>()); } } }
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); } } } }
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)); } } } } }
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); } } } }
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; //} } }
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; }
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); } } }