r2mods/ilspy_dump/ror2_csproj/RoR2/OnCollisionEventController.cs

125 lines
2.3 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using System;
using System.Runtime.InteropServices;
using RoR2.Networking;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
namespace RoR2;
public class OnCollisionEventController : NetworkBehaviour
{
[Serializable]
public class OnCollisionEvent : UnityEvent
{
}
[SerializeField]
private float monsterCredits;
[SerializeField]
private CombatDirector director;
[SerializeField]
private bool shouldAccountForMultiplePlayers;
public OnCollisionEvent onPlayerCollision;
[SyncVar]
public bool available = true;
public bool Networkavailable
{
get
{
return available;
}
[param: In]
set
{
SetSyncVar(value, ref available, 1u);
}
}
public override int GetNetworkChannel()
{
return QosChannelIndex.defaultReliable.intVal;
}
public void OnTriggerStay(Collider other)
{
if (NetworkServer.active && available && other.TryGetComponent<CharacterBody>(out var component) && component.isPlayerControlled)
{
int participatingPlayerCount = Run.instance.participatingPlayerCount;
if (shouldAccountForMultiplePlayers)
{
monsterCredits *= participatingPlayerCount;
}
if ((bool)director)
{
director.SetMonsterCredit(monsterCredits);
}
onPlayerCollision.Invoke();
}
}
[Server]
public void SetAvailable(bool setActive)
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.OnCollisionEventController::SetAvailable(System.Boolean)' called on client");
}
else
{
Networkavailable = setActive;
}
}
private void UNetVersion()
{
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
if (forceAll)
{
writer.Write(available);
return true;
}
bool flag = false;
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
{
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
flag = true;
}
writer.Write(available);
}
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
}
return flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if (initialState)
{
available = reader.ReadBoolean();
return;
}
int num = (int)reader.ReadPackedUInt32();
if (((uint)num & (true ? 1u : 0u)) != 0)
{
available = reader.ReadBoolean();
}
}
public override void PreStartClient()
{
}
}