Ejemplo n.º 1
0
 protected override void Start()
 {
     base.Start();
     transform.localScale = new Vector3(1f, 1f, 1f);
     tfGizmo = Camera.main.GetComponent <TransformGizmo>();
     // disable update method until model is ready
     //enabled = false;
 }
Ejemplo n.º 2
0
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // Dispose managed state (managed objects).
                    TransformGizmo.Dispose();
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                disposedValue = true;
            }
        }
Ejemplo n.º 3
0
    void Start()
    {
        objRenderer = gameObject.GetComponent <Renderer>();
        picker      = GameObject.FindGameObjectWithTag(PICKER).GetComponent <ColorPicker>();
        gizmo       = GameObject.FindGameObjectWithTag(CAMERA).GetComponent <TransformGizmo>();

        // Event listener for color value change in color picker
        picker.onValueChanged.AddListener(color =>
        {
            // only apply color to selected objects
            if (gizmo.isSelected(gameObject.transform))
            {
                objRenderer.material.color = color;
            }
        });
    }
Ejemplo n.º 4
0
        public D3DRenderSetup(int width, int height)
        {
            WindowWidth  = width;
            WindowHeight = height;
            ResetCamera();
            InitTargets();
            _renderer = OperatorPartContext.DefaultRenderer;

            var sceneGridDefinition = MetaManager.Instance.GetMetaOperator(Guid.Parse("a5930d73-3db3-4785-b8c0-991b6fbfe3fc"));

            _sceneGridOperator = sceneGridDefinition.CreateOperator(Guid.Empty);

            var imageBackgroundDefinition = MetaManager.Instance.GetMetaOperator(Guid.Parse("1e4f6cd4-86fa-4c8f-833c-0b8c128cf221"));

            _imageBackgroundOperator = imageBackgroundDefinition.CreateOperator(Guid.Empty);

            TransformGizmo = new TransformGizmo();
        }
Ejemplo n.º 5
0
 private void Start()
 {
     gizmo = GameObject.FindGameObjectWithTag("MainCamera").GetComponent <TransformGizmo>();
     if (picker == null)
     {
         picker = GameObject.FindGameObjectWithTag("Picker").GetComponent <ColorPicker>();
     }
     picker.onValueChanged.AddListener(color =>
     {
         foreach (Transform o in gizmo.targetRootsOrdered)
         {
             Renderer renderer = o.gameObject.GetComponent <Renderer>();
             if (renderer != null)
             {
                 renderer.material.color = color;
             }
         }
     });
 }
Ejemplo n.º 6
0
        private void LoadFile(string filename)
        {
            loaded              = false;
            UseWaitCursor       = true;
            Enabled             = false;
            LevelData.leveltexs = null;
            cam = new EditorCamera(EditorOptions.RenderDrawDistance);
            if (LandTable.CheckLevelFile(filename))
            {
                LevelData.geo = LandTable.LoadFromFile(filename);
            }
            else
            {
                byte[] file = File.ReadAllBytes(filename);
                if (Path.GetExtension(filename).Equals(".prs", StringComparison.OrdinalIgnoreCase))
                {
                    file = FraGag.Compression.Prs.Decompress(file);
                }
                using (LevelFileDialog dlg = new LevelFileDialog())
                {
                    dlg.ShowDialog(this);
                    LevelData.geo = new LandTable(file, (int)dlg.NumericUpDown1.Value, (uint)dlg.numericUpDown2.Value, (LandTableFormat)dlg.comboBox2.SelectedIndex);
                }
            }
            LevelData.ClearLevelItems();

            for (int i = 0; i < LevelData.geo.COL.Count; i++)
            {
                LevelData.AddLevelItem((new LevelItem(LevelData.geo.COL[i], i, selectedItems)));
            }

            LevelData.TextureBitmaps = new Dictionary <string, BMPInfo[]>();
            LevelData.Textures       = new Dictionary <string, Texture[]>();
            using (OpenFileDialog a = new OpenFileDialog()
            {
                DefaultExt = "pvm", Filter = "Texture Files|*.pvm;*.gvm;*.prs"
            })
            {
                if (!string.IsNullOrEmpty(LevelData.geo.TextureFileName))
                {
                    a.FileName = LevelData.geo.TextureFileName + ".pvm";
                }
                else
                {
                    a.FileName = string.Empty;
                }
                if (a.ShowDialog(this) == DialogResult.OK)
                {
                    BMPInfo[] TexBmps = TextureArchive.GetTextures(a.FileName);
                    Texture[] texs    = new Texture[TexBmps.Length];
                    for (int j = 0; j < TexBmps.Length; j++)
                    {
                        texs[j] = TexBmps[j].Image.ToTexture(d3ddevice);
                    }
                    string texname = Path.GetFileNameWithoutExtension(a.FileName);
                    if (!LevelData.TextureBitmaps.ContainsKey(texname))
                    {
                        LevelData.TextureBitmaps.Add(texname, TexBmps);
                    }
                    if (!LevelData.Textures.ContainsKey(texname))
                    {
                        LevelData.Textures.Add(texname, texs);
                    }
                    LevelData.leveltexs = texname;
                }
            }
            loaded                           = true;
            transformGizmo                   = new TransformGizmo();
            gizmoSpaceComboBox.Enabled       = false;
            gizmoSpaceComboBox.SelectedIndex = 0;

            clearLevelToolStripMenuItem.Enabled         = LevelData.geo != null;
            calculateAllBoundsToolStripMenuItem.Enabled = LevelData.geo != null;
            statsToolStripMenuItem.Enabled  = LevelData.geo != null;
            selectedItems.SelectionChanged += SelectionChanged;
            UseWaitCursor = false;
            Enabled       = editInfoToolStripMenuItem.Enabled = saveToolStripMenuItem.Enabled = exportToolStripMenuItem.Enabled = importToolStripMenuItem.Enabled = true;

            DrawLevel();
        }
Ejemplo n.º 7
0
 private void Start()
 {
     this.gizmo  = this.TargetObject.GetComponent <TransformGizmo>();
     this.bounds = this.gizmo.Bounds;
     SetTransformation(bounds);
 }
Ejemplo n.º 8
0
 protected override void Start()
 {
     base.Start();
     tfGizmo        = Camera.main.GetComponent <TransformGizmo>();
     outlineOnClick = GetComponent <OutlineOnClick>();
 }
Ejemplo n.º 9
0
 // Initialize class variables
 private void Start()
 {
     mainCamera = GameObject.FindGameObjectWithTag("MainCamera");
     gizmo      = mainCamera.GetComponent <TransformGizmo>();
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MainEditorGizmoViewport"/> class.
        /// </summary>
        /// <param name="editor">Editor instance.</param>
        public MainEditorGizmoViewport(Editor editor)
            : base(RenderTask.Create <SceneRenderTask>(), editor.Undo)
        {
            _editor = editor;

            // Prepare rendering task
            Task.ActorsSource = ActorsSources.ScenesAndCustomActors;
            Task.Flags        = ViewFlags.DefaultEditor;
            Task.Begin       += RenderTaskOnBegin;
            Task.End         += RenderTaskOnEnd;
            Task.Draw        += RenderTaskOnDraw;

            // Create selection outline postFx
            SelectionOutline = FlaxEngine.Object.New <SelectionOutline>();
            Task.CustomPostFx.Add(SelectionOutline);

            // Add transformation gizmo
            TransformGizmo = new TransformGizmo(this);
            TransformGizmo.OnApplyTransformation += ApplyTransform;
            TransformGizmo.OnModeChanged         += OnGizmoModeChanged;
            Gizmos.Active = TransformGizmo;

            // Add grid
            Grid = new GridGizmo(this);
            Grid.EnabledChanged += gizmo => _showGridButton.Icon = gizmo.Enabled ? Style.Current.CheckBoxTick : Sprite.Invalid;

            editor.SceneEditing.OnSelectionChanged += OnSelectionChanged;

            // Transform space widget
            var transformSpaceWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var transformSpaceToggle = new ViewportWidgetButton(string.Empty, editor.UI.GetIcon("World16"), null, true)
            {
                Checked     = TransformGizmo.ActiveTransformSpace == TransformGizmo.TransformSpace.World,
                TooltipText = "Gizmo transform space (world or local)",
                Parent      = transformSpaceWidget
            };

            transformSpaceToggle.OnToggle += onTransformSpaceToggle;
            transformSpaceWidget.Parent    = this;

            // Scale snapping widget
            var scaleSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableScaleSnapping = new ViewportWidgetButton(string.Empty, editor.UI.GetIcon("ScaleStep16"), null, true)
            {
                Checked     = TransformGizmo.ScaleSnapEnabled,
                TooltipText = "Enable scale snapping",
                Parent      = scaleSnappingWidget
            };

            enableScaleSnapping.OnToggle += onScaleSnappingToggle;
            var scaleSnappingCM = new ContextMenu();
            var scaleSnappng    = new ViewportWidgetButton(TransformGizmo.ScaleSnapValue.ToString(), Sprite.Invalid, scaleSnappingCM);

            scaleSnappng.TooltipText = "Scale snapping values";
            for (int i = 0; i < EditorViewportScaleSnapValues.Length; i++)
            {
                var button = scaleSnappingCM.AddButton(i, EditorViewportScaleSnapValues[i].ToString());
                button.Tag = scaleSnappng;
            }
            scaleSnappingCM.OnButtonClicked += widgetScaleSnapClick;
            scaleSnappingCM.VisibleChanged  += widgetScaleSnapShowHide;
            scaleSnappng.Parent              = scaleSnappingWidget;
            scaleSnappingWidget.Parent       = this;

            // Rotation snapping widget
            var rotateSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableRotateSnapping = new ViewportWidgetButton(string.Empty, editor.UI.GetIcon("RotateStep16"), null, true)
            {
                Checked     = TransformGizmo.RotationSnapEnabled,
                TooltipText = "Enable rotation snapping",
                Parent      = rotateSnappingWidget
            };

            enableRotateSnapping.OnToggle += onRotateSnappingToggle;
            var rotateSnappingCM = new ContextMenu();
            var rotateSnappng    = new ViewportWidgetButton(TransformGizmo.RotationSnapValue.ToString(), Sprite.Invalid, rotateSnappingCM);

            rotateSnappng.TooltipText = "Rotation snapping values";
            for (int i = 0; i < EditorViewportRotateSnapValues.Length; i++)
            {
                var button = rotateSnappingCM.AddButton(i, EditorViewportRotateSnapValues[i].ToString());
                button.Tag = rotateSnappng;
            }
            rotateSnappingCM.OnButtonClicked += widgetRotateSnapClick;
            rotateSnappingCM.VisibleChanged  += widgetRotateSnapShowHide;
            rotateSnappng.Parent              = rotateSnappingWidget;
            rotateSnappingWidget.Parent       = this;

            // Translation snapping widget
            var translateSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableTranslateSnapping = new ViewportWidgetButton(string.Empty, editor.UI.GetIcon("Grid16"), null, true)
            {
                Checked     = TransformGizmo.TranslationSnapEnable,
                TooltipText = "Enable position snapping",
                Parent      = translateSnappingWidget
            };

            enableTranslateSnapping.OnToggle += onTranslateSnappingToggle;
            var translateSnappingCM = new ContextMenu();
            var translateSnappng    = new ViewportWidgetButton(TransformGizmo.TranslationSnapValue.ToString(), Sprite.Invalid, translateSnappingCM);

            translateSnappng.TooltipText = "Position snapping values";
            for (int i = 0; i < EditorViewportTranslateSnapValues.Length; i++)
            {
                var button = translateSnappingCM.AddButton(i, EditorViewportTranslateSnapValues[i].ToString());
                button.Tag = translateSnappng;
            }
            translateSnappingCM.OnButtonClicked += widgetTranslateSnapClick;
            translateSnappingCM.VisibleChanged  += widgetTranslateSnapShowHide;
            translateSnappng.Parent              = translateSnappingWidget;
            translateSnappingWidget.Parent       = this;

            // Gizmo mode widget
            var gizmoMode = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);

            _gizmoModeTranslate = new ViewportWidgetButton(string.Empty, editor.UI.GetIcon("Translate16"), null, true)
            {
                Tag         = TransformGizmo.Mode.Translate,
                TooltipText = "Translate gizmo mode",
                Checked     = true,
                Parent      = gizmoMode
            };
            _gizmoModeTranslate.OnToggle += onGizmoModeToggle;
            _gizmoModeRotate              = new ViewportWidgetButton(string.Empty, editor.UI.GetIcon("Rotate16"), null, true)
            {
                Tag         = TransformGizmo.Mode.Rotate,
                TooltipText = "Rotate gizmo mode",
                Parent      = gizmoMode
            };
            _gizmoModeRotate.OnToggle += onGizmoModeToggle;
            _gizmoModeScale            = new ViewportWidgetButton(string.Empty, editor.UI.GetIcon("Scale16"), null, true)
            {
                Tag         = TransformGizmo.Mode.Scale,
                TooltipText = "Scale gizmo mode",
                Parent      = gizmoMode
            };
            _gizmoModeScale.OnToggle += onGizmoModeToggle;
            gizmoMode.Parent          = this;

            // Create Camera Here widget
            _showGridButton               = ViewWidgetButtonMenu.AddButton("Show grid", () => Grid.Enabled = !Grid.Enabled);
            _showGridButton.Icon          = Style.Current.CheckBoxTick;
            _showGridButton.IndexInParent = 1;
            ViewWidgetButtonMenu.AddSeparator();
            ViewWidgetButtonMenu.AddButton("Create camera here", CreateCameraAtView);
        }
Ejemplo n.º 11
0
 protected override void Start()
 {
     base.Start();
     transform.localScale = new Vector3(1f, 1f, 1f);
     tfGizmo = Camera.main.GetComponent <TransformGizmo>();
 }
Ejemplo n.º 12
0
 protected override void Start()
 {
     base.Start();
     tfGizmo        = Camera.main.GetComponent <TransformGizmo>();
     sphereMaterial = Sphere.GetComponent <Renderer>().material;
 }
Ejemplo n.º 13
0
        public void Render(OperatorPartContext context, int outputIdx = 0, bool showGizmos = false, bool renderMesh = false)
        {
            context.D3DDevice         = D3DDevice;
            context.Effect            = _renderer.SceneDefaultEffect;
            context.InputLayout       = _renderer.SceneDefaultInputLayout;
            context.RenderTargetView  = _renderView;
            context.DepthStencilView  = _renderTargetDepthView;
            context.DepthStencilState = _renderer.DefaultDepthStencilState;
            context.BlendState        = _renderer.DefaultBlendState;
            context.BlendFactor       = _renderer.DefaultBlendFactor;
            context.RasterizerState   = _renderer.DefaultRasterizerState;
            context.SamplerState      = _renderer.DefaultSamplerState;
            context.Viewport          = new Viewport(0, 0, WindowWidth, WindowHeight, 0.0f, 1.0f);
            context.Texture0          = _texture;

            Vector3 viewDir, sideDir, upDir;

            CalcDirections(out viewDir, out sideDir, out upDir);
            Matrix worldToCamera = Matrix.LookAtLH(CameraPosition, CameraTarget, upDir);

            // Find a nice balance between small and large objects (probably skyspheres)
            float zoomLength   = (CameraPosition - CameraTarget).Length();
            float farClipping  = (zoomLength * 2) + 5000;
            float nearClipping = zoomLength / 100;

            Setup(context, Operator, _renderer, worldToCamera, (float)nearClipping, (float)farClipping);

            LastContext = context;

            if (showGizmos)
            {
                var selectedOps = (from selectable in App.Current.MainWindow.CompositionView.CompositionGraphView.SelectionHandler.SelectedElements
                                   select selectable as OperatorWidget
                                   into opWidget
                                   where opWidget != null && opWidget.Operator.Outputs.Any()
                                   select opWidget.Operator).ToArray();

                TransformGizmo.SetupEvalCallbackForSelectedTransformOperators(selectedOps, context);

                float?previousValue = null;
                if (context.Variables.ContainsKey(OperatorPartContext.DEBUG_VARIABLE_NAME))
                {
                    previousValue = context.Variables[OperatorPartContext.DEBUG_VARIABLE_NAME];
                }
                context.Variables[OperatorPartContext.DEBUG_VARIABLE_NAME] = 1;

                context.Variables[GIZMO_PART_VARIBALE_NAME] = IndexOfGizmoPartBelowMouse;

                EvaluateOperator(context, outputIdx, renderMesh);

                _sceneGridOperator.Outputs[0].Eval(context);

                TransformGizmo.RenderTransformGizmo(context);

                if (previousValue != null)
                {
                    context.Variables[OperatorPartContext.DEBUG_VARIABLE_NAME] = previousValue.Value;
                }
                else
                {
                    context.Variables.Remove(OperatorPartContext.DEBUG_VARIABLE_NAME);
                }
            }
            else
            {
                EvaluateOperator(context, outputIdx, renderMesh);
            }
            _gpuSyncer.Sync(D3DDevice.ImmediateContext);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MainEditorGizmoViewport"/> class.
        /// </summary>
        /// <param name="editor">Editor instance.</param>
        public MainEditorGizmoViewport(Editor editor)
            : base(FlaxEngine.Rendering.RenderTask.Create <SceneRenderTask>(), editor.Undo)
        {
            _editor = editor;

            // Prepare rendering task
            Task.ActorsSource = ActorsSources.ScenesAndCustomActors;
            Task.Flags        = ViewFlags.DefaultEditor;
            Task.Begin       += RenderTaskOnBegin;
            Task.Draw        += RenderTaskOnDraw;
            Task.End         += RenderTaskOnEnd;

            // Render task after the main game task so streaming and render state data will use main game task instead of editor preview
            Task.Order = 1;

            // Create post effects
            SelectionOutline = FlaxEngine.Object.New <SelectionOutline>();
            SelectionOutline.SelectionGetter = () => _editor.SceneEditing.Selection;
            Task.CustomPostFx.Add(SelectionOutline);
            EditorPrimitives = FlaxEngine.Object.New <EditorPrimitives>();
            EditorPrimitives.DrawDebugDraw = true;
            EditorPrimitives.Viewport      = this;
            Task.CustomPostFx.Add(EditorPrimitives);

            // Add transformation gizmo
            TransformGizmo = new TransformGizmo(this);
            TransformGizmo.OnApplyTransformation += ApplyTransform;
            TransformGizmo.ModeChanged           += OnGizmoModeChanged;
            TransformGizmo.Duplicate             += Editor.Instance.SceneEditing.Duplicate;
            Gizmos.Active = TransformGizmo;

            // Add grid
            Grid = new GridGizmo(this);
            Grid.EnabledChanged += gizmo => _showGridButton.Icon = gizmo.Enabled ? Style.Current.CheckBoxTick : Sprite.Invalid;

            editor.SceneEditing.SelectionChanged += OnSelectionChanged;

            // Transform space widget
            var transformSpaceWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var transformSpaceToggle = new ViewportWidgetButton(string.Empty, editor.Icons.World16, null, true)
            {
                Checked     = TransformGizmo.ActiveTransformSpace == TransformGizmo.TransformSpace.World,
                TooltipText = "Gizmo transform space (world or local)",
                Parent      = transformSpaceWidget
            };

            transformSpaceToggle.OnToggle += OnTransformSpaceToggle;
            transformSpaceWidget.Parent    = this;

            // Scale snapping widget
            var scaleSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableScaleSnapping = new ViewportWidgetButton(string.Empty, editor.Icons.ScaleStep16, null, true)
            {
                Checked     = TransformGizmo.ScaleSnapEnabled,
                TooltipText = "Enable scale snapping",
                Parent      = scaleSnappingWidget
            };

            enableScaleSnapping.OnToggle += OnScaleSnappingToggle;
            var scaleSnappingCM = new ContextMenu();

            _scaleSnapping             = new ViewportWidgetButton(TransformGizmo.ScaleSnapValue.ToString(), Sprite.Invalid, scaleSnappingCM);
            _scaleSnapping.TooltipText = "Scale snapping values";
            for (int i = 0; i < EditorViewportScaleSnapValues.Length; i++)
            {
                var v      = EditorViewportScaleSnapValues[i];
                var button = scaleSnappingCM.AddButton(v.ToString());
                button.Tag = v;
            }
            scaleSnappingCM.ButtonClicked  += OnWidgetScaleSnapClick;
            scaleSnappingCM.VisibleChanged += OnWidgetScaleSnapShowHide;
            _scaleSnapping.Parent           = scaleSnappingWidget;
            scaleSnappingWidget.Parent      = this;

            // Rotation snapping widget
            var rotateSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableRotateSnapping = new ViewportWidgetButton(string.Empty, editor.Icons.RotateStep16, null, true)
            {
                Checked     = TransformGizmo.RotationSnapEnabled,
                TooltipText = "Enable rotation snapping",
                Parent      = rotateSnappingWidget
            };

            enableRotateSnapping.OnToggle += OnRotateSnappingToggle;
            var rotateSnappingCM = new ContextMenu();

            _rotateSnapping             = new ViewportWidgetButton(TransformGizmo.RotationSnapValue.ToString(), Sprite.Invalid, rotateSnappingCM);
            _rotateSnapping.TooltipText = "Rotation snapping values";
            for (int i = 0; i < EditorViewportRotateSnapValues.Length; i++)
            {
                var v      = EditorViewportRotateSnapValues[i];
                var button = rotateSnappingCM.AddButton(v.ToString());
                button.Tag = v;
            }
            rotateSnappingCM.ButtonClicked  += OnWidgetRotateSnapClick;
            rotateSnappingCM.VisibleChanged += OnWidgetRotateSnapShowHide;
            _rotateSnapping.Parent           = rotateSnappingWidget;
            rotateSnappingWidget.Parent      = this;

            // Translation snapping widget
            var translateSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableTranslateSnapping = new ViewportWidgetButton(string.Empty, editor.Icons.Grid16, null, true)
            {
                Checked     = TransformGizmo.TranslationSnapEnable,
                TooltipText = "Enable position snapping",
                Parent      = translateSnappingWidget
            };

            enableTranslateSnapping.OnToggle += OnTranslateSnappingToggle;
            var translateSnappingCM = new ContextMenu();

            _translateSnapping             = new ViewportWidgetButton(TransformGizmo.TranslationSnapValue.ToString(), Sprite.Invalid, translateSnappingCM);
            _translateSnapping.TooltipText = "Position snapping values";
            for (int i = 0; i < EditorViewportTranslateSnapValues.Length; i++)
            {
                var v      = EditorViewportTranslateSnapValues[i];
                var button = translateSnappingCM.AddButton(v.ToString());
                button.Tag = v;
            }
            translateSnappingCM.ButtonClicked  += OnWidgetTranslateSnapClick;
            translateSnappingCM.VisibleChanged += OnWidgetTranslateSnapShowHide;
            _translateSnapping.Parent           = translateSnappingWidget;
            translateSnappingWidget.Parent      = this;

            // Gizmo mode widget
            var gizmoMode = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);

            _gizmoModeTranslate = new ViewportWidgetButton(string.Empty, editor.Icons.Translate16, null, true)
            {
                Tag         = TransformGizmo.Mode.Translate,
                TooltipText = "Translate gizmo mode",
                Checked     = true,
                Parent      = gizmoMode
            };
            _gizmoModeTranslate.OnToggle += OnGizmoModeToggle;
            _gizmoModeRotate              = new ViewportWidgetButton(string.Empty, editor.Icons.Rotate16, null, true)
            {
                Tag         = TransformGizmo.Mode.Rotate,
                TooltipText = "Rotate gizmo mode",
                Parent      = gizmoMode
            };
            _gizmoModeRotate.OnToggle += OnGizmoModeToggle;
            _gizmoModeScale            = new ViewportWidgetButton(string.Empty, editor.Icons.Scale16, null, true)
            {
                Tag         = TransformGizmo.Mode.Scale,
                TooltipText = "Scale gizmo mode",
                Parent      = gizmoMode
            };
            _gizmoModeScale.OnToggle += OnGizmoModeToggle;
            gizmoMode.Parent          = this;

            // Show grid widget
            _showGridButton               = ViewWidgetButtonMenu.AddButton("Show grid", () => Grid.Enabled = !Grid.Enabled);
            _showGridButton.Icon          = Style.Current.CheckBoxTick;
            _showGridButton.IndexInParent = 1;

            // Create camera widget
            ViewWidgetButtonMenu.AddSeparator();
            ViewWidgetButtonMenu.AddButton("Create camera here", CreateCameraAtView);

            DragHandlers.Add(_dragActorType);
            DragHandlers.Add(_dragAssets);

            InitModes();
        }
Ejemplo n.º 15
0
 public TransformGizmoUpdateModel(TransformGizmo previousGizmo, TransformGizmo newGizmo)
 {
     PreviousGizmo = previousGizmo;
     NewGizmo      = newGizmo;
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PrefabWindowViewport"/> class.
        /// </summary>
        /// <param name="window">Editor window.</param>
        public PrefabWindowViewport(PrefabWindow window)
            : base(true)
        {
            _window = window;
            _window.SelectionChanged += OnSelectionChanged;
            Undo           = window.Undo;
            ViewportCamera = new FPSCamera();

            // Prepare rendering task
            Task.ActorsSource = ActorsSources.CustomActors;
            Task.ViewFlags    = ViewFlags.DefaultEditor & ~ViewFlags.EditorSprites;
            Task.PostRender  += OnPostRender;

            // Create post effects
            SelectionOutline = FlaxEngine.Object.New <SelectionOutline>();
            SelectionOutline.SelectionGetter = () => TransformGizmo.SelectedParents;
            Task.CustomPostFx.Add(SelectionOutline);
            EditorPrimitives          = FlaxEngine.Object.New <EditorPrimitives>();
            EditorPrimitives.Viewport = this;
            Task.CustomPostFx.Add(EditorPrimitives);

            // Add transformation gizmo
            TransformGizmo = new TransformGizmo(this);
            TransformGizmo.ApplyTransformation += ApplyTransform;
            TransformGizmo.ModeChanged         += OnGizmoModeChanged;
            TransformGizmo.Duplicate           += _window.Duplicate;
            Gizmos.Active = TransformGizmo;

            // Transform space widget
            var transformSpaceWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var transformSpaceToggle = new ViewportWidgetButton(string.Empty, window.Editor.Icons.World16, null, true)
            {
                Checked     = TransformGizmo.ActiveTransformSpace == TransformGizmoBase.TransformSpace.World,
                TooltipText = "Gizmo transform space (world or local)",
                Parent      = transformSpaceWidget
            };

            transformSpaceToggle.Toggled += OnTransformSpaceToggle;
            transformSpaceWidget.Parent   = this;

            // Scale snapping widget
            var scaleSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableScaleSnapping = new ViewportWidgetButton(string.Empty, window.Editor.Icons.ScaleStep16, null, true)
            {
                Checked     = TransformGizmo.ScaleSnapEnabled,
                TooltipText = "Enable scale snapping",
                Parent      = scaleSnappingWidget
            };

            enableScaleSnapping.Toggled += OnScaleSnappingToggle;

            var scaleSnappingCM = new ContextMenu();

            _scaleSnapping = new ViewportWidgetButton(TransformGizmo.ScaleSnapValue.ToString(), SpriteHandle.Invalid, scaleSnappingCM)
            {
                TooltipText = "Scale snapping values"
            };

            for (int i = 0; i < EditorViewportScaleSnapValues.Length; i++)
            {
                var v      = EditorViewportScaleSnapValues[i];
                var button = scaleSnappingCM.AddButton(v.ToString());
                button.Tag = v;
            }
            scaleSnappingCM.ButtonClicked  += OnWidgetScaleSnapClick;
            scaleSnappingCM.VisibleChanged += OnWidgetScaleSnapShowHide;
            _scaleSnapping.Parent           = scaleSnappingWidget;
            scaleSnappingWidget.Parent      = this;

            // Rotation snapping widget
            var rotateSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableRotateSnapping = new ViewportWidgetButton(string.Empty, window.Editor.Icons.RotateStep16, null, true)
            {
                Checked     = TransformGizmo.RotationSnapEnabled,
                TooltipText = "Enable rotation snapping",
                Parent      = rotateSnappingWidget
            };

            enableRotateSnapping.Toggled += OnRotateSnappingToggle;

            var rotateSnappingCM = new ContextMenu();

            _rotateSnapping = new ViewportWidgetButton(TransformGizmo.RotationSnapValue.ToString(), SpriteHandle.Invalid, rotateSnappingCM)
            {
                TooltipText = "Rotation snapping values"
            };

            for (int i = 0; i < EditorViewportRotateSnapValues.Length; i++)
            {
                var v      = EditorViewportRotateSnapValues[i];
                var button = rotateSnappingCM.AddButton(v.ToString());
                button.Tag = v;
            }
            rotateSnappingCM.ButtonClicked  += OnWidgetRotateSnapClick;
            rotateSnappingCM.VisibleChanged += OnWidgetRotateSnapShowHide;
            _rotateSnapping.Parent           = rotateSnappingWidget;
            rotateSnappingWidget.Parent      = this;

            // Translation snapping widget
            var translateSnappingWidget = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);
            var enableTranslateSnapping = new ViewportWidgetButton(string.Empty, window.Editor.Icons.Grid16, null, true)
            {
                Checked     = TransformGizmo.TranslationSnapEnable,
                TooltipText = "Enable position snapping",
                Parent      = translateSnappingWidget
            };

            enableTranslateSnapping.Toggled += OnTranslateSnappingToggle;

            var translateSnappingCM = new ContextMenu();

            _translateSnappng = new ViewportWidgetButton(TransformGizmo.TranslationSnapValue.ToString(), SpriteHandle.Invalid, translateSnappingCM)
            {
                TooltipText = "Position snapping values"
            };

            for (int i = 0; i < EditorViewportTranslateSnapValues.Length; i++)
            {
                var v      = EditorViewportTranslateSnapValues[i];
                var button = translateSnappingCM.AddButton(v.ToString());
                button.Tag = v;
            }
            translateSnappingCM.ButtonClicked  += OnWidgetTranslateSnapClick;
            translateSnappingCM.VisibleChanged += OnWidgetTranslateSnapShowHide;
            _translateSnappng.Parent            = translateSnappingWidget;
            translateSnappingWidget.Parent      = this;

            // Gizmo mode widget
            var gizmoMode = new ViewportWidgetsContainer(ViewportWidgetLocation.UpperRight);

            _gizmoModeTranslate = new ViewportWidgetButton(string.Empty, window.Editor.Icons.Translate16, null, true)
            {
                Tag         = TransformGizmoBase.Mode.Translate,
                TooltipText = "Translate gizmo mode",
                Checked     = true,
                Parent      = gizmoMode
            };
            _gizmoModeTranslate.Toggled += OnGizmoModeToggle;
            _gizmoModeRotate             = new ViewportWidgetButton(string.Empty, window.Editor.Icons.Rotate16, null, true)
            {
                Tag         = TransformGizmoBase.Mode.Rotate,
                TooltipText = "Rotate gizmo mode",
                Parent      = gizmoMode
            };
            _gizmoModeRotate.Toggled += OnGizmoModeToggle;
            _gizmoModeScale           = new ViewportWidgetButton(string.Empty, window.Editor.Icons.Scale16, null, true)
            {
                Tag         = TransformGizmoBase.Mode.Scale,
                TooltipText = "Scale gizmo mode",
                Parent      = gizmoMode
            };
            _gizmoModeScale.Toggled += OnGizmoModeToggle;
            gizmoMode.Parent         = this;

            _dragHandlers.Add(_dragActorType);
            _dragHandlers.Add(_dragAssets);

            // Setup input actions
            InputActions.Add(options => options.TranslateMode, () => TransformGizmo.ActiveMode = TransformGizmoBase.Mode.Translate);
            InputActions.Add(options => options.RotateMode, () => TransformGizmo.ActiveMode    = TransformGizmoBase.Mode.Rotate);
            InputActions.Add(options => options.ScaleMode, () => TransformGizmo.ActiveMode     = TransformGizmoBase.Mode.Scale);
            InputActions.Add(options => options.FocusSelection, ShowSelectedActors);

            SetUpdate(ref _update, OnUpdate);
        }
Ejemplo n.º 17
0
 protected override void Start()
 {
     base.Start();
     tfGizmo = Camera.main.GetComponent <TransformGizmo>();
 }