127 lines
2.5 KiB
C#
127 lines
2.5 KiB
C#
using System.Runtime.InteropServices;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
|
|
namespace RoR2;
|
|
|
|
public class PortalDialerButtonController : NetworkBehaviour
|
|
{
|
|
[SyncVar(hook = "OnSyncDigitIndex")]
|
|
public byte currentDigitIndex = 1;
|
|
|
|
public GameObject holderObject;
|
|
|
|
public GameObject swapEffect;
|
|
|
|
public ArtifactCompoundDef[] digitDefs;
|
|
|
|
private GameObject modelInstance;
|
|
|
|
public ArtifactCompoundDef currentDigitDef => digitDefs[currentDigitIndex];
|
|
|
|
public byte NetworkcurrentDigitIndex
|
|
{
|
|
get
|
|
{
|
|
return currentDigitIndex;
|
|
}
|
|
[param: In]
|
|
set
|
|
{
|
|
if (NetworkServer.localClientActive && !base.syncVarHookGuard)
|
|
{
|
|
base.syncVarHookGuard = true;
|
|
OnSyncDigitIndex(value);
|
|
base.syncVarHookGuard = false;
|
|
}
|
|
SetSyncVar(value, ref currentDigitIndex, 1u);
|
|
}
|
|
}
|
|
|
|
private void OnSyncDigitIndex(byte newDigitIndex)
|
|
{
|
|
NetworkcurrentDigitIndex = newDigitIndex;
|
|
if ((bool)modelInstance)
|
|
{
|
|
Object.Destroy(modelInstance);
|
|
}
|
|
if ((bool)swapEffect)
|
|
{
|
|
swapEffect.SetActive(value: false);
|
|
swapEffect.SetActive(value: true);
|
|
}
|
|
if ((bool)currentDigitDef.modelPrefab)
|
|
{
|
|
modelInstance = Object.Instantiate(currentDigitDef.modelPrefab, holderObject.transform);
|
|
}
|
|
}
|
|
|
|
public override void OnStartClient()
|
|
{
|
|
base.OnStartClient();
|
|
OnSyncDigitIndex(currentDigitIndex);
|
|
}
|
|
|
|
[Server]
|
|
public void CycleDigitServer()
|
|
{
|
|
if (!NetworkServer.active)
|
|
{
|
|
Debug.LogWarning("[Server] function 'System.Void RoR2.PortalDialerButtonController::CycleDigitServer()' called on client");
|
|
return;
|
|
}
|
|
byte b = (byte)(currentDigitIndex + 1);
|
|
if (b >= digitDefs.Length)
|
|
{
|
|
b = 1;
|
|
}
|
|
NetworkcurrentDigitIndex = b;
|
|
}
|
|
|
|
private void UNetVersion()
|
|
{
|
|
}
|
|
|
|
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
|
|
{
|
|
if (forceAll)
|
|
{
|
|
writer.WritePackedUInt32(currentDigitIndex);
|
|
return true;
|
|
}
|
|
bool flag = false;
|
|
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
|
|
{
|
|
if (!flag)
|
|
{
|
|
writer.WritePackedUInt32(base.syncVarDirtyBits);
|
|
flag = true;
|
|
}
|
|
writer.WritePackedUInt32(currentDigitIndex);
|
|
}
|
|
if (!flag)
|
|
{
|
|
writer.WritePackedUInt32(base.syncVarDirtyBits);
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public override void OnDeserialize(NetworkReader reader, bool initialState)
|
|
{
|
|
if (initialState)
|
|
{
|
|
currentDigitIndex = (byte)reader.ReadPackedUInt32();
|
|
return;
|
|
}
|
|
int num = (int)reader.ReadPackedUInt32();
|
|
if (((uint)num & (true ? 1u : 0u)) != 0)
|
|
{
|
|
OnSyncDigitIndex((byte)reader.ReadPackedUInt32());
|
|
}
|
|
}
|
|
|
|
public override void PreStartClient()
|
|
{
|
|
}
|
|
}
|