You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
namespace Fusion
|
|
{
|
|
using LagCompensation;
|
|
using UnityEngine;
|
|
|
|
[ScriptHelp(BackColor = ScriptHeaderBackColor.Sand)]
|
|
[DisallowMultipleComponent]
|
|
public class RunnerLagCompensationGizmos : Behaviour
|
|
{
|
|
public bool DrawSnapshotHistory;
|
|
public bool DrawBroadphaseNodes;
|
|
|
|
public Color StateAuthHitboxCollor = Color.green;
|
|
public Color NonStateAuthHitboxCollor = Color.cyan;
|
|
|
|
private NetworkRunner _runner;
|
|
|
|
private void Awake()
|
|
{
|
|
_runner = GetComponentInParent<NetworkRunner>();
|
|
|
|
if (_runner == null) {
|
|
Debug.LogWarning($"{this} was not able to find the NetworkRunner reference. Destroying the component.");
|
|
Destroy(this);
|
|
}
|
|
}
|
|
|
|
private void OnDrawGizmos()
|
|
{
|
|
if (_runner == null || _runner.IsRunning == false || _runner.GetVisible() == false || _runner.LagCompensation.DrawInfo == default) return;
|
|
|
|
if (DrawBroadphaseNodes)
|
|
{
|
|
RenderBHVBroadphase();
|
|
}
|
|
|
|
if (DrawSnapshotHistory)
|
|
{
|
|
RenderHitboxHistory();
|
|
}
|
|
}
|
|
|
|
private void RenderHitboxHistory()
|
|
{
|
|
Gizmos.color = _runner.IsServer ? StateAuthHitboxCollor : NonStateAuthHitboxCollor;
|
|
|
|
foreach (var snapshotDrawInfo in _runner.LagCompensation.DrawInfo.SnapshotHistoryDraw) {
|
|
foreach (var colliderDrawInfo in snapshotDrawInfo) {
|
|
Gizmos.matrix = colliderDrawInfo.LocalToWorldMatrix;
|
|
switch (colliderDrawInfo.Type) {
|
|
case HitboxTypes.Box:
|
|
Gizmos.DrawWireCube(colliderDrawInfo.Offset, colliderDrawInfo.BoxExtents * 2);
|
|
break;
|
|
case HitboxTypes.Sphere:
|
|
Gizmos.DrawWireSphere(colliderDrawInfo.Offset, colliderDrawInfo.Radius);
|
|
break;
|
|
case HitboxTypes.Capsule:
|
|
LagCompensationDraw.GizmosDrawWireCapsule(colliderDrawInfo.CapsuleTopCenter, colliderDrawInfo.CapsuleBottomCenter, colliderDrawInfo.Radius);
|
|
break;
|
|
default:
|
|
Debug.LogWarning($"HitboxType {colliderDrawInfo.Type} not supported to draw.");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
Gizmos.matrix = Matrix4x4.identity;
|
|
}
|
|
|
|
private void RenderBHVBroadphase()
|
|
{
|
|
var initialColor = Color.green;
|
|
|
|
foreach (var nodeDrawInfo in _runner.LagCompensation.DrawInfo.BVHDraw) {
|
|
Gizmos.color = initialColor + Color.red * nodeDrawInfo.Depth / nodeDrawInfo.MaxDepth;
|
|
Gizmos.DrawWireCube(nodeDrawInfo.Bounds.center, nodeDrawInfo.Bounds.size);
|
|
}
|
|
}
|
|
}
|
|
} |