示例#1
0
        FloatField AddField(VisualElement panel, string label, int index, Vector3 initValiue)
        {
            var field = new FloatField {
                userData = index, value = initValiue[index]
            };

            if (label != "")
            {
                var l = new Label(label);
                panel.Add(l);
                var dragger = new FieldMouseDragger <double>(field);
                dragger.SetDragZone(l);
            }

            field.RegisterCallback <MouseDownEvent>(Repaint);
            field.RegisterCallback <MouseMoveEvent>(Repaint);
            field.OnValueChanged(evt =>
            {
                var value    = (Vector3)m_PropertyInfo.GetValue(m_Node, null);
                value[index] = (float)evt.newValue;
                m_PropertyInfo.SetValue(m_Node, value, null);
                m_UndoGroup = -1;
                UpdateSlider(m_SliderPanel, index, value);
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <InputEvent>(evt =>
            {
                if (m_UndoGroup == -1)
                {
                    m_UndoGroup = Undo.GetCurrentGroup();
                    m_Node.owner.owner.RegisterCompleteObjectUndo("Change " + m_Node.name);
                }
                float newValue;
                if (!float.TryParse(evt.newData, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out newValue))
                {
                    newValue = 0f;
                }
                var value    = (Vector3)m_PropertyInfo.GetValue(m_Node, null);
                value[index] = newValue;
                m_PropertyInfo.SetValue(m_Node, value, null);
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <KeyDownEvent>(evt =>
            {
                if (evt.keyCode == KeyCode.Escape && m_UndoGroup > -1)
                {
                    Undo.RevertAllDownToGroup(m_UndoGroup);
                    m_UndoGroup = -1;
                    m_Value     = (Vector3)m_PropertyInfo.GetValue(m_Node, null);
                    UpdateSlider(m_SliderPanel, index, m_Value);
                    evt.StopPropagation();
                }
                this.MarkDirtyRepaint();
            });
            panel.Add(field);
            return(field);
        }
示例#2
0
        void AddField(int index, string subLabel)
        {
            var dummy = new VisualElement {
                name = "dummy"
            };
            var label = new Label(subLabel);

            dummy.Add(label);
            Add(dummy);
            var field = new FloatField {
                userData = index, value = m_Value[index]
            };
            var dragger = new FieldMouseDragger <double>(field);

            dragger.SetDragZone(label);
            field.RegisterCallback <MouseDownEvent>(Repaint);
            field.RegisterCallback <MouseMoveEvent>(Repaint);
            field.OnValueChanged(evt =>
            {
                var value    = GetValue();
                value[index] = (float)evt.newValue;
                SetValue(value);
                m_UndoGroup = -1;
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <InputEvent>(evt =>
            {
                if (m_UndoGroup == -1)
                {
                    m_UndoGroup = Undo.GetCurrentGroup();
                    m_Node.owner.owner.RegisterCompleteObjectUndo("Change " + m_Node.name);
                }
                float newValue;
                if (!float.TryParse(evt.newData, out newValue))
                {
                    newValue = 0f;
                }
                var value    = GetValue();
                value[index] = newValue;
                SetValue(value);
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <KeyDownEvent>(evt =>
            {
                if (evt.keyCode == KeyCode.Escape && m_UndoGroup > -1)
                {
                    Undo.RevertAllDownToGroup(m_UndoGroup);
                    m_UndoGroup = -1;
                    m_Value     = GetValue();
                    evt.StopPropagation();
                }
                this.MarkDirtyRepaint();
            });
            Add(field);
        }
        void AddField(Vector4 initialValue, int index, string subLabel)
        {
            var dummy = new VisualElement {
                name = "dummy"
            };
            var label = new Label(subLabel);

            dummy.Add(label);
            Add(dummy);
            var field = new FloatField {
                userData = index, value = initialValue[index]
            };
            var dragger = new FieldMouseDragger <double>(field);

            dragger.SetDragZone(label);
            field.OnValueChanged(evt =>
            {
                var value    = m_Get();
                value[index] = (float)evt.newValue;
                m_Set(value);
                m_Node.Dirty(ModificationScope.Node);
                m_UndoGroup = -1;
            });
            field.RegisterCallback <InputEvent>(evt =>
            {
                if (m_UndoGroup == -1)
                {
                    m_UndoGroup = Undo.GetCurrentGroup();
                    m_Node.owner.owner.RegisterCompleteObjectUndo("Change " + m_Node.name);
                }
                float newValue;
                if (!float.TryParse(evt.newData, out newValue))
                {
                    newValue = 0f;
                }
                var value = m_Get();
                if (Math.Abs(value[index] - newValue) > 1e-9)
                {
                    value[index] = newValue;
                    m_Set(value);
                    m_Node.Dirty(ModificationScope.Node);
                }
            });
            field.RegisterCallback <KeyDownEvent>(evt =>
            {
                if (evt.keyCode == KeyCode.Escape && m_UndoGroup > -1)
                {
                    Undo.RevertAllDownToGroup(m_UndoGroup);
                    m_UndoGroup = -1;
                    evt.StopPropagation();
                }
                Dirty(ChangeType.Repaint);
            });
            Add(field);
        }
        FloatField AddField(VisualElement panel, Slider slider, int index, DielectricSpecularNode.DielectricMaterial initMaterial)
        {
            float initValue;

            if (index == 1)
            {
                initValue = initMaterial.indexOfRefraction;
            }
            else
            {
                initValue = initMaterial.range;
            }

            var field = new FloatField {
                userData = index, value = initValue
            };

            field.RegisterCallback <MouseDownEvent>(Repaint);
            field.RegisterCallback <MouseMoveEvent>(Repaint);
            field.RegisterValueChangedCallback(evt =>
            {
                var fieldValue = (float)evt.newValue;
                if (index == 1)
                {
                    m_DielectricMaterial.indexOfRefraction = fieldValue;
                }
                else
                {
                    m_DielectricMaterial.range = fieldValue;
                }

                m_PropertyInfo.SetValue(m_Node, m_DielectricMaterial, null);
                this.MarkDirtyRepaint();
            });
            field.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt =>
            {
                if (index == 1)
                {
                    RedrawIORControls(m_DielectricMaterial.indexOfRefraction);
                }
                else
                {
                    RedrawRangeControls(m_DielectricMaterial.range);
                }

                this.MarkDirtyRepaint();
            });
            panel.Add(field);
            return(field);
        }
示例#5
0
        public void OpenClipsTransitionsModal(MVideoClip clip, MTransition transition)
        {
            var modalContent = this.ShowModalWindow("Transition");

            // Create a new field and assign it its value.
            var TypeField = new EnumField("Type:", transition.Type);

            modalContent.Add(TypeField);

            var durationField = new FloatField("Duration:");

            durationField.value = transition.duration;

            modalContent.Add(durationField);

            TypeField.RegisterCallback <ChangeEvent <System.Enum> >((evt) =>
            {
                transition.Type = (MTransition.TransitionType)evt.newValue;
            });

            durationField.RegisterCallback <ChangeEvent <float> >((evt) =>
            {
                transition.duration = evt.newValue;
            });
        }
        protected override void SetBaseVisualElement(VisualElement visualElement)
        {
            Vector3Field originField = new Vector3Field("Origin: ")
            {
                value = Blueprint.Origin
            };

            originField.RegisterCallback <ChangeEvent <Vector3> >(evt => Blueprint.SetOrigin(evt.newValue));
            visualElement.Add(originField);

            FloatField lengthField = new FloatField("Length: ")
            {
                value = Blueprint.Length
            };

            lengthField.RegisterCallback <ChangeEvent <float> >(evt => Blueprint.SetLength(evt.newValue));
            visualElement.Add(lengthField);

            // visualElement.Add(new ValidatorField(Blueprint.NonZeroVolumeValidator));

            for (int i = 0; i < Blueprint.Points.Count; i++)
            {
                int       pointNum  = i;
                TextField nameField = new TextField((pointNum + 1).GetOrdinalForm() + " Point name: ")
                {
                    value = Blueprint.Points[i].PointName
                };
                nameField.RegisterCallback <ChangeEvent <string> >(evt => Blueprint.SetPointName(pointNum, evt.newValue));
                visualElement.Add(nameField);
                visualElement.Add(new ValidatorField(Blueprint.Points[i].NameNotEmptyValidator));
                visualElement.Add(new ValidatorField(Blueprint.Points[i].NameUniquenessValidator));
                visualElement.Add(new ValidatorField(Blueprint.Points[i].PositionUniquenessValidator));
            }
        }
示例#7
0
    public override VisualElement CreateInspectorGUI()
    {
        var root = _root;

        UI.CloneTree(_root);

        // Name
        _name       = root.Query <TextField>("Name").First();
        _name.value = _star.Name;
        _name.RegisterCallback <ChangeEvent <string> >(OnNameChange);

        // Color
        var _color = root.Query <ColorField>("Color").First();

        _color.value = _star.Color;
        _color.RegisterCallback <ChangeEvent <Color> >(OnColorChange);


        // Radius's power slider
        _radiusSlider       = root.Query <Slider>("RadiusSlider").First();
        _radiusSlider.value = CalcSliderPosFromRadius(_star.Radius);
        _radiusSlider.RegisterCallback <ChangeEvent <float> >(OnRadiusSliderChange);

        _radiusInput       = root.Query <FloatField>("RadiusInput").First();
        _radiusInput.value = _star.Radius;
        _radiusInput.RegisterCallback <ChangeEvent <float> >(OnRadiusInputChange);
        _radiusInput.maxLength = 5;

        // Gravity well radius
        _gravityWellSlider       = root.Query <Slider>("GravityWellSlider").First();
        _gravityWellSlider.value = _star.GravityWellRadius;
        _gravityWellSlider.RegisterCallback <ChangeEvent <float> >(OnGravityWellSliderChange);

        return(root);
    }
        public static void SetFloatFieldRange(this FloatField field, float min = float.MinValue, float max = float.MaxValue)
        {
            k_FloatFieldRanges[field] = new Tuple <float, float>(min, max);
            field.RegisterValueChangedCallback(OnFloatFieldValueChanged);
            field.RegisterCallback <DetachFromPanelEvent>(OnFloatFieldDetachedFromPanel);

            ClampFloatFieldValue(field.value, field);
        }
示例#9
0
 private void BindFields()
 {
     m_ScaleModeField.RegisterCallback <ChangeEvent <Enum> >(evt =>
                                                             UpdateScaleModeValues((PanelScaleModes)evt.newValue));
     m_ScreenMatchModeField.RegisterCallback <ChangeEvent <Enum> >(evt =>
                                                                   UpdateScreenMatchModeValues((PanelScreenMatchModes)evt.newValue));
     m_ClearColorField.RegisterCallback <ChangeEvent <bool> >(evt =>
                                                              UpdateColorClearValue(evt.newValue));
     m_SortOrderField.RegisterCallback <ChangeEvent <float> >(evt => SetSortOrder(evt));
 }
        void AddField(Vector4 initialValue, int index, string subLabel)
        {
            var dummy = new VisualElement {
                name = "dummy"
            };
            var label = new Label(subLabel);

            dummy.Add(label);
            Add(dummy);
            var field = new FloatField {
                userData = index, value = initialValue[index]
            };
            var dragger = new FieldMouseDragger <float>(field);

            dragger.SetDragZone(label);
            field.RegisterValueChangedCallback(evt =>
            {
                var value    = _get();
                value[index] = (float)evt.newValue;
                _set(value);
                _nodeEditor.SetDirty();
                _undoGroup = -1;
            });
            field.RegisterCallback <InputEvent>(evt =>
            {
                if (_undoGroup == -1)
                {
                    _undoGroup = Undo.GetCurrentGroup();
                    _nodeEditor.Owner.LogicGraphEditorObject.RegisterCompleteObjectUndo("Change " + _nodeEditor.NodeType());
                }
                if (!float.TryParse(evt.newData, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out var newValue))
                {
                    newValue = 0f;
                }
                var value = _get();
                if (Math.Abs(value[index] - newValue) > 1e-9)
                {
                    value[index] = newValue;
                    _set(value);
                    _nodeEditor.SetDirty();
                }
            });
            field.RegisterCallback <KeyDownEvent>(evt =>
            {
                if (evt.keyCode == KeyCode.Escape && _undoGroup > -1)
                {
                    Undo.RevertAllDownToGroup(_undoGroup);
                    _undoGroup = -1;
                    evt.StopPropagation();
                }
                MarkDirtyRepaint();
            });
            Add(field);
        }
示例#11
0
    public PlanetSubEditor(OrbitLineSubEditor orbitLineSubEditor, Planet planet)
    {
        this.orbitLineSubEditor = orbitLineSubEditor;
        this.planet             = planet;

        VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Examples/StarSystemScene/Scripts/Editor/StarSystemEditor/PlanetSubEditor.uxml");

        visualTree.CloneTree(this);

        StyleSheet stylesheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/Examples/StarSystemScene/Scripts/Editor/StarSystemEditor/PlanetSubEditor.uss");

        this.styleSheets.Add(stylesheet);

        this.AddToClassList("planetSubeditor");

        #region Fields
        TextField nameField = this.Query <TextField>("planetName").First();
        nameField.value = planet.name;
        nameField.RegisterCallback <ChangeEvent <string> >(
            e =>
        {
            planet.name = (string)e.newValue;
            EditorUtility.SetDirty(planet);
        }
            );

        FloatField scaleField = this.Query <FloatField>("planetScale").First();
        scaleField.value = planet.scale;
        scaleField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            planet.scale = e.newValue;
            EditorUtility.SetDirty(planet);
        }
            );

        FloatField speedField = this.Query <FloatField>("planetSpeed").First();
        speedField.value = planet.speed;
        speedField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            planet.speed = e.newValue;
            EditorUtility.SetDirty(planet);
        }
            );

        #endregion

        #region Buttons
        Button btnRemovePlanet = this.Query <Button>("btnRemove").First();
        btnRemovePlanet.clickable.clicked += RemovePlanet;
        #endregion
    }
    void SetWindSetArtistTool()
    {
        VisualElement root = rootVisualElement;

        root.Clear();
        //Loads and clones our VisualTree inside the root.
        VisualTreeAsset quickToolVisualTree = Resources.Load <VisualTreeAsset>("WindArtistTool");

        quickToolVisualTree.CloneTree(root);
        root.styleSheets.Add(Resources.Load <StyleSheet>("WindArtistTool"));



        #region Wind Shader
        // Set Initial Values
        VisualElement windComponent = root.Q <VisualElement>(name: "Wind");
        if (windComponent != null)
        {
            Vector4Field windDirectionQuaternion = windComponent.Q <Vector4Field>(name: "WindDirection");
            windDirectionQuaternion.value = GetWindDirection();

            FloatField windScaleFloat = windComponent.Q <FloatField>(name: "WindScale");
            windScaleFloat.value = GetWindScale();

            MinMaxValue minMaxStrength = GetWindStrength();

            VisualElement windStrengthHolder = windComponent.Q <VisualElement>(name: "WinStrengthHolder");

            MinMaxSlider windStrengthSlider = windStrengthHolder.Q <MinMaxSlider>(name: "WindStrength");
            windStrengthSlider.highLimit = minMaxStrength.HighLimit;
            windStrengthSlider.lowLimit  = minMaxStrength.LowLimit;
            windStrengthSlider.value     = new Vector2(minMaxStrength.minValue, minMaxStrength.maxValue);

            windStrengthHolder.Q <Label>(name: "MinValue").text = "Min Value :" + minMaxStrength.minValue;
            windStrengthHolder.Q <Label>(name: "MaxValue").text = "Max Value :" + minMaxStrength.maxValue;

            FloatField windSpeedFloat = windComponent.Q <FloatField>(name: "WindSpeed");
            windSpeedFloat.value = GetWindSpeed();

            //Set Callbacks values
            windDirectionQuaternion.RegisterCallback <ChangeEvent <Vector4> >(ChangeWindDirection);
            windScaleFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindScale);
            windStrengthSlider.RegisterCallback <ChangeEvent <Vector2> >(ChangeWindStrength);
            windSpeedFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindSpeed);
        }

        #endregion

        root.Q <Button>(name: "SaveButton").clicked  += SaveButton;
        root.Q <Button>(name: "ResetButton").clicked += ResetToInitialSceneValues;
    }
        protected override void SetBaseVisualElement(VisualElement visualElement)
        {
            VisualElement nameField = new TextField("Name")
            {
                value = Blueprint.PointData.PointName
            };

            nameField.RegisterCallback <ChangeEvent <string> >(evt => Blueprint.PointData.SetName(evt.newValue));
            visualElement.Add(nameField);

            visualElement.Add(new ValidatorField(Blueprint.PointData.NameNotEmptyValidator));
            visualElement.Add(new ValidatorField(Blueprint.PointData.NameUniquenessValidator));
            visualElement.Add(new ValidatorField(Blueprint.PointData.PositionUniquenessValidator));

            visualElement.Add(new ChoseShapeDataField <PointData>(
                                  Blueprint.ShapeDataFactory,
                                  Blueprint,
                                  "Source Point: ",
                                  () => Blueprint.SourcePoint,
                                  pointData => Blueprint.SetSourcePoint(pointData)));
            visualElement.Add(new ChoseShapeDataField <PointData>(
                                  Blueprint.ShapeDataFactory,
                                  Blueprint,
                                  "Second point: ",
                                  () => Blueprint.SecondPoint,
                                  pointData => Blueprint.SetSecondPoint(pointData)));
            visualElement.Add(new ValidatorField(Blueprint.PointsNotSameValidator));
            visualElement.Add(new ChoseShapeDataField <PointData>(
                                  Blueprint.ShapeDataFactory,
                                  Blueprint,
                                  "Third point: ",
                                  () => Blueprint.ThirdPoint,
                                  pointData => Blueprint.SetThirdPoint(pointData)));

            FloatField coefficient1Field = new FloatField("Coefficient1: ")
            {
                value = Blueprint.Coefficient1
            };

            coefficient1Field.RegisterCallback <ChangeEvent <float> >(evt => Blueprint.SetCoefficient1(evt.newValue));
            visualElement.Add(coefficient1Field);

            FloatField coefficient2Field = new FloatField("Coefficient2: ")
            {
                value = Blueprint.Coefficient2
            };

            coefficient2Field.RegisterCallback <ChangeEvent <float> >(evt => Blueprint.SetCoefficient2(evt.newValue));
            visualElement.Add(coefficient2Field);
        }
示例#14
0
    public override VisualElement CreateInspectorGUI()
    {
        #region Fields
        // Find the visual element with the name "systemSprite" and make it display the star system sprite if it has one.
        VisualElement systemSprite = rootElement.Query <VisualElement>("systemSprite").First();
        systemSprite.style.backgroundImage = starSystem.sprite ? starSystem.sprite.texture : null;

        // Find an object field with the name "systemSpriteField", set that it only accepts objects of type Sprite,
        // set its initial value and register a callback that will occur if the value of the filed changes.
        ObjectField spriteField = rootElement.Query <ObjectField>("systemSpriteField").First();
        spriteField.objectType = typeof(Sprite);
        spriteField.value      = starSystem.sprite;
        spriteField.RegisterCallback <ChangeEvent <Object> >(
            e =>
        {
            starSystem.sprite = (Sprite)e.newValue;
            systemSprite.style.backgroundImage = starSystem.sprite.texture;
            // Set StarSystem as being dirty. This tells the editor that there have been changes made to the asset and that it requires a save.
            EditorUtility.SetDirty(starSystem);
        }
            );

        FloatField scaleField = rootElement.Query <FloatField>("starScale").First();
        scaleField.value = starSystem.scale;
        scaleField.RegisterCallback <ChangeEvent <float> >(
            e => {
            starSystem.scale = e.newValue;
            EditorUtility.SetDirty(starSystem);
        }
            );
        #endregion

        #region Display Planet Data
        // Store visual element that will contain the planet sub-inspectors.
        planetList = rootElement.Query <VisualElement>("planetList").First();
        UpdatePlanets();
        #endregion

        #region Buttons
        // Assign methods to the click events of the two buttons.
        Button btnAddPlanet = rootElement.Query <Button>("btnAddNew").First();
        btnAddPlanet.clickable.clicked += AddPlanet;

        Button btnRemoveAllPlanets = rootElement.Query <Button>("btnRemoveAll").First();
        btnRemoveAllPlanets.clickable.clicked += RemoveAll;
        #endregion

        return(rootElement);
    }
示例#15
0
        protected override void SetBaseVisualElement(VisualElement visualElement)
        {
            m_VerticesCountField = new IntegerField("Vertices Count: ")
            {
                value = Blueprint.VerticesAtTheBaseCount
            };
            m_VerticesCountField.RegisterCallback <ChangeEvent <int> >(evt => SetVerticesCount(evt.newValue));
            visualElement.Add(m_VerticesCountField);
            visualElement.Add(m_CantChangeVerticesCount);

            Vector3Field originField = new Vector3Field("Origin: ")
            {
                value = Blueprint.Origin
            };

            originField.RegisterCallback <ChangeEvent <Vector3> >(evt => Blueprint.SetOrigin(evt.newValue));
            visualElement.Add(originField);

            Vector3Field offsetField = new Vector3Field("Offset: ")
            {
                value = Blueprint.Offset
            };

            offsetField.RegisterCallback <ChangeEvent <Vector3> >(evt => Blueprint.SetOffset(evt.newValue));
            visualElement.Add(offsetField);

            FloatField radiusField = new FloatField("Radius: ")
            {
                value = Blueprint.Radius
            };

            radiusField.RegisterCallback <ChangeEvent <float> >(evt => Blueprint.SetRadius(evt.newValue));
            visualElement.Add(radiusField);
            // visualElement.Add(new ValidatorField(Blueprint.NonZeroVolumeValidator));

            Label namesLabel = new Label("Points Names");

            namesLabel.AddToClassList("sub-header");
            visualElement.Add(namesLabel);

            m_PointNameFields = new VisualElement();
            visualElement.Add(m_PointNameFields);

            Blueprint.DependenciesUpdated.Subscribe(UpdateVerticesCountFieldAvailability);
            UpdateVerticesCountFieldAvailability();
            UpdatePointNameFields();
        }
示例#16
0
        public VFXFloatSliderField()
        {
            m_Slider = new Slider(0, 1, ValueChanged, SliderDirection.Horizontal, (range.y - range.x) * 0.1f);
            m_Slider.AddToClassList("textfield");
            m_Slider.valueChanged += ValueChanged;

            m_FloatField = new FloatField();
            m_FloatField.RegisterCallback <ChangeEvent <float> >(ValueChanged);
            m_FloatField.name = "Field";
            m_Field           = m_FloatField;

            m_IndeterminateLabel = new Label()
            {
                name = "indeterminate",
                text = VFXControlConstants.indeterminateText
            };
            m_IndeterminateLabel.SetEnabled(false);

            Add(m_Slider);
            Add(m_FloatField);
            RegisterCallBack();
        }
示例#17
0
    void SetArtistTool()
    {
        VisualElement root = rootVisualElement;

        root.Clear();
        VisualTreeAsset ArtistToolVisualTree = Resources.Load <VisualTreeAsset>("ArtistTool");

        ArtistToolVisualTree.CloneTree(root);
        root.styleSheets.Add(Resources.Load <StyleSheet>("ArtistTool"));

        SerializedObject Tso        = new SerializedObject(TimeController);
        Slider           timeSlider = root.Q <Slider>(name: "Time");

        timeSlider.Bind(Tso);


        #region SkyColor
        VisualElement gradientVisualElement = root.Q <VisualElement>(name: "SkyGradient");

        if (gradientVisualElement != null)
        {
            GradientField gradientField = gradientVisualElement.Q <GradientField>();

            if (gradientField != null)
            {
                skyColorSetter = GameObject.Find("Light - Sky").GetComponent <MaterialColorSetter>();
                SerializedObject serialized_MaterialSetter = new SerializedObject(skyColorSetter);
                gradientField.bindingPath = "gradient";
                gradientField.Bind(serialized_MaterialSetter);
                gradientVisualElement.Q <Label>().text = "Sky Gradient";
            }
        }

        #endregion

        #region Ruins
        GradientEditorSetter("RuinsGradient", "Ruins Gradient", RuinsColorSetter);
        #endregion

        #region Trees
        GradientEditorSetter("TreesGradient", "Trees Gradient", TreesColorSetter);
        #endregion

        #region Rim
        GradientEditorSetter("RimColor", "Rim Gradient", RimColorSetter);
        #endregion



        #region Lights

        #region SunLights
        SerializedObject serialized_SunSpot = new SerializedObject(SunSpot_Group);

        VisualElement sunLightVisualElement = root.Q <VisualElement>(name: "Sunlight");
        if (sunLightVisualElement.Q <VisualElement>(name: "LightGradient") != null)
        {
            GradientField sunLightGradient  = sunLightVisualElement.Q <VisualElement>(name: "LightGradient").Q <GradientField>();
            FloatField    sunLightIntensity = root.Q <FloatField>(name: "Intensity");
            if (sunLightGradient != null)
            {
                sunLightGradient.bindingPath = "gradient";
                sunLightGradient.Bind(serialized_SunSpot);
                sunLightGradient.label = "Gradient";
            }

            sunLightIntensity.value = GetSpotLightIntensity();
            sunLightIntensity.RegisterCallback <ChangeEvent <float> >(ChangeIntensitySpotLightsEvent);
        }

        #endregion

        #region GrassLight
        SerializedObject serialized_GrassLight_Group = new SerializedObject(GrassLight_Group);

        VisualElement grassLightVisualElement = root.Q <VisualElement>(name: "GrassLight");
        if (grassLightVisualElement.Q <VisualElement>(name: "LightGradient") != null)
        {
            GradientField grassLightGradient  = grassLightVisualElement.Q <VisualElement>(name: "LightGradient").Q <GradientField>();
            FloatField    grassLightIntensity = grassLightVisualElement.Q <FloatField>(name: "Intensity");

            if (grassLightGradient != null)
            {
                grassLightGradient.bindingPath = "gradient";
                grassLightGradient.Bind(serialized_GrassLight_Group);
                grassLightGradient.label = "Gradient";
            }

            grassLightIntensity.value = GrassLight.intensity;

            SerializedObject serialized_GrassLight = new SerializedObject(GrassLight);
            grassLightIntensity.Bind(serialized_GrassLight);
        }
        #endregion

        #region cave Light
        SerializedObject serialized_CaveHoleLight = new SerializedObject(CaveHoleLight);

        VisualElement caveLightVisualElement = root.Q <VisualElement>(name: "CaveHoleLight");
        caveLightVisualElement.Q <FloatField>(name: "Falloff").Bind(serialized_CaveHoleLight);

        Slider     fallOffSlider = caveLightVisualElement.Q <Slider>(name: "FalloffIntencity");
        FloatField fallOffField  = fallOffSlider.Q <FloatField>(name: "CurrentValue");
        fallOffSlider.Bind(serialized_CaveHoleLight);

        fallOffField.SetValueWithoutNotify(CaveHoleLight.falloffIntensity);

        fallOffField.RegisterCallback <ChangeEvent <float> >((evt) => fallOffSlider.value = evt.newValue);

        fallOffSlider.RegisterCallback <ChangeEvent <float> >((evt) => fallOffField.SetValueWithoutNotify(evt.newValue));

        #endregion

        #region Visualisers
        var AllGradientElements = root.Query <GradientField>();
        AllGradientElements.ForEach((element) =>
        {
            //registerCallback for Gradient to apply changes on scene
            element.RegisterCallback <ChangeEvent <Gradient> >(ChangeGradientEvent);

            VisualElement visualiser = element.Q <VisualElement>(name: "VisualisationColor");

            //Init color of visualisation cube
            float currentTime = TimeController.timeValue;
            visualiser.style.backgroundColor = element.value.Evaluate(currentTime);

            //register Callback for each visualisation cube when gradient Changes
            element.RegisterCallback <ChangeEvent <Gradient> >((evt) =>
            {
                float timeOfChange = TimeController.timeValue;
                visualiser.style.backgroundColor = evt.newValue.Evaluate(currentTime);
            });

            //register Callback for each visualisation cube when Time Changes
            timeSlider.RegisterCallback <ChangeEvent <float> >((evt) =>
            {
                visualiser.style.backgroundColor = element.value.Evaluate(evt.newValue);
            });
        });
        #endregion

        #endregion

        #region Wind Shader
        // Set Initial Values
        VisualElement windComponent = root.Q <VisualElement>(name: "Wind");
        if (windComponent != null)
        {
            Vector4Field windDirectionQuaternion = windComponent.Q <Vector4Field>(name: "WindDirection");
            windDirectionQuaternion.value = GetWindDirection();

            FloatField windScaleFloat = windComponent.Q <FloatField>(name: "WindScale");
            windScaleFloat.value = GetWindScale();

            MinMaxValue minMaxStrength = GetWindStrength();

            VisualElement windStrengthHolder = windComponent.Q <VisualElement>(name: "WinStrengthHolder");

            MinMaxSlider windStrengthSlider = windStrengthHolder.Q <MinMaxSlider>(name: "WindStrength");
            windStrengthSlider.highLimit = minMaxStrength.HighLimit;
            windStrengthSlider.lowLimit  = minMaxStrength.LowLimit;
            windStrengthSlider.value     = new Vector2(minMaxStrength.minValue, minMaxStrength.maxValue);

            windStrengthHolder.Q <Label>(name: "MinValue").text = "Min Value :" + minMaxStrength.minValue;
            windStrengthHolder.Q <Label>(name: "MaxValue").text = "Max Value :" + minMaxStrength.maxValue;

            FloatField windSpeedFloat = windComponent.Q <FloatField>(name: "WindSpeed");
            windSpeedFloat.value = GetWindSpeed();

            //Set Callbacks values
            windDirectionQuaternion.RegisterCallback <ChangeEvent <Vector4> >(ChangeWindDirection);
            windScaleFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindScale);
            windStrengthSlider.RegisterCallback <ChangeEvent <Vector2> >(ChangeWindStrength);
            windSpeedFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindSpeed);
        }

        #endregion

        #region Postprocessing
        #region WhiteBalance
        //serialize White balance property
        SerializedObject serialized_whiteBalanceProperty = new SerializedObject(whiteBalanceProperty);
        //Get White balance Visual Element
        VisualElement whiteBalanceVisualElement = root.Q <VisualElement>(name: "WhiteBalance");

        #region Temperature
        //Get White Balance temperature Visual Element
        VisualElement whiteBalanceTemperatureVE = whiteBalanceVisualElement.Q <VisualElement>(name: "Temperature");

        //Get White Balance temperature Slider
        Slider whiteBalanceTemperatureSlider = whiteBalanceTemperatureVE.Q <Slider>(name: "SliderValue");

        //Bind Slider to value
        whiteBalanceTemperatureSlider.bindingPath = "temperature.m_Value";
        whiteBalanceTemperatureSlider.Bind(serialized_whiteBalanceProperty);

        //Get White Balance temperature Float Field
        FloatField whiteBalanceTemperatureFloat = whiteBalanceTemperatureVE.Q <FloatField>(name: "CurrentValue");
        //Set default Temperature
        whiteBalanceTemperatureFloat.SetValueWithoutNotify(whiteBalanceProperty.temperature.value);

        //Register change callback for the float field to change the slider value. Changing slider value will change the values bound with it.
        whiteBalanceTemperatureFloat.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTemperatureSlider.value = evt.newValue);

        //Register change Callback for the slider, to change the float fiel Without notification (to avoid triggering Float field callback)
        whiteBalanceTemperatureSlider.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTemperatureFloat.SetValueWithoutNotify(evt.newValue));
        #endregion

        #region Tint

        //Get White Balance Tint Visual Element
        VisualElement whiteBalanceTintVE = whiteBalanceVisualElement.Q <VisualElement>(name: "Tint");

        //Get White Balance Tint Slider
        Slider whiteBalanceTintSlider = whiteBalanceTintVE.Q <Slider>(name: "SliderValue");

        //Bind Slider to value
        whiteBalanceTintSlider.bindingPath = "tint.m_Value";
        whiteBalanceTintSlider.Bind(serialized_whiteBalanceProperty);

        //Get White Balance Tint Float Field
        FloatField whiteBalanceTintFloat = whiteBalanceTintVE.Q <FloatField>(name: "CurrentValue");
        //Set default Tint
        whiteBalanceTintFloat.SetValueWithoutNotify(whiteBalanceProperty.tint.value);

        //Register change callback for the float field to change the slider value. Changing slider value will change the values bound with it.
        whiteBalanceTintFloat.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTintSlider.value = evt.newValue);

        //Register change Callback for the slider, to change the float fiel Without notification (to avoid triggering Float field callback)
        whiteBalanceTintSlider.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTintFloat.SetValueWithoutNotify(evt.newValue));
        #endregion

        #endregion

        #region Bloom

        //serialize bloom property
        SerializedObject serialized_BloomProperty = new SerializedObject(BloomProperty);
        //Get Bloom Visual Element
        VisualElement bloomVisualElement = root.Q <VisualElement>(name: "Bloom");

        //Get Bloom Tint Color
        ColorField bloomTint = bloomVisualElement.Q <ColorField>(name: "Tint");

        //Bind color to value
        bloomTint.bindingPath = "tint.m_Value";
        bloomTint.Bind(serialized_BloomProperty);

        //Get Bloom Intensity
        FloatField bloomIntensity = bloomVisualElement.Q <FloatField>(name: "Intensity");

        //Bind Intensity to value
        bloomIntensity.Bind(serialized_BloomProperty);

        #endregion
        #endregion


        #region VFX

        SerializedObject serialized_GlowParticleSystem = new SerializedObject(GlowParticleSystem);

        VisualElement VFXVisualElement = root.Q <VisualElement>(name: "VFX");


        VFXVisualElement.Q <FloatField>(name: "Emission").bindingPath = "EmissionModule.rateOverTime.scalar";
        VFXVisualElement.Q <FloatField>(name: "Emission").Bind(serialized_GlowParticleSystem);

        VFXVisualElement.Q <EnumField>(name: "RenderMode").Init(GlowParticleSystem.GetComponent <ParticleSystemRenderer>().renderMode);
        VFXVisualElement.Q <EnumField>(name: "RenderMode").RegisterCallback <ChangeEvent <string> >(ChangeRenderMode);

        VFXVisualElement.Q <ObjectField>(name: "Material").objectType = typeof(Material);
        VFXVisualElement.Q <ObjectField>(name: "Material").RegisterCallback <ChangeEvent <string> >(ChangeRenderMaterial);
        #endregion

        root.Q <Button>(name: "SaveButton").clicked  += SaveButton;
        root.Q <Button>(name: "ResetButton").clicked += ResetToInitialSceneValues;
    }
        public static VisualElement CreateFieldBasedOnType(ConfiguratorValueType _valueType, object _initialValue, string _label, System.Action _changeEventCallback)
        {
            switch (_valueType)
            {
            case ConfiguratorValueType.BOOL:
                Toggle newToggle = new Toggle(_label)
                {
                    value = _initialValue.StructConvertTo <bool>()
                };
                newToggle.RegisterCallback <ChangeEvent <bool> >(_event => _changeEventCallback?.Invoke());
                return(newToggle);

            case ConfiguratorValueType.INT:
                IntegerField newIntegerField = new IntegerField(_label)
                {
                    value = _initialValue.StructConvertTo <int>()
                };
                newIntegerField.RegisterCallback <ChangeEvent <int> >(_event => _changeEventCallback?.Invoke());
                return(newIntegerField);

            case ConfiguratorValueType.FLOAT:
                FloatField newFloatField = new FloatField(_label)
                {
                    value = _initialValue.StructConvertTo <float>()
                };
                newFloatField.RegisterCallback <ChangeEvent <float> >(_event => _changeEventCallback?.Invoke());
                return(newFloatField);

            case ConfiguratorValueType.STRING:
                string    castValue    = _initialValue.TryConvertTo <string>();
                TextField newTextField = new TextField(_label)
                {
                    value = castValue ?? string.Empty
                };
                newTextField.RegisterCallback <ChangeEvent <string> >(_event => _changeEventCallback?.Invoke());
                return(newTextField);

            case ConfiguratorValueType.VECTOR2:
                Vector2Field newVector2Field = new Vector2Field(_label)
                {
                    value = _initialValue.StructConvertTo <Vector2>()
                };
                newVector2Field.RegisterCallback <ChangeEvent <Vector2> >(_event => _changeEventCallback?.Invoke());
                return(newVector2Field);

            case ConfiguratorValueType.VECTOR3:
                Vector3Field newVector3Field = new Vector3Field(_label)
                {
                    value = _initialValue.StructConvertTo <Vector3>()
                };
                newVector3Field.RegisterCallback <ChangeEvent <Vector3> >(_event => _changeEventCallback?.Invoke());
                return(newVector3Field);

            case ConfiguratorValueType.VECTOR2INT:
                Vector2IntField newVector2IntField = new Vector2IntField(_label)
                {
                    value = _initialValue.StructConvertTo <Vector2Int>()
                };
                newVector2IntField.RegisterCallback <ChangeEvent <Vector2Int> >(_event => _changeEventCallback?.Invoke());
                return(newVector2IntField);

            case ConfiguratorValueType.VECTOR3INT:
                Vector3IntField newVector3IntField = new Vector3IntField(_label)
                {
                    value = _initialValue.StructConvertTo <Vector3Int>()
                };
                newVector3IntField.RegisterCallback <ChangeEvent <Vector3Int> >(_event => _changeEventCallback?.Invoke());
                return(newVector3IntField);

            default:
                return(null);
            }
        }
示例#19
0
        public void OnEnable()
        {
            VisualElement root = rootVisualElement;
            VisualElement vt   = Resources.Load <VisualTreeAsset>("Editor/SDFWizardMarkup").Instantiate();

            vt.styleSheets.Add(Resources.Load <StyleSheet>("Editor/SDFWizardStyle"));
            root.Add(vt);
            Label        dLabel         = vt.Q <Label>         (null, "dLabel");
            Image        dropBox        = vt.Q <Image>         ("DropBox");
            SliderInt    sizeSlider     = vt.Q <SliderInt>     ("SizeSlider");
            IntegerField sizeField      = vt.Q <IntegerField>  ("SizeField");
            Slider       tresholdSlider = vt.Q <Slider>        ("TresholdSlider");
            FloatField   tresholdField  = vt.Q <FloatField>    ("TresholdField");
            SliderInt    sampleSlider   = vt.Q <SliderInt>     ("SampleSlider");
            IntegerField sampleField    = vt.Q <IntegerField>  ("SampleField");
            EnumField    channelSelect  = vt.Q <EnumField>     ("ChannelSelect");
            Box          channelDisplay = vt.Q <Box>           ("ChannelDisplay");
            EnumField    modeSelect     = vt.Q <EnumField>     ("RenderingSelect");
            EnumField    tilingSelect   = vt.Q <EnumField>     ("TilingSelect");

            channelSelect.Init(WizardUtils.ColorChannel.Alpha);
            modeSelect.Init(SDFConverter.RenderingMode.DistanceOnly);
            tilingSelect.Init(TextureWrapMode.Repeat);
            bool validated = false;

            dropBox.RegisterCallback <DragEnterEvent>((e) =>
            {
                foreach (var item in DragAndDrop.objectReferences)
                {
                    if (item.GetType() == typeof(Texture2D))
                    {
                        validated = true;
                    }
                }
                dropBox.tintColor  = validated ? new Color(.6f, .94f, .2f) : new Color(.94f, .3f, .2f);
                dLabel.style.color = validated ? new Color(.6f, .94f, .2f) : new Color(.94f, .3f, .2f);
            });

            dropBox.RegisterCallback <DragUpdatedEvent>((e) =>
            {
                if (validated)
                {
                    DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                }
            });

            dropBox.RegisterCallback <DragPerformEvent>((e) =>
            {
                if (validated)
                {
                    for (int i = 0; i < DragAndDrop.objectReferences.Length; i++)
                    {
                        var item    = (UnityEngine.Object)DragAndDrop.objectReferences[i];
                        string path = DragAndDrop.paths[i];
                        if (item.GetType() == typeof(Texture2D))
                        {
                            string newPath    = path.Substring(0, path.LastIndexOf(".")) + "_SDF.png";
                            string systemPath = Application.dataPath.Substring(0, Application.dataPath.Length - 6) + newPath;
                            var texture       = item as Texture2D;
                            texture.wrapMode  = (TextureWrapMode)tilingSelect.value;
                            var outData       = SDFConverter.RenderSDF(texture, sizeField.value, tresholdField.value, sampleField.value, channelSelect.value, modeSelect.value);
                            System.IO.File.WriteAllBytes(systemPath, outData.EncodeToPNG());
                            AssetDatabase.Refresh();
                            var importer         = (TextureImporter)AssetImporter.GetAtPath(newPath);
                            var importerSettings = new TextureImporterSettings();
                            ((TextureImporter)AssetImporter.GetAtPath(path)).ReadTextureSettings(importerSettings);
                            importer.SetTextureSettings(importerSettings);
                            importer.sRGBTexture       &= modeSelect.value.Equals(SDFConverter.RenderingMode.RGBDistance);
                            importer.textureCompression = TextureImporterCompression.Uncompressed;
                            importer.SaveAndReimport();
                            AssetDatabase.ImportAsset(newPath);
                        }
                    }
                }
            });

            dropBox.RegisterCallback <DragExitedEvent>((e) =>
            {
                validated          = false;
                dropBox.tintColor  = Color.white;
                dLabel.style.color = Color.white;
            });

            dropBox.RegisterCallback <DragLeaveEvent>((e) =>
            {
                validated          = false;
                dropBox.tintColor  = Color.white;
                dLabel.style.color = Color.white;
            });

            sizeSlider.RegisterCallback <ChangeEvent <int> >((e) =>
            {
                sizeField.value = 2 << e.newValue;
            });

            sizeField.RegisterCallback <ChangeEvent <int> >((e) =>
            {
                int c = 0;
                int v = e.newValue;
                while (v > 2)
                {
                    c++; v >>= 1;
                }
                sizeSlider.value = c;
                sizeField.value  = 2 << c;
            });

            tresholdSlider.RegisterCallback <ChangeEvent <float> >((e) =>
            {
                tresholdField.value = 1f - e.newValue;
            });

            tresholdField.RegisterCallback <ChangeEvent <float> >((e) =>
            {
                tresholdSlider.value = 1f - e.newValue;
            });
            sampleSlider.RegisterCallback <ChangeEvent <int> >((e) =>
            {
                sampleField.value = e.newValue;
            });

            sampleField.RegisterCallback <ChangeEvent <int> >((e) =>
            {
                sampleSlider.value = e.newValue;
            });

            channelSelect.RegisterCallback <ChangeEvent <Enum> >((e) =>
            {
                switch (e.newValue)
                {
                case WizardUtils.ColorChannel.Red:
                    channelDisplay.style.backgroundColor = new Color(.94f, .3f, .2f);
                    break;

                case WizardUtils.ColorChannel.Green:
                    channelDisplay.style.backgroundColor = new Color(.6f, .94f, .2f);
                    break;

                case WizardUtils.ColorChannel.Blue:
                    channelDisplay.style.backgroundColor = new Color(.2f, .6f, .94f);
                    break;

                case WizardUtils.ColorChannel.Alpha:
                    channelDisplay.style.backgroundColor = Color.grey;
                    break;

                default:
                    channelDisplay.style.backgroundColor = Color.white;
                    break;
                }
            });
        }
 private void BindFields()
 {
     m_ParentField.RegisterCallback <ChangeEvent <Object> >(evt => UpdateValues());
     m_PanelSettingsField.RegisterCallback <ChangeEvent <Object> >(evt => UpdateValues());
     m_SortOrderField.RegisterCallback <ChangeEvent <float> >(evt => SetSortOrder(evt));
 }
示例#21
0
        FloatField AddField(VisualElement panel, Slider slider, int index, DielectricSpecularNode.DielectricMaterial initMaterial)
        {
            float initValue;

            if (index == 1)
            {
                initValue = initMaterial.indexOfRefraction;
            }
            else
            {
                initValue = initMaterial.range;
            }

            var field = new FloatField {
                userData = index, value = initValue
            };

            field.RegisterCallback <MouseDownEvent>(Repaint);
            field.RegisterCallback <MouseMoveEvent>(Repaint);
            field.OnValueChanged(evt =>
            {
                var value      = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);
                var fieldValue = (float)evt.newValue;
                if (index == 1)
                {
                    value.indexOfRefraction = fieldValue;
                    RedrawIORControls(fieldValue);
                }
                else
                {
                    value.range = fieldValue;
                    RedrawRangeControls(fieldValue);
                }
                m_PropertyInfo.SetValue(m_Node, value, null);
                m_UndoGroup = -1;
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <InputEvent>(evt =>
            {
                if (m_UndoGroup == -1)
                {
                    m_UndoGroup = Undo.GetCurrentGroup();
                    m_Node.owner.owner.RegisterCompleteObjectUndo("Change " + m_Node.name);
                }
                float newValue;
                if (!float.TryParse(evt.newData, out newValue))
                {
                    newValue = 0f;
                }
                var value = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);
                if (index == 1)
                {
                    value.indexOfRefraction = newValue;
                }
                else
                {
                    value.range = newValue;
                }
                m_PropertyInfo.SetValue(m_Node, value, null);
                this.MarkDirtyRepaint();
            });
            field.RegisterCallback <KeyDownEvent>(evt =>
            {
                if (evt.keyCode == KeyCode.Escape && m_UndoGroup > -1)
                {
                    Undo.RevertAllDownToGroup(m_UndoGroup);
                    m_UndoGroup = -1;
                    var value   = (DielectricSpecularNode.DielectricMaterial)m_PropertyInfo.GetValue(m_Node, null);
                    if (index == 1)
                    {
                        RedrawIORControls(value.indexOfRefraction);
                    }
                    else
                    {
                        RedrawRangeControls(value.range);
                    }
                    evt.StopPropagation();
                }
                this.MarkDirtyRepaint();
            });
            panel.Add(field);
            return(field);
        }
示例#22
0
    public DelegateEntryEditor(ExposedDelegateEditor exposedDelegateEditor, DelegateEntry delegateEntry)
    {
        this.exposedDelegateEditor = exposedDelegateEditor;
        this.delegateEntry         = delegateEntry;

        VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/UtilityAI/Scripts/Editor/Delegate Entry Editor/DelegateEntryEditor.uxml");

        visualTree.CloneTree(this);

        StyleSheet stylesheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/UtilityAI/Scripts/Editor/Delegate Entry Editor/DelegateEntryEditor.uss");

        this.styleSheets.Add(stylesheet);

        this.AddToClassList("delegateEntryEditor");
        if (exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor.GetType() == typeof(UtilityAIAgentEditor))
        {
            UtilityAIAgentEditor editorWindow = (UtilityAIAgentEditor)exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor;
            if (delegateEntry.TargetGO != editorWindow.utilityAIAgent.gameObject)
            {
                delegateEntry.TargetGO = editorWindow.utilityAIAgent.gameObject;
            }
        }

        delegateEntryFoldout = this.Query <Foldout>("delegateEntry");

        delegateEntryFoldout.Query <Toggle>().First().AddToClassList("delegateEntryFoldout");

        Button moveUpButton = this.Query <Button>("moveUpButton").First();

        moveUpButton.BringToFront();
        moveUpButton.clickable.clicked += MoveEntryUp;

        Button moveDownButton = this.Query <Button>("moveDownButton").First();

        moveDownButton.BringToFront();
        moveDownButton.clickable.clicked += MoveEntryDown;

        Button deleteButton = this.Query <Button>("deleteButton").First();

        deleteButton.BringToFront();
        deleteButton.clickable.clicked += DeleteEntry;
        List <Component> components = new List <Component>();

        if (exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor is UtilityAIAgentEditor)
        {
            components = delegateEntry.TargetGO.GetComponents <Component>().ToList();
        }
        else if (exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor is UtilityAIActionSetEditor)
        {
            if (((UtilityAIActionSetEditor)exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor).utilityAIAgent.inheritingGameObject != null)
            {
                components = ((UtilityAIActionSetEditor)exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor).utilityAIAgent.inheritingGameObject.GetComponents <Component>().ToList();
            }
        }
        if (components.Count > 0)
        {
            int index = 0;
            if (delegateEntry.Target != null)
            {
                List <Component> sharedComponents = components.Where(o => o.GetType() == delegateEntry.Target.GetType()).ToList();
                if (sharedComponents.Count > 0)
                {
                    index = components.IndexOf(sharedComponents[0]);
                }
                else
                {
                    if (exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor is UtilityAIAgentEditor && ((UtilityAIAgentEditor)exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor).utilityAIAgent.actionSet != null)
                    {
                        ((UtilityAIAgentEditor)exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor).utilityAIAgent.MakeActionsSetUnique();
                        ((UtilityAIAgentEditor)exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor).CreateInspectorGUI();
                        return;
                    }
                }
            }
            PopupField <Component> targetComponentField = new PopupField <Component>("Component: ", components, index);

            delegateEntry.Target = targetComponentField.value;
            targetComponentField.RegisterCallback <ChangeEvent <Component> >(
                e =>
            {
                delegateEntry.Target = (Component)e.newValue;
                exposedDelegateEditor.UpdateDelegateEntries();
            }
                );
            delegateEntryFoldout.Add(targetComponentField);
            if (delegateEntry.Target != null)
            {
                Type         selectedComponentType = delegateEntry.Target.GetType();
                BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;
                //Get a list of methods attached to the component, and create a dropdown menu:
                List <MethodInfo>       methods           = selectedComponentType.GetMethods(flags).ToList();
                PopupField <MethodInfo> targetMethodField = new PopupField <MethodInfo>("Method: ", methods, methods.Contains(delegateEntry.Method) ? methods.IndexOf(delegateEntry.Method) : 0);
                if (delegateEntry.Method == null || delegateEntry.Method.Name != targetMethodField.value.Name)
                {
                    delegateEntry.SetMethod(selectedComponentType, targetMethodField.value.Name);
                }
                targetMethodField.RegisterCallback <ChangeEvent <MethodInfo> >(
                    e =>
                {
                    delegateEntry.SetMethod(selectedComponentType, e.newValue.Name);
                    exposedDelegateEditor.UpdateDelegateEntries();
                }
                    );
                delegateEntryFoldout.Add(targetMethodField);
                if (delegateEntry.Method != null && delegateEntry.Parameters.Length > 0)
                {
                    Foldout parametersFoldout = new Foldout();
                    parametersFoldout.text = "Parameters: ";

                    foreach (SerializableObject parameter in delegateEntry.Parameters)
                    {
                        if (parameter.obj is int)
                        {
                            IntegerField parameterField = new IntegerField();
                            parameterField.value = (int)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <int> >(
                                e =>
                            {
                                parameter.obj = (int)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is float)
                        {
                            FloatField parameterField = new FloatField();
                            parameterField.value = (float)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <float> >(
                                e =>
                            {
                                parameter.obj = (float)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is bool)
                        {
                            Toggle parameterField = new Toggle();
                            parameterField.value = (bool)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <bool> >(
                                e =>
                            {
                                parameter.obj = (bool)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is string)
                        {
                            TextField parameterField = new TextField();
                            parameterField.value = (string)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <string> >(
                                e =>
                            {
                                parameter.obj = (string)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is Vector3)
                        {
                            Vector3Field parameterField = new Vector3Field();
                            parameterField.value = (Vector3)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <Vector3> >(
                                e =>
                            {
                                parameter.obj = (Vector3)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is Vector2)
                        {
                            Vector2Field parameterField = new Vector2Field();
                            parameterField.value = (Vector2)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <Vector2> >(
                                e =>
                            {
                                parameter.obj = (Vector2)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is Bounds)
                        {
                            BoundsField parameterField = new BoundsField();
                            parameterField.value = (Bounds)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <Bounds> >(
                                e =>
                            {
                                parameter.obj = (Bounds)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is Rect)
                        {
                            RectField parameterField = new RectField();
                            parameterField.value = (Rect)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <Rect> >(
                                e =>
                            {
                                parameter.obj = (Rect)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is Color)
                        {
                            ColorField parameterField = new ColorField();
                            parameterField.value = (Color)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <Color> >(
                                e =>
                            {
                                parameter.obj = (Color)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                        else if (parameter.obj is UnityEngine.Object)
                        {
                            ObjectField parameterField = new ObjectField();
                            parameterField.value = (UnityEngine.Object)parameter.obj;
                            parameterField.RegisterCallback <ChangeEvent <UnityEngine.Object> >(
                                e =>
                            {
                                parameter.obj = (UnityEngine.Object)e.newValue;
                            }
                                );
                            parametersFoldout.Add(parameterField);
                        }
                    }

                    delegateEntryFoldout.Add(parametersFoldout);
                }
            }
        }

        if (delegateEntry.TargetGO != null)
        {
            delegateEntryFoldout.text += delegateEntry.TargetGO.name;
            if (delegateEntry.Target != null)
            {
                delegateEntryFoldout.text += "(" + delegateEntry.Target.GetType() + ") ";
                if (delegateEntry.Method != null)
                {
                    delegateEntryFoldout.text += delegateEntry.Method.Name;
                }
            }
            delegateEntryFoldout.text += ": ";
        }
        else
        {
            delegateEntryFoldout.text = "New Delegate Entry:";
        }
        if (exposedDelegateEditor.utilityAIActionEditor.utilityAIAgentEditor is UtilityAIActionSetEditor && components.Count <= 0)
        {
            delegateEntryFoldout.text = "No inheriting object selected!";
        }
    }
示例#23
0
    public ResponseCurveEditor(UtilityAIConsiderationEditor utilityAIConsiderationEditor, ResponseCurve responseCurve)
    {
        this.utilityAIConsiderationEditor = utilityAIConsiderationEditor;
        this.responseCurve = responseCurve;

        VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/UtilityAI/Scripts/Editor/Response Curve Editor/ResponseCurveEditor.uxml");

        visualTree.CloneTree(this);

        StyleSheet stylesheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/UtilityAI/Scripts/Editor/Response Curve Editor/ResponseCurveEditor.uss");

        this.styleSheets.Add(stylesheet);

        this.AddToClassList("responseCurveEditor");

        EnumField curveTypeField = this.Query <EnumField>("curveType").First();

        curveTypeField.Init(CurveType.Linear);
        curveTypeField.value = responseCurve.curveType;
        curveTypeField.RegisterCallback <ChangeEvent <Enum> >(
            e =>
        {
            responseCurve.curveType = (CurveType)e.newValue;
            utilityAIConsiderationEditor.UpdateResponseCurve();
        }
            );

        FloatField xShiftField = this.Query <FloatField>("xShift").First();

        xShiftField.value = responseCurve.xShift;
        xShiftField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            responseCurve.xShift = (float)e.newValue;
            utilityAIConsiderationEditor.UpdateResponseCurve();
        }
            );

        FloatField yShiftField = this.Query <FloatField>("yShift").First();

        yShiftField.value = responseCurve.yShift;
        yShiftField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            responseCurve.yShift = (float)e.newValue;
            utilityAIConsiderationEditor.UpdateResponseCurve();
        }
            );

        FloatField slopeField = this.Query <FloatField>("slope").First();

        slopeField.value = responseCurve.slope;
        slopeField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            responseCurve.slope = (float)e.newValue;
            utilityAIConsiderationEditor.UpdateResponseCurve();
        }
            );

        FloatField exponentialField = this.Query <FloatField>("exponential").First();

        exponentialField.value = responseCurve.exponential;
        exponentialField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            responseCurve.exponential = (float)e.newValue;
            utilityAIConsiderationEditor.UpdateResponseCurve();
        }
            );

        Box box = new Box()
        {
            style =
            {
                flexGrow     =   1,
                marginTop    =   5,
                marginBottom =   5,
                marginLeft   =   5,
                marginRight  =   5,
                height       = 300,
            }
        };

        this.Add(box);

        VisualElement meshContainer = new VisualElement()
        {
            style = { flexGrow = 1, }
        };

        box.Add(meshContainer);
        meshContainer.generateVisualContent += DrawGraph;
    }
示例#24
0
    private void Init()
    {
        var uiAsset = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Scripts/USS attempt/Editor/MyWindow.uxml");

        Layout = uiAsset.CloneTree();

        var myStyle = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/Scripts/USS attempt/Editor/MyStylesheet.uss");

        var myBox = new Box {
            name = "myBox"
        };

        myBox.AddToClassList("My_Fancy_box");

        input = new TextField("New Name");

        myBox.Add(input);

        var row = new VisualElement {
            name = "row"
        };

        row.Add(new Label("Position"));

        var x = new FloatField("x");
        var y = new FloatField("y");
        var z = new FloatField("z");

        x.RegisterCallback <ChangeEvent <float> >(l => pos.x = x.value);
        y.RegisterCallback <ChangeEvent <float> >(l => pos.y = y.value);
        z.RegisterCallback <ChangeEvent <float> >(l => pos.z = z.value);

        row.Add(x);
        row.Add(y);
        row.Add(z);

        myBox.Add(row);

        myBox.Q <TextField>().RegisterCallback <ChangeEvent <string> >(l => newName = (l.target as TextField).value);

        doTheThing = new Button();

        doTheThing.AddToClassList("Fancy__button");

        doTheThing.text = "Do the thing...";

        ///Button Click methods????\\\

        //doTheThing.clickable = new Clickable(delegate () { DoTheThing(); });


        //doTheThing.clickable = new Clickable(l => DoTheThing());


        //doTheThing.clickable = new Clickable(delegate () { DoTheThing(); }, 1, 1);


        //doTheThing.clickable.clicked += DoTheThing;


        //////Finally something worked
        doTheThing.clickable.clickedWithEventInfo += GoDoThatThing();


        ///Button Click methods????\\\

        myBox.Add(doTheThing);

        Layout.Add(myBox);

        rootVisualElement.styleSheets.Add(myStyle);

        rootVisualElement.Add(Layout);
    }
示例#25
0
        public void OpenProjectSettings(MProject project)
        {
            var ModalContent = this.ShowModalWindow("PROJECT SETTINGS");

            var NameField = new TextField("Project Name: ");

            NameField.value = project.ProjectName;
            ModalContent.Add(NameField);
            NameField.RegisterCallback <ChangeEvent <string> >((evt) =>
            {
                project.ProjectName = evt.newValue;
            });
            // Resolution Field.
            var resolutionField = new PopupField <string>("Resolution: ", ResNames, project.ResolutionIndex);

            //normalField.value = ResNames[0];
            ModalContent.Add(resolutionField);

            // Create a new field and assign it its value.
            var framerateField = new PopupField <string>("FrameRate: ", FPSNames, project.FrameRateIndex);

            ModalContent.Add(framerateField);

            var customResField = new Vector2IntField("Custom:");

            customResField.value         = new Vector2Int(project.OutputWidth, project.OutputHeight);
            customResField.style.display = (project.ResolutionIndex == CustomResIndex) ? DisplayStyle.Flex : DisplayStyle.None;

            ModalContent.Add(customResField);
            // Mirror value of uxml field into the C# field.
            resolutionField.RegisterCallback <ChangeEvent <string> >((evt) =>
            {
                project.ResolutionIndex = ResNames.IndexOf(evt.newValue);

                var size             = this.ResSizes[project.ResolutionIndex];
                project.OutputWidth  = (int)size.x;
                project.OutputHeight = (int)size.y;

                customResField.style.display = (project.ResolutionIndex == CustomResIndex)
                    ? DisplayStyle.Flex : DisplayStyle.None;

                project.is360       = _360Indices.Contains(project.ResolutionIndex);
                project.is360Stereo = (project.ResolutionIndex == _360StereoIndex);
            });
            framerateField.RegisterCallback <ChangeEvent <string> >((evt) =>
            {
                project.FrameRateIndex = FPSNames.IndexOf(evt.newValue);
                project.FrameRate      = this.FPSValues[project.FrameRateIndex];
            });

            customResField.RegisterCallback <ChangeEvent <Vector2Int> >((evt) =>
            {
                project.OutputWidth  = evt.newValue.x;
                project.OutputHeight = evt.newValue.y;
            });

            var toggleScreenShots = new Toggle("Capture ScreenShots:");

            toggleScreenShots.value = project.TakeScreenShots;
            ModalContent.Add(toggleScreenShots);

            var ScreenShotsInterval = new FloatField("ScreenShots Interval (sec): ");

            ScreenShotsInterval.value         = project.ScreenShotsInterval;
            ScreenShotsInterval.style.display = (project.TakeScreenShots) ? DisplayStyle.Flex : DisplayStyle.None;
            ModalContent.Add(ScreenShotsInterval);

            toggleScreenShots.RegisterCallback <ChangeEvent <bool> >((evt) =>
            {
                project.TakeScreenShots           = evt.newValue;
                ScreenShotsInterval.style.display = (project.TakeScreenShots) ? DisplayStyle.Flex : DisplayStyle.None;
            });

            ScreenShotsInterval.RegisterCallback <ChangeEvent <float> >((evt) =>
            {
                project.ScreenShotsInterval = evt.newValue;
            });

            var DeleteButton = new Button();

            DeleteButton.text     = "DELETE PROJECT";
            DeleteButton.clicked += () => {
                this.ShowConfirmDialog("Delete Project", "Are you sure?",
                                       (bool confirm) => {
                    if (confirm)
                    {
                        this.m_MainWindow.DeleteProject(project);
                    }
                    else
                    {
                        this.OpenProjectSettings(project);
                    }
                });
            };
            ModalContent.Add(DeleteButton);
        }
        public ChannelMixerControlView(string label, float minimum, float maximum, AbstractMaterialNode node, PropertyInfo propertyInfo)
        {
            m_Node         = node;
            m_PropertyInfo = propertyInfo;
            styleSheets.Add(Resources.Load <StyleSheet>("Styles/Controls/ChannelMixerControlView"));
            m_ChannelMixer = (ChannelMixerNode.ChannelMixer)m_PropertyInfo.GetValue(m_Node, null);
            m_OutChannel   = 0;

            m_Minimum = minimum;
            m_Maximum = maximum;

            if (propertyInfo.PropertyType != typeof(ChannelMixerNode.ChannelMixer))
            {
                throw new ArgumentException("Property must be of type ChannelMixer.", "propertyInfo");
            }
            label = label ?? ObjectNames.NicifyVariableName(propertyInfo.Name);

            if (!string.IsNullOrEmpty(label))
            {
                Add(new Label(label));
            }

            var buttonPanel = new VisualElement {
                name = "buttonPanel"
            };

            Action changedOutputRed = () => OnClickButton(0);
            var    outputButtonRed  = new Button(changedOutputRed);

            outputButtonRed.Add(new Label("R"));
            buttonPanel.Add(outputButtonRed);

            Action changedOutputGreen = () => OnClickButton(1);
            var    outputButtonGreen  = new Button(changedOutputGreen);

            outputButtonGreen.Add(new Label("G"));
            buttonPanel.Add(outputButtonGreen);

            Action changedOutputBlue = () => OnClickButton(2);
            var    outputButtonBlue  = new Button(changedOutputBlue);

            outputButtonBlue.Add(new Label("B"));
            buttonPanel.Add(outputButtonBlue);

            Add(buttonPanel);

            var redSliderPanel = new VisualElement {
                name = "sliderPanel"
            };

            redSliderPanel.Add(new Label("R"));
            Action <float> changedRedIn = (s) => { OnChangeSlider(s, 0); };

            m_RedSlider = new Slider(m_Minimum, m_Maximum);
            m_RedSlider.RegisterValueChangedCallback((evt) => OnChangeSlider(evt.newValue, 0));

            redSliderPanel.Add(m_RedSlider);
            m_RedInputField = new FloatField {
                value = m_ChannelMixer.outRed.x
            };
            m_RedInputField.RegisterCallback <ChangeEvent <double>, int>(OnChangeInputField, 0);
            redSliderPanel.Add(m_RedInputField);
            Add(redSliderPanel);

            var greenSliderPanel = new VisualElement {
                name = "sliderPanel"
            };

            greenSliderPanel.Add(new Label("G"));
            m_GreenSlider = new Slider(m_Minimum, m_Maximum);
            m_GreenSlider.RegisterValueChangedCallback((evt) => OnChangeSlider(evt.newValue, 1));
            greenSliderPanel.Add(m_GreenSlider);
            m_GreenInputField = new FloatField {
                value = m_ChannelMixer.outRed.y
            };
            m_GreenInputField.RegisterCallback <ChangeEvent <double>, int>(OnChangeInputField, 1);
            greenSliderPanel.Add(m_GreenInputField);
            Add(greenSliderPanel);

            var blueSliderPanel = new VisualElement {
                name = "sliderPanel"
            };

            blueSliderPanel.Add(new Label("B"));
            m_BlueSlider = new Slider(m_Minimum, m_Maximum);
            m_BlueSlider.RegisterValueChangedCallback((evt) => OnChangeSlider(evt.newValue, 2));
            blueSliderPanel.Add(m_BlueSlider);
            m_BlueInputField = new FloatField {
                value = m_ChannelMixer.outRed.z
            };
            m_BlueInputField.RegisterCallback <ChangeEvent <double>, int>(OnChangeInputField, 2);
            blueSliderPanel.Add(m_BlueInputField);
            Add(blueSliderPanel);

            m_Initialized = true;
            ResetSliders();
        }
示例#27
0
    public PlanetSubEditor(StarSystemEditor starSystemEditor, Planet planet)
    {
        this.starSystemEditor = starSystemEditor;
        this.planet           = planet;

        VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Scripts/Editor/Star System Editor/PlanetSubEditor.uxml");

        visualTree.CloneTree(this);

        StyleSheet stylesheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/Scripts/Editor/Star System Editor/PlanetSubEditor.uss");

        this.styleSheets.Add(stylesheet);

        this.AddToClassList("planetSubeditor");

        #region Fields
        TextField nameField = this.Query <TextField>("planetName").First();
        nameField.value = planet.name;
        nameField.RegisterCallback <ChangeEvent <string> >(
            e =>
        {
            planet.name = (string)e.newValue;
            EditorUtility.SetDirty(planet);
        }
            );

        // Sprite is displayed the same way as in the Star System Inspector
        VisualElement planetSpriteDisplay = this.Query <VisualElement>("planetSpriteDisplay").First();
        planetSpriteDisplay.style.backgroundImage = planet.sprite ? planet.sprite.texture : null;

        ObjectField spriteField = this.Query <ObjectField>("planetSprite").First();
        spriteField.objectType = typeof(Sprite);
        spriteField.value      = planet.sprite;
        spriteField.RegisterCallback <ChangeEvent <Object> >(
            e =>
        {
            planet.sprite = (Sprite)e.newValue;
            planetSpriteDisplay.style.backgroundImage = planet.sprite.texture;
            EditorUtility.SetDirty(planet);
        }
            );

        FloatField scaleField = this.Query <FloatField>("planetScale").First();
        scaleField.value = planet.scale;
        scaleField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            planet.scale = e.newValue;
            EditorUtility.SetDirty(planet);
        }
            );

        FloatField distanceField = this.Query <FloatField>("planetDistance").First();
        distanceField.value = planet.distance;
        distanceField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            planet.distance = e.newValue;
            EditorUtility.SetDirty(planet);
        }
            );


        FloatField speedField = this.Query <FloatField>("planetSpeed").First();
        speedField.value = planet.speed;
        speedField.RegisterCallback <ChangeEvent <float> >(
            e =>
        {
            planet.speed = e.newValue;
            EditorUtility.SetDirty(planet);
        }
            );
        #endregion

        #region Buttons
        Button btnAddPlanet = this.Query <Button>("btnRemove").First();
        btnAddPlanet.clickable.clicked += RemovePlanet;
        #endregion
    }