/// <summary> /// generates rivers starting from given river's starting and ending point /// operation is processed only if points are in visible terrain and not on border /// => meaning that terrain has been moved and river isn't complete /// </summary> public void GenerateConnectingRiver(RiverInfo river) { Vertex startPoint = river.riverPath[0]; if (ftm.IsInDefinedTerrain(startPoint) && !ftm.IsOnBorder(startPoint)) { Area restrictArea = fmc.CalculateRestrictedArea(startPoint); List<Direction> reachedSides = new List<Direction>(); reachedSides.Add(fmc.GetOppositeDirection(startPoint.side)); RiverInfo startRiver = frp.GetRiverFrom(startPoint, reachedSides, restrictArea, river, river.gridStep, true); if(startRiver.riverPath.Count == 0) { ShowErrorMessage("connecting river failed \n" + startRiver.errorMessage); } frd.DistortPath(startRiver.riverPath, startRiver.gridStep/3, startRiver.gridStep); river.ConnectWith(startRiver); startPoint.side = Direction.none; } Vertex endPoint = river.GetLastVertex(); if (ftm.IsInDefinedTerrain(endPoint) && !ftm.IsOnBorder(endPoint)) { Area restrictArea = fmc.CalculateRestrictedArea(endPoint); List<Direction> reachedSides = new List<Direction>(); reachedSides.Add(fmc.GetOppositeDirection(endPoint.side)); RiverInfo endRiver = frp.GetRiverFrom(endPoint, reachedSides, restrictArea, river, river.gridStep, true); if (endRiver.riverPath.Count == 0) { ShowErrorMessage("connecting river failed \n" + endRiver.errorMessage); } frd.DistortPath(endRiver.riverPath, endRiver.gridStep / 3, endRiver.gridStep); river.ConnectWith(endRiver); endPoint.side = Direction.none; } frd.DigRiver(river); }