Example #1
0
        public void RedirectSelected(EditorSceneBase scene)
        {
            List <RenderablePathPoint> swappedPoints = new List <RenderablePathPoint>();

            var selected = GetSelectedPoints();

            foreach (var point in selected)
            {
                foreach (var child in point.Children)
                {
                    if (swappedPoints.Contains(child))
                    {
                        continue;
                    }
                }
                foreach (var parent in point.Parents)
                {
                    if (swappedPoints.Contains(parent))
                    {
                        continue;
                    }
                }

                point.SwapChildrenAndParents();
                swappedPoints.Add(point);
            }
        }
        public override void ApplyTransformActionToSelection(EditorSceneBase scene, AbstractTransformAction transformAction, ref TransformChangeInfos infos)
        {
            if (PickingSelection == PickingMode.Mesh)
            {
                foreach (GenericPickableMesh point in PickableMeshes)
                {
                    point.ApplyTransformActionToSelection(scene, transformAction, ref infos);
                }
            }
            else if (Selected)
            {
                Vector3 pp = Position, pr = Rotation, ps = Scale;

                GlobalPosition = OnPositionChanged(transformAction.NewPos(GlobalPosition, out bool posHasChanged));

                Matrix3 rotMtx = GlobalRotation;

                GlobalRotation = transformAction.NewRot(GlobalRotation, out bool rotHasChanged);
                GlobalScale    = transformAction.NewScale(GlobalScale, rotMtx, out bool scaleHasChanged);

                infos.Add(this, 0,
                          posHasChanged ? new Vector3?(pp) : new Vector3?(),
                          rotHasChanged ? new Vector3?(pr) : new Vector3?(),
                          scaleHasChanged ? new Vector3?(ps) : new Vector3?());
            }
        }
Example #3
0
            public IRevertable Revert(EditorSceneBase scene) //Insert deleted objs back in
            {
                Revertable3DWorldObjAddition.ObjListInfo[] newObjListInfos = new Revertable3DWorldObjAddition.ObjListInfo[objListInfos.Length];
                int i_newObjListInfos = 0;

                int i_index = linkIndices.Length;

                foreach (ObjListInfo objListInfo in objListInfos.Reverse())
                {
                    newObjListInfos[i_newObjListInfos].objList = objListInfo.objList;

                    I3dWorldObject[] newObjs = newObjListInfos[i_newObjListInfos++].objects = new I3dWorldObject[objListInfo.deleteInfos.Length];
                    int i_newObjs            = 0;
                    foreach (DeleteInfo info in objListInfo.deleteInfos.Reverse())
                    {
                        //Insert obj into the list
                        objListInfo.objList.Insert(info.index, info.obj);
                        newObjs[i_newObjs++] = info.obj;

                        //Insert obj into all links linking to it
                        for (int i = info.obj.LinkDestinations.Count - 1; i >= 0; i--)
                        {
                            (string, I3dWorldObject)dest = info.obj.LinkDestinations[i];
                            dest.Item2.Links[dest.Item1].Insert(linkIndices[--i_index], info.obj);
                        }
                    }
                }

                (scene as SM3DWorldScene)?.UpdateLinkDestinations();

                return(new Revertable3DWorldObjAddition(newObjListInfos));
            }
Example #4
0
            public IRevertable Revert(EditorSceneBase scene)
            {
                Revertable3DWorldObjDeletion.ObjListInfo[] newObjListInfos = new Revertable3DWorldObjDeletion.ObjListInfo[objListInfos.Length];
                int i_newObjListInfos = 0;

                List <int> newLinkIndices = new List <int>();

                foreach (ObjListInfo objListInfo in objListInfos)
                {
                    newObjListInfos[i_newObjListInfos].objList = objListInfo.objList;

                    Revertable3DWorldObjDeletion.DeleteInfo[] newObjs =
                        newObjListInfos[i_newObjListInfos++].deleteInfos = new Revertable3DWorldObjDeletion.DeleteInfo[objListInfo.objects.Length];
                    int i_newObjs = 0;

                    foreach (I3dWorldObject obj in objListInfo.objects)
                    {
                        //Remove obj from the list
                        newObjs[i_newObjs++] = new Revertable3DWorldObjDeletion.DeleteInfo(objListInfo.objList.IndexOf(obj), obj);
                        objListInfo.objList.Remove(obj);

                        //remove obj from all links linking to it
                        foreach ((string, I3dWorldObject)dest in obj.LinkDestinations)
                        {
                            newLinkIndices.Add(dest.Item2.Links[dest.Item1].IndexOf(obj));
                            dest.Item2.Links[dest.Item1].Remove(obj);
                        }
                    }
                }

                (scene as SM3DWorldScene)?.UpdateLinkDestinations();

                return(new Revertable3DWorldObjDeletion(newObjListInfos, newLinkIndices.ToArray()));
            }
Example #5
0
        public void ApplyIfChanged(IList objects, EditorSceneBase scene = null)
        {
            var infos = new List <EditorSceneBase.RevertableMassPropertyChange <TObject, TValue> .Info>();

            if (Value != prevValue)
            {
                for (int i = 0; i < objects.Count; i++)
                {
                    var value = getter((TObject)objects[i]);

                    if (!value.Equals(Value.SharedValue))
                    {
                        infos.Add(new EditorSceneBase.RevertableMassPropertyChange <TObject, TValue> .Info((TObject)objects[i], value));

                        setter((TObject)objects[i], Value.SharedValue);
                    }
                }

                prevValue = Value;

                if (infos.Count > 0)
                {
                    scene?.AddToUndo(new EditorSceneBase.RevertableMassPropertyChange <TObject, TValue>(getter, setter, infos.ToArray()));
                }
            }
        }
Example #6
0
 public override void DeleteSelected(EditorSceneBase scene, DeletionManager manager, IList list)
 {
     if (Selected)
     {
         manager.Add(list, this);
     }
 }
Example #7
0
 public override void ApplyTransformActionToSelection(EditorSceneBase scene, AbstractTransformAction transformAction, ref TransformChangeInfos transformChangeInfos)
 {
     foreach (RenderablePathPoint point in GetSelectedPoints())
     {
         point.ApplyTransformActionToSelection(scene, transformAction, ref transformChangeInfos);
     }
 }
Example #8
0
        public Matrix4 GetMatrix(EditorSceneBase editorScene)
        {
            if (Selected)
            {
                bool posChanged   = false;
                bool scaleChanged = false;
                bool rotChanged   = false;

                editorScene.CurrentAction.NewPos(GlobalPosition, out posChanged);
                editorScene.CurrentAction.NewScale(GlobalScale, GlobalRotation, out scaleChanged);
                editorScene.CurrentAction.NewRot(GlobalRotation, out rotChanged);
                if (posChanged || scaleChanged || rotChanged)
                {
                    updateMatrix = true;
                }
                Console.WriteLine($"updateMatrix {updateMatrix} GlobalPosition {GlobalPosition}");
            }

            if (!updateMatrix)
            {
                return(transform);
            }
            else
            {
                updateMatrix = false;
                transform    = UpdateMatrix(editorScene);
                return(transform);
            }
        }
Example #9
0
            public BasicPropertyUIContainer(AreaObject area, EditorSceneBase scene)
            {
                this.area  = area;
                this.scene = scene;

                shapeNames = LevelIO.AreaModelNames.ToArray();
            }
Example #10
0
        public override void Draw(GL_ControlModern control, Pass pass, EditorSceneBase editorScene)
        {
            Vector4 hightlightColor;

            if (Selected && editorScene.Hovered == this)
            {
                hightlightColor = General3dWorldObject.hoverSelectColor;
            }
            else if (Selected)
            {
                hightlightColor = General3dWorldObject.selectColor;
            }
            else if (editorScene.Hovered == this)
            {
                hightlightColor = General3dWorldObject.hoverColor;
            }
            else
            {
                hightlightColor = Vector4.Zero;
            }

            Matrix3 rotMat = Framework.Mat3FromEulerAnglesDeg(Rotation);

            rotMat = Selected ? editorScene.SelectionTransformAction.NewRot(rotMat) : rotMat;

            Matrix4 transform = new Matrix4(rotMat) * Matrix4.CreateTranslation(Selected ? editorScene.SelectionTransformAction.NewPos(Position) : Position);

            Vector4 pickingColor = control.NextPickingColor();

            foreach (var renderer in Zone.ZoneBatch.BatchRenderers)
            {
                renderer.Draw(control, pass, hightlightColor, transform, pickingColor);
            }
        }
Example #11
0
        public IRevertable Revert(EditorSceneBase scene)
        {
            var infos = new List <RenderablePathPoint>();

            foreach (var info in Points)
            {
                info.Point.Parents.Clear();
                info.Point.Children.Clear();

                foreach (var parent in info.Parents)
                {
                    info.Point.Parents.Add(parent);
                }
                foreach (var child in info.Children)
                {
                    info.Point.Children.Add(child);
                }

                if (!info.ParentPath.PathPoints.Contains(info.Point))
                {
                    info.ParentPath.AddPoint(info.Point);
                }
                infos.Add(info.Point);
            }

            return(new RevertableDelPointCollection(infos));
        }
Example #12
0
        public override bool TrySetupObjectUIControl(EditorSceneBase scene, ObjectUIControl objectUIControl)
        {
            if (!Selected)
            {
                return(false);
            }

            objectUIControl.AddObjectUIContainer(new CameraUI(this, scene), "General Settings");

            if (mFields.Keys.Any(k => k.StartsWith("flag.")))
            {
                objectUIControl.AddObjectUIContainer(new CameraFlagsUI(this, scene), "Camera Flags");
            }

            // camera types "Cube", "Group", "Start", and "Other" load the chunk CameraParamChunkGame
            // "Event" loads CameraParamChunkEvent
            CameraType type = GetCameraType();

            if (type == CameraType.Cube || type == CameraType.Group || type == CameraType.Start || type == CameraType.Other)
            {
                objectUIControl.AddObjectUIContainer(new CameraGameFlagsUI(this, scene), "Camera Game Flags");
            }

            if (type == CameraType.Event)
            {
                objectUIControl.AddObjectUIContainer(new CameraEventFlagsUI(this, scene), "Camera Event Flags");
            }

            return(true);
        }
Example #13
0
        public override void Draw(GL_ControlModern control, Pass pass, EditorSceneBase editorScene)
        {
            if (pass == Pass.TRANSPARENT)
            {
                return;
            }

            if (!editorScene.ShouldBeDrawn(this))
            {
                return;
            }

            bool hovered = editorScene.Hovered == this;

            Matrix4 mtx = Matrix4.CreateScale(1f, 0.25f, 1f);

            mtx *= Matrix4.CreateFromAxisAngle(Vector3.UnitY, -Framework.HALF_PI);
            mtx *= Matrix4.CreateTranslation(Selected ? editorScene.CurrentAction.NewPos(Position) : Position);

            Vector4 pickingColor = control.NextPickingColor();

            Vector4 lineBoxColor;

            if (hovered && Selected)
            {
                lineBoxColor = hoverSelectColor;
            }
            else if (Selected)
            {
                lineBoxColor = selectColor;
            }
            else if (hovered)
            {
                lineBoxColor = hoverColor;
            }
            else
            {
                lineBoxColor = new Vector4(0.75f, 0.75f, 0.75f, 1);
            }

            if (Selected)
            {
                control.UpdateModelMatrix(mtx * Matrix4.CreateTranslation(Vector3.UnitX * (3f - Math.Abs((control.RedrawerFrame - animationStartFrame) * 0.0625f % 6f - 3f))));
            }
            else
            {
                control.UpdateModelMatrix(mtx);
            }

            Renderers.ColorBlockRenderer.Draw(control, pass, Color, Color, pickingColor);

            control.UpdateModelMatrix(mtx);

            Renderers.ColorBlockRenderer.DrawLineBox(control, pass, lineBoxColor, pickingColor);

            control.UpdateModelMatrix(mtx * Matrix4.CreateTranslation(Vector3.UnitX * 3f));

            Renderers.ColorBlockRenderer.DrawLineBox(control, pass, lineBoxColor, pickingColor);
        }
Example #14
0
            public BasicPropertyUIContainer(AreaObject area, EditorSceneBase scene)
            {
                this.area  = area;
                this.scene = scene;

                shapeNames    = LevelIO.AreaModelNames.ToArray();
                DB_classNames = Program.ParameterDB.AreaParameters.Keys.ToArray();
            }
Example #15
0
            public StartObjUI(AbstractObj obj, EditorSceneBase scene)
            {
                this.obj   = obj as StartObj;
                this.scene = scene;

                zones = new List <string>();
                zones.AddRange(obj.mParentZone.mGalaxy.GetZones().Keys);
            }
Example #16
0
            public RailUIContainer(Rail rail, EditorSceneBase scene)
            {
                this.rail = rail;

                List <PathPoint> points = new List <PathPoint>();

                this.scene = scene;
            }
        public override void Draw(GL_ControlModern control, Pass pass, EditorSceneBase editorScene)
        {
            if (!ObjectRenderState.ShouldBeDrawn(this) || pass != Pass.OPAQUE)
            {
                return;
            }

            bool hovered = editorScene.Hovered == this;

            if (!CanPick)
            {
                control.SkipPickingColors(1);
                Selected = false;
                hovered  = false;
                if (pass == Pass.PICKING)
                {
                    return;
                }
            }

            Matrix3 rotMtx = GlobalRotation;

            Vector4 highlightColor = Vector4.Zero;

            if (Selected && hovered)
            {
                highlightColor = hoverSelectColor;
            }
            else if (Selected)
            {
                highlightColor = selectColor;
            }
            else if (hovered)
            {
                highlightColor = hoverColor;
            }

            bool    positionChanged = false;
            Vector3 position        = !Selected ? GlobalPosition :
                                      editorScene.CurrentAction.NewPos(GlobalPosition, out positionChanged);

            if (positionChanged && editorScene.CurrentAction is TranslateAction)
            {
                var newPosition = OnPositionChanged(position);
                if (newPosition != position)
                {
                    ((TranslateAction)editorScene.CurrentAction).SetAxisXZ();
                }
                position = newPosition;
            }

            control.UpdateModelMatrix(
                Matrix4.CreateScale((Selected ? editorScene.CurrentAction.NewScale(GlobalScale, rotMtx) : GlobalScale)) *
                new Matrix4(Selected ? editorScene.CurrentAction.NewRot(rotMtx) : rotMtx) *
                Matrix4.CreateTranslation(position));

            DrawModel(control, editorScene, pass, highlightColor);
        }
Example #18
0
        public void ConnectToHoveredPoints(EditorSceneBase scene, bool alt)
        {
            //Only pass if points can be hover connected by movement or being extruded
            //If an action occurs then the point may be being extruded
            bool hasExclusiveAction = (scene.ExclusiveAction != null && scene.ExclusiveAction != EditorScene.NoAction);
            bool hasNormalAction    = (scene.CurrentAction != null && scene.CurrentAction != EditorScene.NoAction);

            if ((!hasExclusiveAction && !hasNormalAction) && ConnectExtrudedHoveredPoints)
            {
                return;
            }

            //Get the selected points.
            //Make sure selected points cannot use the hovered pick pass
            var points = GetSelectedPoints();

            foreach (var point in points)
            {
                point.isHoverPickPass = true;
            }

            //For each point disable the current hovered point
            foreach (var point in PathPoints)
            {
                point.IsPointOver = false;
            }

            //Find any points hovered over while a point is selected
            int part = scene.FindPickablePart(scene.GL_Control, this);

            if (part != -1)
            {
                foreach (var point in points)
                {
                    int hoveredPart = part;
                    foreach (var pt in PathPoints)
                    {
                        //When a selected point's position is changed
                        //check all points and find a hovered point
                        //To determine a connection to be made when released
                        int span = pt.GetPickableSpan();
                        if (hoveredPart >= 0 && hoveredPart < span && !pt.IsSelected() && PointCanConnect(point))
                        {
                            pt.IsPointOver = true;
                        }
                        hoveredPart -= span;
                    }
                }
            }

            //Disable bool preventing hover pick pass when finished
            foreach (var point in points)
            {
                point.isHoverPickPass = false;
            }

            scene.GL_Control.Invalidate();
        }
Example #19
0
        public void MergeSelectedPoints(EditorSceneBase scene)
        {
            var selected = GetSelectedPoints();

            if (selected.Count == 2)
            {
                selected[1].ConnectToPoint(selected[0]);
            }
        }
Example #20
0
        public void FillSelectedPoints(EditorSceneBase scene)
        {
            var selected = GetSelectedPoints();

            if (!selected[1].Children.Contains(selected[0]))
            {
                selected[1].Children.Add(selected[0]);
            }
        }
            public BasicPropertyUIContainer(General3dWorldObject obj, EditorSceneBase scene)
            {
                this.obj   = obj;
                this.scene = scene;

                DB_classNames = Program.ParameterDB.ObjectParameters.Keys.ToArray();

                UpdateClassNameInfo();
            }
Example #22
0
 public override bool TrySetupObjectUIControl(EditorSceneBase scene, ObjectUIControl objectUIControl)
 {
     if (!Selected)
     {
         return(false);
     }
     objectUIControl.AddObjectUIContainer(new PropertyProvider(this, scene), "Transform");
     return(true);
 }
Example #23
0
        public override void Draw(GL_ControlModern control, Pass pass, EditorSceneBase editorScene)
        {
            if (!Visible)
            {
                return;
            }

            if (Selected && editorScene.Hovered == this)
            {
                SceneDrawState.HighlightColorOverride = General3dWorldObject.hoverSelectColor;
            }
            else if (Selected)
            {
                SceneDrawState.HighlightColorOverride = General3dWorldObject.selectColor;
            }
            else if (editorScene.Hovered == this)
            {
                SceneDrawState.HighlightColorOverride = General3dWorldObject.hoverColor;
            }
            else
            {
                SceneDrawState.HighlightColorOverride = Vector4.Zero;
            }

            Matrix3 rotMat = Framework.Mat3FromEulerAnglesDeg(Rotation);

            rotMat = Selected ? editorScene.SelectionTransformAction.NewRot(rotMat) : rotMat;

            SceneDrawState.ZoneTransform = new ZoneTransform(
                new Matrix4(rotMat) * Matrix4.CreateTranslation(Selected ? editorScene.SelectionTransformAction.NewPos(Position) : Position),
                rotMat);

            var actionBackup = editorScene.SelectionTransformAction;

            editorScene.SelectionTransformAction = EditorSceneBase.NoAction;

            SceneObjectIterState.InLinks = false;
            foreach (ObjectList objects in Zone.ObjLists.Values)
            {
                foreach (I3dWorldObject obj in objects)
                {
                    obj.Draw(control, pass, editorScene);
                }
            }
            SceneObjectIterState.InLinks = true;
            foreach (I3dWorldObject obj in Zone.LinkedObjects)
            {
                obj.Draw(control, pass, editorScene);
            }

            SceneDrawState.ZoneTransform = ZoneTransform.Identity;

            SceneDrawState.HighlightColorOverride = null;

            editorScene.SelectionTransformAction = actionBackup;
        }
Example #24
0
        public override bool TrySetupObjectUIControl(EditorSceneBase scene, ObjectUIControl objectUIControl)
        {
            if (!Selected)
            {
                return(false);
            }

            objectUIControl.AddObjectUIContainer(new LightUI(this, scene), "General Settings");

            return(true);
        }
Example #25
0
        private void AddPointTransformsToUndo(EditorSceneBase scene, List <RenderablePathPoint> selected)
        {
            TransformChangeInfos transformChangeInfos = new TransformChangeInfos(new List <TransformChangeInfo>());

            for (int i = 0; i < selected.Count; i++)
            {
                transformChangeInfos.Add(selected[i], i, selected[i].GlobalPosition, selected[i].Rotation, selected[i].GlobalScale);
            }

            scene.AddTransformToUndo(transformChangeInfos);
        }
            public ExtraPropertiesUIContainer(Dictionary <string, dynamic> propertyDict, EditorSceneBase scene, Information information = null)
            {
                this.propertyDict = propertyDict;
                this.scene        = scene;
                propertyDictKeys  = propertyDict.Keys.ToArray();

                if (information != null)
                {
                    propertyInfos = information.Properties;
                }
            }
Example #27
0
        public override void Draw(GL_ControlLegacy control, Pass pass, EditorSceneBase editorScene)
        {
            if (pass == Pass.TRANSPARENT)
            {
                return;
            }

            if (!ObjectRenderState.ShouldBeDrawn(this))
            {
                return;
            }
        }
Example #28
0
        public IRevertable Revert(EditorSceneBase scene)
        {
            var infos = new List <RenderablePathPoint>();

            foreach (var info in Points)
            {
                info.ParentPath.RemovePoint(info.Point);
                infos.Add(info.Point);
            }

            return(new RevertableDelPointCollection(infos));
        }
Example #29
0
        public override bool TrySetupObjectUIControl(EditorSceneBase scene, ObjectUIControl objectUIControl)
        {
            if (Selected)
            {
                objectUIControl.AddObjectUIContainer(new GeneralUIContainer(this, scene), "General");

                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #30
0
 public override void ApplyTransformActionToPart(EditorSceneBase scene, AbstractTransformAction transformAction, int _part, ref TransformChangeInfos transformChangeInfos)
 {
     foreach (RenderablePathPoint point in PathPoints)
     {
         int span = point.GetPickableSpan();
         if (_part >= 0 && _part < span)
         {
             point.ApplyTransformActionToPart(scene, transformAction, _part, ref transformChangeInfos);
             return;
         }
         _part -= span;
     }
     throw new Exception("Invalid partIndex");
 }