Skip to content

Instantly share code, notes, and snippets.

@Nrjwolf
Last active June 12, 2020 07:25
Show Gist options
  • Save Nrjwolf/cd0b5b920f50a098db7959e21c6232be to your computer and use it in GitHub Desktop.
Save Nrjwolf/cd0b5b920f50a098db7959e21c6232be to your computer and use it in GitHub Desktop.
Custom Value to create constant/random value in range/random value in two ranges
using Random = UnityEngine.Random;
using Sirenix.OdinInspector;
[System.Serializable]
[InlineProperty(LabelWidth = 0)]
public class CustomValue
{
[System.Serializable]
[HideLabel, LabelWidth(50)]
[InlineProperty(LabelWidth = 0)]
public struct RangeValue
{
public RangeValue(float from, float to)
{
From = from;
To = to;
}
[HorizontalGroup("Group 1")] public float From;
[HorizontalGroup("Group 1")] public float To;
public float GetRandom() => Random.Range(From, To);
}
public enum ValueType
{
Constant,
RandomRange,
RandomRangeDouble,
}
[HideLabel, LabelWidth(50)]
public ValueType Type;
[ShowIf("Type", ValueType.Constant)] public float Value;
[ShowIf("Type", ValueType.RandomRange)] public RangeValue ValueRandomRange;
[ShowIf("Type", ValueType.RandomRangeDouble)] public RangeValue ValueRandomRangeDouble1;
[ShowIf("Type", ValueType.RandomRangeDouble)] public RangeValue ValueRandomRangeDouble2;
public CustomValue(float constant)
{
Type = ValueType.Constant;
Value = constant;
}
public CustomValue(float valueRangeFrom, float valueRangeTo)
{
Type = ValueType.RandomRange;
ValueRandomRange = new RangeValue(valueRangeFrom, valueRangeTo);
}
public CustomValue(float valueRangeFrom1, float valueRangeTo1, float valueRangeFrom2, float valueRangeTo2)
{
Type = ValueType.RandomRangeDouble;
ValueRandomRangeDouble1 = new RangeValue(valueRangeFrom1, valueRangeTo1);
ValueRandomRangeDouble2 = new RangeValue(valueRangeFrom2, valueRangeTo2);
}
public float GetValue()
{
if (Type == ValueType.Constant) return Value;
else if (Type == ValueType.RandomRange) return ValueRandomRange.GetRandom();
else if (Type == ValueType.RandomRangeDouble) return Random.value > .5 ? ValueRandomRangeDouble1.GetRandom() : ValueRandomRangeDouble2.GetRandom();
else return 0;
}
}
@Nrjwolf
Copy link
Author

Nrjwolf commented Jun 12, 2020

Features

  1. Returns constant value
  2. Returns random value in range
  3. Returns random value from two ranges

Uses odin inspector for a beautiful display in the inspector
2020-06-12 15-12-39 2020-06-12 15_13_11

Example

public CustomValue Coins = new CustomValue(0); // create constant value

Coins = new CustomValue(-1, 1); // create range
Coins = new CustomValue(-10, -7, 7, 10); // create two ranges
var value = Coins.GetValue(); // return constant/random value/random value from two ranges

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment