Exemplo n.º 1
0
        public override void OnCleanup()
        {
            OnCleanupBase();

            FlagsDrawing = 0;

            firstHit       = null;
            originalPoints = new Vector3[0];
        }
Exemplo n.º 2
0
        void OnCleanupBase()
        {
            if (CourseBase.Terrain)
            {
                CourseBase.ActiveSpline = null;
            }

            drawing = false;
            points  = new Vector3[0];
            boxes   = new Vector3[0];

            SplineDrawing = false;
            HazardDrawing = false;
            PointByPoint  = false;
            FlagsDrawing  = 0;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Creates spline
        /// </summary>
        /// <param name="points"></param>
        /// <param name="layer"></param>
        /// <param name="flags"></param>
        /// <param name="rearrange"></param>
        /// <returns></returns>
        public static SplineBase CreateSpline(Vector3[] points, Layer layer, SplineBase.SplineInfo.Flags flags, bool rearrange = false)
        {
            if ((flags & SplineBase.SplineInfo.Flags.Square) == 0 || rearrange)
            {
                points = points.ToList().RearrangePoints(layer.metersPerOnePoint).ToArray();
            }
            if (points.Length < 3)
            {
                return(null);
            }

            SplineBase spline = CreateSpline(points, layer, flags, FreeSplineInstanceID());

            spline.UpdateLine();
            splines.Add(spline);
            spline.LineChanged();

            return(spline);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Creates hazard
        /// </summary>
        /// <param name="points"></param>
        /// <param name="layer"></param>
        /// <param name="flags"></param>
        /// <param name="rearrange"></param>
        /// <returns></returns>
        public static HazardBase CreateHazard(Vector3[] points, Layer layer, SplineBase.SplineInfo.Flags flags, bool rearrange = false)
        {
            if ((flags & SplineBase.SplineInfo.Flags.Square) == 0 || rearrange)
            {
                points = points.ToList().RearrangePoints(layer.metersPerOnePoint).ToArray();
            }
            if (points.Length < 3)
            {
                return(null);
            }

            int instanceID = FreeSplineInstanceID();

            GameObject gameObject = new GameObject("Hazard " + instanceID.ToString());

            if (PlatformBase.IO.IsEditor)
            {
                PlatformBase.Editor.RegisterCreatedObjectUndo(gameObject, "Spline tool Creation");
                PlatformBase.Editor.SetStaticFlags(gameObject);
                gameObject.hideFlags = HideFlags.HideInHierarchy;
            }

            HazardBase hazard = (HazardBase)gameObject.AddComponent(Types.GetType("PerfectParallel.CourseForge.Hazard", "Assembly-CSharp"));

            hazard.Info.layerName = layer.name;
            hazard.Points         = (Vector3[])points.Clone();

            hazard.Info.colorNames = new string[points.Length];
            for (int i = 0; i < hazard.Info.colorNames.Length; ++i)
            {
                hazard.Info.colorNames[i] = layer.name;
            }

            hazard.Info.flags      = (int)flags;
            hazard.Info.InstanceID = instanceID;

            hazard.UpdateLine();
            splines.Add(hazard);
            hazard.LineChanged();

            return(hazard);
        }
Exemplo n.º 5
0
        SplineBase.SplineInfo.Flags SquareField(SplineBase.SplineInfo.Flags flags)
        {
            Background();

            SetColor();
            if (flags.AND(SplineBase.SplineInfo.Flags.Square))
            {
                SetColor(Green);
            }
            if (Button(rectangleTexture) && !drawing)
            {
                if (flags.AND(SplineBase.SplineInfo.Flags.Square))
                {
                    flags -= SplineBase.SplineInfo.Flags.Square;
                }
                else
                {
                    flags |= SplineBase.SplineInfo.Flags.Square;
                }
            }
            SetColor();

            return(flags);
        }
Exemplo n.º 6
0
        SplineBase.SplineInfo.Flags HoleFlagsField(SplineBase.SplineInfo.Flags flags)
        {
            Background();

            SetColor();
            if (flags.AND(SplineBase.SplineInfo.Flags.Hole))
            {
                SetColor(Green);
            }
            if (Button(holeTexture) && !drawing)
            {
                if (flags.AND(SplineBase.SplineInfo.Flags.Hole))
                {
                    flags -= SplineBase.SplineInfo.Flags.Hole;
                }
                else
                {
                    flags |= SplineBase.SplineInfo.Flags.Hole;
                }
            }
            SetColor();

            return(flags);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Creates spline
        /// </summary>
        /// <param name="points"></param>
        /// <param name="layer"></param>
        /// <param name="flags"></param>
        /// <param name="instanceID"></param>
        /// <returns></returns>
        public static SplineBase CreateSpline(Vector3[] points, Layer layer, SplineBase.SplineInfo.Flags flags, int instanceID)
        {
            GameObject gameObject = new GameObject("Spline " + instanceID.ToString());

            if (PlatformBase.IO.IsEditor)
            {
                PlatformBase.Editor.RegisterCreatedObjectUndo(gameObject, "Spline tool Creation");
                PlatformBase.Editor.SetStaticFlags(gameObject);
                gameObject.hideFlags = HideFlags.HideInHierarchy;
            }

            SplineBase spline = (SplineBase)gameObject.AddComponent(Types.GetType("PerfectParallel.CourseForge.Spline", "Assembly-CSharp"));

            spline.Info.layerName  = layer.name;
            spline.Points          = (Vector3[])points.Clone();
            spline.Info.flags      = (int)flags;
            spline.Info.InstanceID = instanceID;

            spline.UpdateLine();
            splines.Add(spline);
            spline.LineChanged();

            return(spline);
        }
Exemplo n.º 8
0
        public override void OnUI(bool selected)
        {
            if (selected)
            {
                #region Delete
                if (CourseBase.ActiveSpline && Event.current.keyCode == KeyCode.Delete && Event.current.type == EventType.KeyDown)
                {
                    CourseBase.ActiveSpline.LineChanged();
                    CourseBase.ActiveSpline.Transform.parent = null;
                    if (!CourseBase.ActiveSpline.IsHazard)
                    {
                        CourseBase.ActiveSpline.Transform.DetachChildren();
                    }

                    MonoBehaviour.DestroyImmediate(CourseBase.ActiveSpline.Transform.gameObject);

                    if (CourseBase.ActiveSpline.IsHazard)
                    {
                        CourseBase.Hazards.Remove(CourseBase.ActiveSpline as HazardBase);
                    }
                    else
                    {
                        CourseBase.Splines.Remove(CourseBase.ActiveSpline);
                    }
                    CourseBase.Curves.Remove(CourseBase.ActiveSpline);

                    CourseBase.ActiveSpline = null;

                    Event.current.Use();
                    return;
                }
                #endregion

                BeginUI();
                Move(3, 0);

                if (CourseBase.ActiveSpline != null)
                {
                    SetColor(Green);
                    Move(3, 0);

                    if (!(CourseBase.ActiveSpline is HazardBase))
                    {
                        CourseBase.ActiveSpline.Info.flags = (int)HoleFlagsField((SplineBase.SplineInfo.Flags)CourseBase.ActiveSpline.Info.flags);
                        SetColor(Green);
                    }
                    Move(1, 0);

                    CourseBase.ActiveSpline.Info.flags = (int)SquareField((SplineBase.SplineInfo.Flags)CourseBase.ActiveSpline.Info.flags);
                    Move(1, 0);
                    SetColor(Green);

                    if (CourseBase.ActiveSpline is HazardBase)
                    {
                        Layer layer = CourseBase.ActiveSpline.Layer;

                        CourseBase.ActiveSpline.Layer = LayerPopup("Layer", CourseBase.ActiveSpline.Layer, CourseBase.HazardLayers, 3);
                        Move(3, 0);

                        if (layer != CourseBase.ActiveSpline.Layer)
                        {
                            for (int i = 0; i < CourseBase.ActiveSpline.Info.colorNames.Length; ++i)
                            {
                                CourseBase.ActiveSpline.Info.colorNames[i] = CourseBase.ActiveSpline.Layer.name;
                            }
                        }
                    }
                    else
                    {
                        CourseBase.ActiveSpline.Layer = LayerPopup("Layer", CourseBase.ActiveSpline.Layer, CourseBase.SplineLayers, 3);
                        SetColor();
                        Move(3, 0);

                        CourseBase.ActiveSpline.Info.locked = LockedField(CourseBase.ActiveSpline.Info.locked);
                    }
                    Move(1, 0);
                    SetColor();
                }
                else
                {
                    SplineField();
                    Move(1, 0);

                    HazardField();
                    Move(1, 0);

                    if (SplineDrawing)
                    {
                        PointByPointField();
                        Move(1, 0);

                        FlagsDrawing = HoleFlagsField(FlagsDrawing);
                        Move(1, 0);

                        FlagsDrawing = SquareField(FlagsDrawing);
                        Move(1, 0);

                        LayerName = LayerPopup("Layer", CourseBase.GetLayer(LayerName, CourseBase.SplineLayers), CourseBase.SplineLayers, 3).name;
                        Move(3, 0);
                    }

                    if (HazardDrawing)
                    {
                        PointByPointField();
                        Move(1, 0);

                        FlagsDrawing = HoleFlagsField(FlagsDrawing);
                        Move(1, 0);

                        FlagsDrawing = SquareField(FlagsDrawing);
                        Move(1, 0);

                        LayerName = LayerPopup("Layer", CourseBase.GetLayer(LayerName, CourseBase.HazardLayers), CourseBase.HazardLayers, 3).name;
                        Move(3, 0);
                    }
                }

                EndUI();

                List <SplineBase> splines = CourseBase.Curves;
                for (int i = 0; i < splines.Count; ++i)
                {
                    OnSplineGUI(splines[i], selected);
                }
            }

            if (LeftMouseDown)
            {
                CourseBase.ActiveSpline = null;
            }
            if (selected)
            {
                if (CourseBase.ActiveSpline == null && (SplineDrawing || HazardDrawing))
                {
                    OnMouse();
                }
                if (Event.current.type == EventType.Repaint)
                {
                    EditorGUIUtility.AddCursorRect(new Rect(0, 0, Screen.width, Screen.height), MouseCursor.Arrow);
                }
            }
        }