diff --git a/.gitignore b/.gitignore index 4e9f7e3..29ff97f 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,4 @@ /[Aa]ssets/[Ss]treamingAssets/aa/* .vscode -Assets/Scripts/*.meta \ No newline at end of file +/Assets/Scripts/*.meta \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4e9f7e3..29ff97f 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,4 @@ /[Aa]ssets/[Ss]treamingAssets/aa/* .vscode -Assets/Scripts/*.meta \ No newline at end of file +/Assets/Scripts/*.meta \ No newline at end of file diff --git a/Assets/Scripts/Roads/Node/Node.cs b/Assets/Scripts/Roads/Node/Node.cs index dd01e5c..c3fb970 100644 --- a/Assets/Scripts/Roads/Node/Node.cs +++ b/Assets/Scripts/Roads/Node/Node.cs @@ -63,8 +63,10 @@ abstract public void pull(Vector3 position); private void updateDirection() { - Vector3 inDirection = getAverageDirection(roads.FindAll(it => it.nodes[0] == this), 0); - Vector3 outDirection = getAverageDirection(roads.FindAll(it => it.nodes[1] == this), 1); + List incomingRoads = roads.FindAll(it => it.nodes[0] == this); + List outgoingRoads = roads.FindAll(it => it.nodes[1] == this); + Vector3 inDirection = getAverageDirection(incomingRoads, 0, outgoingRoads); + Vector3 outDirection = getAverageDirection(outgoingRoads, 1, incomingRoads); direction = (inDirection - outDirection) * 0.25f; } @@ -84,13 +86,22 @@ } } - private Vector3 getAverageDirection(List roads, int index) { + private Vector3 getAverageDirection(List roads, int index, List otherRoads) { Vector3 sum = new Vector3(0f, 0f, 0f); if (roads.Count == 0) { return sum; } foreach (Road road in roads) { - sum += road.nodes[1-index].position - position; + Vector3 direction = road.nodes[1-index].position - position; + sum += direction; + direction.Normalize(); + foreach (Road otherRoad in otherRoads) { + Vector3 otherDirection = otherRoad.nodes[index].position - position; + otherDirection.Normalize(); + if ((direction + otherDirection).magnitude < 0.1f) { + return direction * (otherRoad.nodes[index].position - road.nodes[1-index].position).magnitude / 4f; + } + } } return sum / roads.Count; }