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