public bool MoveUnit(TileScript source, TileScript dest) { if(!markedTiles.Contains (dest)) return false; if(!source.unit) return false; if (source.GetUnitScript().CanMove()) { source.GetUnitScript().timesMoved++; Debug.Log("Moved " + source.GetUnitScript().timesMoved + "times."); UnitScript unitToMove = source.GetUnitScript(); //THIS WHOLE WHILE LOOP IS JUST TO FIND WHICH WAY TO GO FIRST. //FROM HERE TileScript tempSource = dest; while (tempSource != source) { if (tempSource.directionFrom == TileScript.Direction.LEFT) { tempSource = tileMap.At(tempSource.x - 1, tempSource.y); tempSource.directionToGo = TileScript.Direction.RIGHT; if (tempSource == source) { source.directionToGo = TileScript.Direction.RIGHT; break; } } else if (tempSource.directionFrom == TileScript.Direction.RIGHT) { tempSource = tileMap.At(tempSource.x + 1, tempSource.y); tempSource.directionToGo = TileScript.Direction.LEFT; if (tempSource == source) { source.directionToGo = TileScript.Direction.LEFT; break; } } else if (tempSource.directionFrom == TileScript.Direction.DOWN) { tempSource = tileMap.At(tempSource.x, tempSource.y - 1); tempSource.directionToGo = TileScript.Direction.UP; if (tempSource == source) { source.directionToGo = TileScript.Direction.UP; Debug.Log("source will go " + source.directionToGo); break; } } else if (tempSource.directionFrom == TileScript.Direction.UP) { tempSource = tileMap.At(tempSource.x, tempSource.y + 1); tempSource.directionToGo = TileScript.Direction.DOWN; if (tempSource == source) { source.directionToGo = TileScript.Direction.DOWN; break; } } } //TO HERE // This makes the animations better so the idiot unit doesn't turn left at the end of moving if (dest.directionFrom == TileScript.Direction.LEFT) dest.directionToGo = TileScript.Direction.RIGHT; else if (dest.directionFrom == TileScript.Direction.RIGHT) dest.directionToGo = TileScript.Direction.LEFT; else if (dest.directionFrom == TileScript.Direction.UP) dest.directionToGo = TileScript.Direction.DOWN; else if (dest.directionFrom == TileScript.Direction.DOWN) dest.directionToGo = TileScript.Direction.UP; //THE ACTUAL MOVEMENT. List<TileScript> tilesToMoveTo = new List<TileScript>(); while (source != dest) { Game.Team team = GetComponent<Game>().GetCurrentTeam(); team.actionPoints -= source.GetImpedence(); unitToMove.tilesMovedThisTurn += source.GetImpedence(); if (source.directionToGo == TileScript.Direction.LEFT) { if(!FoundInterruption(tilesToMoveTo, source, -1, 0)) source = tileMap.At(source.x - 1, source.y); else break; } else if (source.directionToGo == TileScript.Direction.RIGHT) { if(!FoundInterruption(tilesToMoveTo, source, 1, 0)) source = tileMap.At(source.x + 1, source.y); else break; } else if (source.directionToGo == TileScript.Direction.DOWN) { if(!FoundInterruption(tilesToMoveTo, source, 0, -1)) source = tileMap.At(source.x, source.y-1); else break; } else if (source.directionToGo == TileScript.Direction.UP) { if(!FoundInterruption(tilesToMoveTo, source, 0, 1)) source = tileMap.At(source.x, source.y + 1); else break; } } if(foundWater) { foundWater = false; if(unitToMove.tilesMovedThisTurn < unitToMove.range) { unitToMove.timesMoved--; unitToMove.tilesMovedThisTurn--; } Debug.Log ("F**K THIS CODE"); } /* foreach(TileScript tile in tilesToMoveTo) { foreach(TileScript visTile in visibleTilesFrom(tile)) { Game.getInstance().GetCurrentTeam().foundTiles.Add (visTile); } } */ // reset soruce to the original source = unitToMove.parentTile; unitToMove.gameObject.AddComponent<UnitMoveScript>().moveTo(tilesToMoveTo); // animation tilesToMoveTo[tilesToMoveTo.Count - 1].AddUnit(source.unit); // sets unit's new location source.unit = null; if(unitToMove.CanMove()) unitToMove.tilesMovedThisTurn = 0; //Game.getInstance().UnitMovedCallback(); return true; } else return false; }