public static bool AttackToIndex(GameUnit unit, Vector3Int posTarget) { var goodNeighbour = AI_Calculation.GetNearestNeighbour(unit.ChunkNumber, unit.CurrentPos, posTarget); if (goodNeighbour == Vector3Int.zero || !PathCalcManager.IsReaching(ChunkUtil.GetDovvner(unit.CurrentPos), goodNeighbour)) { return(false); } var path = PresetPath(unit, goodNeighbour); if (path == null) { return(false); } path.Add(new TilePosition( Util.Get3DPosByIndex(posTarget.x, posTarget.y, posTarget.z + 1) , posTarget)); // Debug.Log("Attack order from: " + ent); GameOrderManager.DoOrder(unit, path, OrderTypes.AttackOrder); return(true); }
public static void CastAbility(GameUnit unit, Vector3Int posTarget, Ability ability) { if (unit == null) { return; } if (posTarget == Vector3Int.zero) { return; } var goodNeighbour = AI_Calculation.FindFreePosNearPos(unit.ChunkNumber, ChunkUtil.GetUpper(posTarget), false); if (goodNeighbour == Vector3Int.zero) { Debug.Log("Neighbour is zero"); return; } var neighDist = Util.GetDistanceFromTo(goodNeighbour, posTarget); var dist = Util.GetDistanceFromTo(unit.CurrentPos, posTarget); if (dist > 1) { if (neighDist > 1) { Debug.Log("Error. Cant reach target"); return; } MoveToIndex(unit, ChunkUtil.GetDovvner(goodNeighbour)); } GameOrderManager.AddCastAbilityOrder(unit, new TilePosition(ChunkUtil.GetUpper(posTarget)), ability); }
public static void CastNonTargetAbility(AbstractGameObject unit, Ability ability) { if (unit == null || unit.Destroyed) { return; } GameOrderManager.AddCastAbilityOrder(unit, new TilePosition(unit.CurrentPos), ability); }
public static bool CancelPathVVay(GameUnit unit) { if (unit == null) { return(false); } CancelOrders(unit); //if (ClickManager.IsChoosed(ent.gameObject)) GameOrderManager.RemoveMarks(unit); return(false); }
public static void MoveToIndex(GameUnit unit, Vector3Int posTarget) { if (posTarget == Vector3Int.zero) { return; } var ent = ChunkManager.CurrentChunk.GetGameObjectByIndex(posTarget); var pos = posTarget; if (ent == null || !GroupUtil.IsGround(ent.Group)) { pos = ChunkUtil.GetDovvner(pos); } var path = PresetPath(unit, pos); if (path == null) { return; } GameOrderManager.DoOrder(unit, path, OrderTypes.MoveOrder); }
public static void OnMoveUpdate(GameUnit unit) { if (PauseMenu_HTML.IsPaused) { return; } if (unit.MovingPath.Count == 0 && unit.transform.position != unit.Current3Dpos) { var dist = Util.GetDistanceFromTo(unit.transform.position, unit.Current3Dpos); if (dist > 0.5f) { var tilePos = unit.CurrentTilePosition; tilePos.Index = ChunkUtil.GetDovvner(tilePos.Index); AddOrder(unit, new List <UnitOrder> { new UnitOrder(unit, tilePos, OrderTypes.MoveOrder) }); } else { unit.IsMoving = false; } } if (unit.MovingPath.Count > 0 && !OrderList.ContainsKey(unit)) { GameOrderManager.DoOrder(unit, unit.MovingPath, OrderTypes.AttackOrder); } if (!OrderList.ContainsKey(unit)) { return; } var orders = OrderList[unit].ToArray(); if (orders.Length == 0) { return; } var order = orders[0]; var succ = CallOrderByType(order); if (succ) { var cancList = CanceledOrderList.ContainsKey(unit) ? CanceledOrderList[unit] : new List <UnitOrder>(); cancList.Add(order); CanceledOrderList[unit] = cancList; } if (CanceledOrderList.ContainsKey(unit) && OrderList[unit].Count == CanceledOrderList[unit].Count) { unit.State = EventManager.InProgressEvents.Stay; SimpleOrderManager.CancelOrders(unit); } }
public static void CancelOrders(GameUnit unit) { unit.MovingPath.RemoveAll(x => x != null); GameOrderManager.RemoveMarks(unit); GameMoveManager.CancelOrders(unit); }