private void MakePlacesOnWayTo(PathNode node) { Vector2 p1 = XZ; Vector2 p2 = node.XZ; GeometryUtil.LineOptions line = new GeometryUtil.LineOptions(p1, p2); line.CalcDirScale(1); line.CalcNormScale(ParkingPlace.NormSize / 2); Vector2 normal = new Vector2(line.D_NormX, line.D_NormY); float dist = Vector2.Distance(p1, p2); int count = Mathf.FloorToInt(dist / (ParkingPlace.DirSize + ParkingPlace.SplitDist)); for (int i = 0; i < count; i++) { float dirOffset = i * (ParkingPlace.DirSize + ParkingPlace.SplitDist) + ParkingPlace.DirSize / 2; Vector2 np = line.GetDirOffset(p1, dirOffset, 1); Vector2 q1 = line.MakeNormalOffset(np, -1); Vector2 q2 = line.MakeNormalOffset(np, +1); MakePlaceAt(q1, -normal); MakePlaceAt(q2, normal); } }
public static List <Vector2> GetVertices(Vector2 origin, Vector2 direction) { Vector2 dirOrigin = new Vector2(origin.x + direction.x * NormSize / 2, origin.y + direction.y * NormSize / 2); GeometryUtil.LineOptions lineOpt = new GeometryUtil.LineOptions(origin, dirOrigin); lineOpt.CalcNormScale(DirSize / 2); Vector2 q1 = lineOpt.MakeNormalOffset(origin, -1); Vector2 q2 = lineOpt.MakeNormalOffset(origin, +1); Vector2 q3 = lineOpt.MakeNormalOffset(dirOrigin, +1); Vector2 q4 = lineOpt.MakeNormalOffset(dirOrigin, -1); List <Vector2> v = new List <Vector2>(); v.Add(q1); v.Add(q2); v.Add(q3); v.Add(q4); return(v); }
private void ReDraw() { CleanObjects(); foreach (var i in OutNodes) { Vector2 p1 = XZ; Vector2 p2 = i.XZ; GeometryUtil.LineOptions lineOpt = new GeometryUtil.LineOptions(p1, p2); lineOpt.CalcNormScale(NormScale); Vector2 q1 = lineOpt.MakeNormalOffset(p1, -1); Vector2 q2 = lineOpt.MakeNormalOffset(p1, +1); Vector2 q4 = lineOpt.MakeNormalOffset(p2, -1); Vector2 q3 = lineOpt.MakeNormalOffset(p2, +1); CorrectWithMagnetPoints(ref q1, ref q2); i.CorrectWithMagnetPoints(ref q3, ref q4); var quad = Instantiate(quadZonePrefab); MapCreatorLoader.Instance.Attach(quad.gameObject); quad.Color = Colors.RoadColor; quad.Init(q1, q2, q4, q3); var quadRender = quad.gameObject.GetComponent <MeshRenderer>(); quadRender.sortingOrder = SortingOrder.Is(Layer.Road); Objects.Add(quad.gameObject); List <Vector2> quadV = new List <Vector2>(); quadV.Add(q1); quadV.Add(q2); quadV.Add(q3); quadV.Add(q4); ObjectShapes.Add(MapCreatorLoader.Instance.ParkingZone.AddShape(quadV, false)); MakeLine(p1, p2, Colors.NodeLineColor); } }