/* Build a single road segment. Return -1 on fail, 0 on successful * construction, and 1 if this segment completed the path. */ public int BuildRoadSegment(Direction direction, bool roadEndsThere) { if (!buildingRoad.Extendable) { // Max length reached return(-1); } buildingRoad.Cost += Pathfinder.ActualCost(Game.Map, buildingRoad.EndPosition, direction); AddBuildingRoadSegment(buildingRoad.EndPosition, direction); buildingRoad.Extend(Game.Map, direction); MapPos destination = 0; bool water = false; int result = Game.CanBuildRoad(buildingRoad, player, ref destination, ref water, roadEndsThere); if (result <= 0) { // Invalid construction, undo. return(RemoveRoadSegment()); } if (Game.Map.GetObject(destination) == Map.Object.Flag) { // Existing flag at destination, try to connect. if (!Game.BuildRoad(buildingRoad.Copy(), player, true)) { BuildRoadEnd(); return(-1); } else { BuildRoadEnd(); UpdateMapCursorPosition(destination); return(1); } } else if (Game.Map.Paths(destination) == 0) { // No existing paths at destination, build segment. UpdateMapCursorPosition(destination); if (GetConfig(6)) // pathway scrolling { Viewport.MoveToMapPosition(destination, true); } } else { // TODO fast split path and connect on double click return(-1); } return(0); }