private void SendClockedCall(int PeerId, ClockedRemoteCall.TypeOfCall Type, MDReliability Reliability, string NodePath, string Method, MDRemoteMode Mode, params object[] Parameters) { MDLog.Trace(LOG_CAT, $"Sending clocked call {Method} on {NodePath} with parameters ({MDStatics.GetParametersAsString(Parameters)})"); if (Reliability == MDReliability.Reliable) { if (PeerId != -1) { RpcId(PeerId, nameof(ClockedCall), GameClock.GetTick(), Type, NodePath, Method, Mode, Parameters); } else { Rpc(nameof(ClockedCall), GameClock.GetTick(), Type, NodePath, Method, Mode, Parameters); } } else { if (PeerId != -1) { RpcUnreliableId(PeerId, nameof(ClockedCall), GameClock.GetTick(), Type, NodePath, Method, Mode, Parameters); } else { RpcUnreliable(nameof(ClockedCall), GameClock.GetTick(), Type, NodePath, Method, Mode, Parameters); } } }
private void ClockedCall(uint Tick, ClockedRemoteCall.TypeOfCall Type, string NodePath, string Method, MDRemoteMode Mode, params object[] Parameters) { Node Target = GetNodeOrNull(NodePath); if (Target == null) { MDLog.Warn(LOG_CAT, $"Could not find target [{NodePath}] for ClockedRpcCall."); return; } MDLog.Trace(LOG_CAT, $"Got clocked call {Method} on {NodePath} with parameters ({MDStatics.GetParametersAsString(Parameters)})"); ClockedRemoteCall RemoteCall = new ClockedRemoteCall(Tick, Type, WeakRef(Target), Method, Mode, Multiplayer.GetRpcSenderId(), Parameters); // Check if we should already invoke this (if the time has already passed) if (!RemoteCall.Invoke(GameClock.GetRemoteTick())) { ClockedRemoteCallList.Add(RemoteCall); } }