summaryrefslogtreecommitdiff
path: root/Mage/Assets/ThirdParty/Photon/PhotonUnityNetworking/UtilityScripts/Debugging/PhotonLagSimulationGui.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Mage/Assets/ThirdParty/Photon/PhotonUnityNetworking/UtilityScripts/Debugging/PhotonLagSimulationGui.cs')
-rw-r--r--Mage/Assets/ThirdParty/Photon/PhotonUnityNetworking/UtilityScripts/Debugging/PhotonLagSimulationGui.cs109
1 files changed, 109 insertions, 0 deletions
diff --git a/Mage/Assets/ThirdParty/Photon/PhotonUnityNetworking/UtilityScripts/Debugging/PhotonLagSimulationGui.cs b/Mage/Assets/ThirdParty/Photon/PhotonUnityNetworking/UtilityScripts/Debugging/PhotonLagSimulationGui.cs
new file mode 100644
index 0000000..52c29c6
--- /dev/null
+++ b/Mage/Assets/ThirdParty/Photon/PhotonUnityNetworking/UtilityScripts/Debugging/PhotonLagSimulationGui.cs
@@ -0,0 +1,109 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="PhotonLagSimulationGui.cs" company="Exit Games GmbH">
+// Part of: Photon Unity Utilities,
+// </copyright>
+// <summary>
+// This MonoBehaviour is a basic GUI for the Photon client's network-simulation feature.
+// It can modify lag (fixed delay), jitter (random lag) and packet loss.
+// Part of the [Optional GUI](@ref optionalGui).
+// </summary>
+// <author>developer@exitgames.com</author>
+// --------------------------------------------------------------------------------------------------------------------
+
+
+using UnityEngine;
+
+using Photon.Pun;
+using Photon.Realtime;
+using ExitGames.Client.Photon;
+
+namespace Photon.Pun.UtilityScripts
+{
+ /// <summary>
+ /// This MonoBehaviour is a basic GUI for the Photon client's network-simulation feature.
+ /// It can modify lag (fixed delay), jitter (random lag) and packet loss.
+ /// </summary>
+ /// \ingroup optionalGui
+ public class PhotonLagSimulationGui : MonoBehaviour
+ {
+ /// <summary>Positioning rect for window.</summary>
+ public Rect WindowRect = new Rect(0, 100, 120, 100);
+
+ /// <summary>Unity GUI Window ID (must be unique or will cause issues).</summary>
+ public int WindowId = 101;
+
+ /// <summary>Shows or hides GUI (does not affect settings).</summary>
+ public bool Visible = true;
+
+ /// <summary>The peer currently in use (to set the network simulation).</summary>
+ public PhotonPeer Peer { get; set; }
+
+ public void Start()
+ {
+ this.Peer = PhotonNetwork.NetworkingClient.LoadBalancingPeer;
+ }
+
+ public void OnGUI()
+ {
+ if (!this.Visible)
+ {
+ return;
+ }
+
+ if (this.Peer == null)
+ {
+ this.WindowRect = GUILayout.Window(this.WindowId, this.WindowRect, this.NetSimHasNoPeerWindow, "Netw. Sim.");
+ }
+ else
+ {
+ this.WindowRect = GUILayout.Window(this.WindowId, this.WindowRect, this.NetSimWindow, "Netw. Sim.");
+ }
+ }
+
+ private void NetSimHasNoPeerWindow(int windowId)
+ {
+ GUILayout.Label("No peer to communicate with. ");
+ }
+
+ private void NetSimWindow(int windowId)
+ {
+ GUILayout.Label(string.Format("Rtt:{0,4} +/-{1,3}", this.Peer.RoundTripTime, this.Peer.RoundTripTimeVariance));
+
+ bool simEnabled = this.Peer.IsSimulationEnabled;
+ bool newSimEnabled = GUILayout.Toggle(simEnabled, "Simulate");
+ if (newSimEnabled != simEnabled)
+ {
+ this.Peer.IsSimulationEnabled = newSimEnabled;
+ }
+
+ float inOutLag = this.Peer.NetworkSimulationSettings.IncomingLag;
+ GUILayout.Label("Lag " + inOutLag);
+ inOutLag = GUILayout.HorizontalSlider(inOutLag, 0, 500);
+
+ this.Peer.NetworkSimulationSettings.IncomingLag = (int)inOutLag;
+ this.Peer.NetworkSimulationSettings.OutgoingLag = (int)inOutLag;
+
+ float inOutJitter = this.Peer.NetworkSimulationSettings.IncomingJitter;
+ GUILayout.Label("Jit " + inOutJitter);
+ inOutJitter = GUILayout.HorizontalSlider(inOutJitter, 0, 100);
+
+ this.Peer.NetworkSimulationSettings.IncomingJitter = (int)inOutJitter;
+ this.Peer.NetworkSimulationSettings.OutgoingJitter = (int)inOutJitter;
+
+ float loss = this.Peer.NetworkSimulationSettings.IncomingLossPercentage;
+ GUILayout.Label("Loss " + loss);
+ loss = GUILayout.HorizontalSlider(loss, 0, 10);
+
+ this.Peer.NetworkSimulationSettings.IncomingLossPercentage = (int)loss;
+ this.Peer.NetworkSimulationSettings.OutgoingLossPercentage = (int)loss;
+
+ // if anything was clicked, the height of this window is likely changed. reduce it to be layouted again next frame
+ if (GUI.changed)
+ {
+ this.WindowRect.height = 100;
+ }
+
+ GUI.DragWindow();
+ }
+ }
+} \ No newline at end of file