Beispiel #1
0
        public void TryGetValueWorks_ForMultipleDifferentValues()
        {
            var decl   = ScriptableObject.CreateInstance <ValueDeclaration>();
            var usages = new[]
            {
                ScriptableObject.CreateInstance <ValueUsage>(),
                ScriptableObject.CreateInstance <ValueUsage>(),
            };
            var soDecl  = new SerializedObject(decl);
            var serDecl = new SerializedScalableSetting(soDecl.FindProperty(nameof(ValueDeclaration.intValue)));

            var soUsage  = new SerializedObject(usages);
            var serUsage = new SerializedScalableSettingValue(soUsage.FindProperty(nameof(ValueUsage.intValue)));

            // Different level values
            usages[0].intValue.useOverride = false;
            usages[0].intValue.level       = 1;
            usages[1].intValue.useOverride = false;
            usages[1].intValue.level       = 2;
            soUsage.SetIsDifferentCacheDirty();
            soUsage.Update();

            Assert.True(serUsage.hasMultipleValues);
            Assert.False(serUsage.TryGetValue(serDecl, out int v));
            Assert.AreEqual(default(int), v);

            Assert.False(serUsage.TryGetValue(decl.intValue, out v));
            Assert.AreEqual(default(int), v);

            // Different use override values
            usages[0].intValue.useOverride = true;
            usages[0].intValue.level       = 1;
            usages[1].intValue.useOverride = false;
            usages[1].intValue.level       = 1;
            soUsage.SetIsDifferentCacheDirty();
            soUsage.Update();

            Assert.True(serUsage.hasMultipleValues);
            Assert.False(serUsage.TryGetValue(serDecl, out v));
            Assert.AreEqual(default(int), v);

            Assert.False(serUsage.TryGetValue(decl.intValue, out v));
            Assert.AreEqual(default(int), v);

            // Different override values
            usages[0].intValue.useOverride = true;
            usages[0].intValue.@override   = 5;
            usages[1].intValue.useOverride = true;
            usages[1].intValue.@override   = 6;
            soUsage.SetIsDifferentCacheDirty();
            soUsage.Update();

            Assert.True(serUsage.hasMultipleValues);
            Assert.False(serUsage.TryGetValue(serDecl, out v));
            Assert.AreEqual(default(int), v);

            Assert.False(serUsage.TryGetValue(decl.intValue, out v));
            Assert.AreEqual(default(int), v);
        }
 public void MixedValueDescriptionGUI(
     Rect fieldRect,
     SerializedScalableSettingValue self,
     GUIContent label,
     ScalableSetting <bool> sourceValue,
     string sourceName
     )
 {
     EditorGUI.LabelField(fieldRect, $"---");
 }
 public void CustomGUI(
     Rect fieldRect,
     SerializedScalableSettingValue self,
     GUIContent label,
     ScalableSetting <bool> sourceValue,
     string sourceName
     )
 {
     [email protected] = EditorGUI.Toggle(fieldRect, [email protected]);
 }
 public void LevelValueDescriptionGUI(
     Rect fieldRect,
     SerializedScalableSettingValue self,
     GUIContent label,
     ScalableSetting <int> sourceValue,
     string sourceName
     )
 {
     EditorGUI.LabelField(fieldRect, $"{(sourceValue != null ? sourceValue[self.level.intValue] : 0)} ({sourceName})");
 }
 public void CustomGUI(
     Rect fieldRect,
     SerializedScalableSettingValue self,
     GUIContent label,
     ScalableSetting <int> sourceValue,
     string sourceName
     )
 {
     [email protected] = EditorGUI.IntField(fieldRect, [email protected]);
 }
            public void CustomGUI(
                Rect fieldRect,
                SerializedScalableSettingValue self,
                GUIContent label,
                ScalableSetting <H> sourceValue,
                string sourceName
                )
            {
                // Due to a constraint in the scalability setting, we cannot simply precise the H type as an Enum in the struct declaration.
                // this shenanigans are not pretty, but we do not fall into a high complexity everytime we want to support a new enum.
                Enum data = (Enum)Enum.Parse(typeof(H), [email protected]());

                [email protected] = (int)(object)EditorGUI.EnumPopup(fieldRect, data);
            }
            public void LevelValueDescriptionGUI(
                Rect fieldRect,
                SerializedScalableSettingValue self,
                GUIContent label,
                ScalableSetting <bool> sourceValue,
                string sourceName
                )
            {
                var enabled = GUI.enabled;

                GUI.enabled = false;
                EditorGUI.Toggle(fieldRect, sourceValue != null ? sourceValue[self.level.intValue] : false);
                fieldRect.x     += 25;
                fieldRect.width -= 25;
                EditorGUI.LabelField(fieldRect, $"({sourceName})");
                GUI.enabled = enabled;
            }
            public void LevelValueDescriptionGUI(
                Rect fieldRect,
                SerializedScalableSettingValue self,
                GUIContent label,
                ScalableSetting <H> sourceValue,
                string sourceName
                )
            {
                var enabled = GUI.enabled;

                GUI.enabled = false;
                // See the comment in the function above.
                var defaultValue = (Enum)(Enum.GetValues(typeof(H)).GetValue(0));

                EditorGUI.EnumPopup(fieldRect, sourceValue != null ? (Enum)(object)(sourceValue[self.level.intValue]) : defaultValue);
                fieldRect.x     += 25;
                fieldRect.width -= 25;
                GUI.enabled      = enabled;
            }
        public void TryGetValueWorks_ForMissingLevelValue()
        {
            var decl  = ScriptableObject.CreateInstance <ValueDeclaration>();
            var usage = ScriptableObject.CreateInstance <ValueUsage>();

            usage.intValue.useOverride = false;
            usage.intValue.level       = 10;

            var soDecl  = new SerializedObject(decl);
            var serDecl = new SerializedScalableSetting(soDecl.FindProperty(nameof(ValueDeclaration.intValue)));

            var soUsage  = new SerializedObject(usage);
            var serUsage = new SerializedScalableSettingValue(soUsage.FindProperty(nameof(ValueUsage.intValue)));

            Assert.False(serUsage.TryGetValue(serDecl, out int v));
            Assert.AreEqual(default(int), v);

            Assert.False(serUsage.TryGetValue(decl.intValue, out v));
            Assert.AreEqual(default(int), v);
        }
        public void TryGetValueWorks_ForOverrideValue()
        {
            var decl  = ScriptableObject.CreateInstance <ValueDeclaration>();
            var usage = ScriptableObject.CreateInstance <ValueUsage>();

            usage.intValue.useOverride = true;
            usage.intValue.@override   = 5;

            var soDecl  = new SerializedObject(decl);
            var serDecl = new SerializedScalableSetting(soDecl.FindProperty(nameof(ValueDeclaration.intValue)));

            var soUsage  = new SerializedObject(usage);
            var serUsage = new SerializedScalableSettingValue(soUsage.FindProperty(nameof(ValueUsage.intValue)));

            Assert.True(serUsage.TryGetValue(serDecl, out int v));
            Assert.AreEqual(5, v);

            Assert.True(serUsage.TryGetValue(decl.intValue, out v));
            Assert.AreEqual(5, v);
        }