Random Functions

This commit is contained in:
2021-01-30 15:30:35 +08:00
parent ca8149da1f
commit 76edfff94f
334 changed files with 59303 additions and 8 deletions

View File

@ -0,0 +1,66 @@
using UnityEngine;
using TMPro;
public class FrameRateCounter : MonoBehaviour
{
[SerializeField]
TextMeshProUGUI display = default;
public enum DisplayMode { FPS, MS };
[SerializeField]
DisplayMode displayMode = DisplayMode.FPS;
[SerializeField, Range(0.1f, 2.0f)]
float sampleDuration = 1.0f;
int frames;
float duration;
float bestDuration = float.MaxValue;
float worstDuration = 0.0f;
private void Update()
{
var frameDuration = Time.unscaledDeltaTime;
frames++;
duration += frameDuration;
if (frameDuration < bestDuration)
{
bestDuration = frameDuration;
}
if (frameDuration > worstDuration)
{
worstDuration = frameDuration;
}
if (duration >= sampleDuration)
{
if (displayMode == DisplayMode.FPS)
{
display.SetText(
"FPS\n{0:0}\n{1:0}\n{2:0}",
1.0f / bestDuration,
frames / duration,
1.0f / worstDuration
);
}
else
{
display.SetText(
"FPS\n{0:1}\n{1:1}\n{2:1}",
1000.0f * bestDuration,
1000.0f * duration / frames,
1000.0f * worstDuration
);
}
frames = 0;
duration = 0.0f;
bestDuration = float.MaxValue;
worstDuration = 0.0f;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: db0de69e270b20648a07ce8befb7b34d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -14,6 +14,22 @@ public static class FunctionLibrary
return functions[(int)name];
}
public static FunctionName GetNextFunctionName(FunctionName name)
{
return (int)name < functions.Length - 1 ? name + 1 : 0;
}
public static FunctionName GetRandomFunctionName()
{
return (FunctionName)Random.Range(0, functions.Length);
}
public static FunctionName GetRandomFunctionNameOtherThan(FunctionName name)
{
var choice = (FunctionName)Random.Range(1, functions.Length);
return choice == name ? 0 : choice;
}
public static Vector3 Wave(float u, float v, float t)
{
Vector3 p;

View File

@ -11,8 +11,18 @@ public class Graph : MonoBehaviour
[SerializeField]
FunctionLibrary.FunctionName function = default;
public enum TransitionMode { Normal, Cycle, Random }
[SerializeField]
TransitionMode transitionMode = TransitionMode.Normal;
[SerializeField, Min(0.0f)]
float functionDuration = 1.0f;
Transform[] points;
float duration = 0.0f;
private void Awake()
{
var step = 2f / resolution;
@ -28,6 +38,26 @@ public class Graph : MonoBehaviour
}
private void Update()
{
duration += Time.deltaTime;
if (duration >= functionDuration)
{
duration -= functionDuration;
PickNextFunction();
}
UpdateFunction();
}
private void PickNextFunction()
{
if (transitionMode == TransitionMode.Normal) return;
function = transitionMode == TransitionMode.Cycle ?
FunctionLibrary.GetNextFunctionName(function) :
FunctionLibrary.GetRandomFunctionNameOtherThan(function);
}
private void UpdateFunction()
{
FunctionLibrary.Function f = FunctionLibrary.GetFunction(function);
var time = Time.time;
@ -45,4 +75,5 @@ public class Graph : MonoBehaviour
points[i].localPosition = f(u, v, time);
}
}
}