예제 #1
0
    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);
        }
    }
예제 #2
0
    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);
    }
예제 #3
0
    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);
        }
    }