void OnTriggerStay2D(Collider2D collider) { position = unit.position; UnitMB otherUnit = collider.GetComponent <UnitMB> (); float x = otherUnit.unit.position.x - position.x + UnityEngine.Random.Range(-0.00001f, 0.00001f); float y = otherUnit.unit.position.y - position.y + UnityEngine.Random.Range(-0.00001f, 0.00001f); float distance = Mathf.Sqrt(x * x + y * y); float maxDistance = size.x * 0.5f + size.x * 0.5f; if (distance <= maxDistance) { float n = distance; float m = 1; m = m > 1f ? 1f : m; float pushX = (maxDistance - distance) * (x / n) * m; float pushY = (maxDistance - distance) * (y / n) * m; tempVector = position; tempVector.x -= pushX; tempVector.y -= pushY; float hurgh = maxDistance / Vector2.Distance(position, tempVector); tempVector = Vector2.Lerp(position, tempVector, hurgh > 0.9f ? 0.9f : hurgh); tempVector = CheckPosition(tempVector - position, false) + position; body.position = tempVector + attackVector + jumpVector; unit.position = tempVector; } }
public UnitMB GetUnitBody(UnitTypes unitType, int kingdom) { int index = 0; if (availableUnitBodyIndexPool.Count == 0) { index = unitBodyPool.Count; availableUnitBodyIndexPool.Add(unitBodyPool.Count); GameObject newUnitBody = GameObject.Instantiate(unitTemplate.gameObject); UnitMB newUnitMB = newUnitBody.GetComponent <UnitMB> (); newUnitMB.index = index; unitBodyPool.Add(newUnitMB); } index = availableUnitBodyIndexPool [availableUnitBodyIndexPool.Count - 1]; availableUnitBodyIndexPool.RemoveAt(availableUnitBodyIndexPool.Count - 1); UnitMB unitBody = unitBodyPool [index]; unitBody.gameObject.SetActive(true); unitBody.spriteRenderer.sprite = unitSprites [kingdom] [(int)unitType] [Random.Range(0, unitKnowledge.unitsByType [(int)unitType].Count)]; //unitBody.spriteRenderer.sprite = unitKnowledge.unitsByType [ (int)unitType ] [ Random.Range ( 0, unitKnowledge.unitsByType [ (int)unitType ].Count ) ].sprite; //unitBody.spriteRenderer.sprite = unitKnowledge.unitTypes.Find ( m => m.type == (int)unitType ).sprite; return(unitBody); }
public void ReturnUnitBody(UnitMB unitMB) { if (!availableUnitBodyIndexPool.Contains(unitMB.index)) { availableUnitBodyIndexPool.Add(unitMB.index); if (unitMB.unit != null) { unitMB.unit.unitMB = null; } unitMB.unit = null; unitMB.gameObject.SetActive(false); unitMB.transform.position = new Vector3(0, 0, -1); } }