WIP: Flag enums and dropdowns

- Needs cleanup yet
This commit is contained in:
MrGadget 2024-11-05 11:01:29 -05:00
parent 207983c076
commit 9fdcdc64c7

View File

@ -17,6 +17,39 @@ namespace Mirror
[AddComponentMenu("Network/Network Transform Hybrid")] [AddComponentMenu("Network/Network Transform Hybrid")]
public class NetworkTransformHybrid2022 : NetworkBehaviour public class NetworkTransformHybrid2022 : NetworkBehaviour
{ {
#region Flag Enums
[Flags]
public enum Settings
{
Nothing,
OnlySyncOnChange = 1 << 0,
UnreliableRedundancy = 1 << 1,
BaselineIsDelta = 1 << 2,
DisableSendingThisToClients = 1 << 3
}
[Flags]
public enum SyncOptions
{
Nothing,
Position = 1 << 0,
Rotation = 1 << 1,
Scale = 1 << 2,
Default = Position | Rotation
}
[Flags]
public enum DebugOptions
{
Nothing,
DebugDraw = 1 << 0,
ShowGizmos = 1 << 1,
ShowOverlay = 1 << 2
}
#endregion
// target transform to sync. can be on a child. // target transform to sync. can be on a child.
[Header("Target")] [Header("Target")]
[Tooltip("The Transform component to sync. May be on this GameObject, or on a child.")] [Tooltip("The Transform component to sync. May be on this GameObject, or on a child.")]
@ -59,11 +92,6 @@ public class NetworkTransformHybrid2022 : NetworkBehaviour
Quaternion lastDeserializedBaselineRotation = Quaternion.identity; // unused, but keep for delta Quaternion lastDeserializedBaselineRotation = Quaternion.identity; // unused, but keep for delta
Vector3 lastDeserializedBaselineScale = Vector3.one; // unused, but keep for delta Vector3 lastDeserializedBaselineScale = Vector3.one; // unused, but keep for delta
// only sync when changed hack /////////////////////////////////////////
[Header("Sync Only If Changed")]
[Tooltip("When true, changes are not sent unless greater than sensitivity values below.")]
public bool onlySyncOnChange = true;
// change detection: we need to do this carefully in order to get it right. // change detection: we need to do this carefully in order to get it right.
// //
// DONT just check changes in UpdateBaseline(). this would introduce MrG's grid issue: // DONT just check changes in UpdateBaseline(). this would introduce MrG's grid issue:
@ -78,6 +106,19 @@ public class NetworkTransformHybrid2022 : NetworkBehaviour
// => this avoids the A1->A2->A1 grid issue above // => this avoids the A1->A2->A1 grid issue above
bool changedSinceBaseline = false; bool changedSinceBaseline = false;
[Header("Configuration")]
// selective sync //////////////////////////////////////////////////////
public SyncOptions syncOptions = SyncOptions.Default;
bool syncPosition => syncOptions.HasFlag(SyncOptions.Position);
bool syncRotation => syncOptions.HasFlag(SyncOptions.Rotation);
bool syncScale => syncOptions.HasFlag(SyncOptions.Scale);
public Settings settings = Settings.OnlySyncOnChange;
bool onlySyncOnChange => settings.HasFlag(Settings.OnlySyncOnChange);
bool unreliableRedundancy => settings.HasFlag(Settings.UnreliableRedundancy);
bool baselineIsDelta => settings.HasFlag(Settings.BaselineIsDelta);
bool disableSendingThisToClients => settings.HasFlag(Settings.DisableSendingThisToClients);
// sensitivity is for changed-detection, // sensitivity is for changed-detection,
// this is != precision, which is for quantization and delta compression. // this is != precision, which is for quantization and delta compression.
[Header("Sensitivity"), Tooltip("Sensitivity of changes needed before an updated state is sent over the network")] [Header("Sensitivity"), Tooltip("Sensitivity of changes needed before an updated state is sent over the network")]
@ -85,28 +126,35 @@ public class NetworkTransformHybrid2022 : NetworkBehaviour
public float rotationSensitivity = 0.01f; public float rotationSensitivity = 0.01f;
public float scaleSensitivity = 0.01f; public float scaleSensitivity = 0.01f;
[Tooltip("Enable to send all unreliable messages twice. Only useful for extremely fast-paced games since it doubles bandwidth costs.")] //[Tooltip("Enable to send all unreliable messages twice. Only useful for extremely fast-paced games since it doubles bandwidth costs.")]
public bool unreliableRedundancy = false; //public bool unreliableRedundancy = false;
[Tooltip("When sending a reliable baseline, should we also send an unreliable delta or rely on the reliable baseline to arrive in a similar time?")] //[Tooltip("When sending a reliable baseline, should we also send an unreliable delta or rely on the reliable baseline to arrive in a similar time?")]
public bool baselineIsDelta = true; //public bool baselineIsDelta = true;
// selective sync ////////////////////////////////////////////////////// //// selective sync //////////////////////////////////////////////////////
[Header("Selective Sync & interpolation")] //[Header("Selective Sync & interpolation")]
public bool syncPosition = true; //public bool syncPosition = true;
public bool syncRotation = true; //public bool syncRotation = true;
public bool syncScale = false; //public bool syncScale = false;
// BEGIN CUSTOM CHANGE ///////////////////////////////////////////////// //// BEGIN CUSTOM CHANGE /////////////////////////////////////////////////
// TODO rename to avoid double negative //// TODO rename to avoid double negative
public bool disableSendingThisToClients = false; //public bool disableSendingThisToClients = false;
// END CUSTOM CHANGE /////////////////////////////////////////////////// //// END CUSTOM CHANGE ///////////////////////////////////////////////////
//// debugging ///////////////////////////////////////////////////////////
//[Header("Debug")]
//public bool debugDraw;
//public bool showGizmos;
//public bool showOverlay;
// debugging ///////////////////////////////////////////////////////////
[Header("Debug")] [Header("Debug")]
public bool debugDraw; public DebugOptions debugOptions;
public bool showGizmos; bool debugDraw => debugOptions.HasFlag(DebugOptions.DebugDraw);
public bool showOverlay; bool showGizmos => debugOptions.HasFlag(DebugOptions.ShowGizmos);
bool showOverlay => debugOptions.HasFlag(DebugOptions.ShowOverlay);
public Color overlayColor = new Color(0, 0, 0, 0.5f); public Color overlayColor = new Color(0, 0, 0, 0.5f);
// initialization ////////////////////////////////////////////////////// // initialization //////////////////////////////////////////////////////