internal void CallRpc(NetMessage msg, NetMessageInfo info, SubMsgType sub) { if (msg.RemainingBits < 32) { Debug.LogWarning("Attempted to call an rpc on a network view, but there weren't enough bits remaining to do it."); return; } var id = msg.ReadUInt16(); var comp = msg.ReadByte(); var rpc = msg.ReadByte(); NetworkView view; var supposedToHave = _networkViews.TryGetValue(id, out view); if (supposedToHave && view != null) { view.IncomingRpc(comp, rpc, msg, info, sub); } else { Debug.LogWarning($"Could not find view {id} to call {comp} rpc {rpc}"); } //todo: filter if rpc mode is all/others/owner, and then send to appropriate people. if (info.ContinueForwarding && view != null) { if (info.Mode == BroadcastMode.Others) { view.SendExcept(msg, info.Sender, info.Reliability); } else if (info.Mode == BroadcastMode.All) { view.SendMessage(msg, RpcUtils.RpcMode(info.Reliability, info.Mode)); } else if (info.Mode == BroadcastMode.Owner && info.Sender != view.Owner && view.Owner.IsValid) { view.Owner.SendMessage(msg, info.Reliability); } } }