public override void NetworkCreateObject(NetWorker networker, int identity, uint id, FrameStream frame, Action <NetworkObject> callback) { if (networker.IsServer) { if (frame.Sender != null && frame.Sender != networker.Me) { if (!ValidateCreateRequest(networker, identity, id, frame)) { return; } } } bool availableCallback = false; NetworkObject obj = null; MainThreadManager.Run(() => { switch (identity) { case ChatManagerNetworkObject.IDENTITY: availableCallback = true; obj = new ChatManagerNetworkObject(networker, id, frame); break; case EntityNetworkObject.IDENTITY: availableCallback = true; obj = new EntityNetworkObject(networker, id, frame); break; case GameManagerNetworkObject.IDENTITY: availableCallback = true; obj = new GameManagerNetworkObject(networker, id, frame); break; case PlayerNetworkObject.IDENTITY: availableCallback = true; obj = new PlayerNetworkObject(networker, id, frame); break; case WeaponNetworkObject.IDENTITY: availableCallback = true; obj = new WeaponNetworkObject(networker, id, frame); break; } if (!availableCallback) { base.NetworkCreateObject(networker, identity, id, frame, callback); } else if (callback != null) { callback(obj); } }); }
public override void Initialize(NetworkObject obj) { // We have already initialized this object if (networkObject != null && networkObject.AttachedBehavior != null) { return; } networkObject = (EntityNetworkObject)obj; networkObject.AttachedBehavior = this; base.SetupHelperRpcs(networkObject); networkObject.onDestroy += DestroyGameObject; if (!obj.IsOwner) { if (!skipAttachIds.ContainsKey(obj.NetworkId)) { uint newId = obj.NetworkId + 1; ProcessOthers(gameObject.transform, ref newId); } else { skipAttachIds.Remove(obj.NetworkId); } } if (obj.Metadata != null) { byte transformFlags = obj.Metadata[0]; if (transformFlags != 0) { BMSByte metadataTransform = new BMSByte(); metadataTransform.Clone(obj.Metadata); metadataTransform.MoveStartIndex(1); if ((transformFlags & 0x01) != 0 && (transformFlags & 0x02) != 0) { MainThreadManager.Run(() => { transform.position = ObjectMapper.Instance.Map <Vector3>(metadataTransform); transform.rotation = ObjectMapper.Instance.Map <Quaternion>(metadataTransform); }); } else if ((transformFlags & 0x01) != 0) { MainThreadManager.Run(() => { transform.position = ObjectMapper.Instance.Map <Vector3>(metadataTransform); }); } else if ((transformFlags & 0x02) != 0) { MainThreadManager.Run(() => { transform.rotation = ObjectMapper.Instance.Map <Quaternion>(metadataTransform); }); } } } MainThreadManager.Run(() => { NetworkStart(); networkObject.Networker.FlushCreateActions(networkObject); }); }
public override void Initialize(NetworkObject obj) { // We have already initialized this object if (networkObject != null && networkObject.AttachedBehavior != null) { return; } networkObject = (EntityNetworkObject)obj; networkObject.AttachedBehavior = this; base.SetupHelperRpcs(networkObject); networkObject.RegisterRpc("UpdateTeam", UpdateTeam, typeof(string)); networkObject.RegisterRpc("UpdateModule", UpdateModule, typeof(int), typeof(string), typeof(float), typeof(float), typeof(float), typeof(float), typeof(float), typeof(bool)); networkObject.RegisterRpc("UpdateHealth", UpdateHealth, typeof(float)); networkObject.RegisterRpc("UpdateShield", UpdateShield, typeof(float)); networkObject.RegisterRpc("UpdateMaxHealth", UpdateMaxHealth, typeof(float)); networkObject.RegisterRpc("UpdateMaxShield", UpdateMaxShield, typeof(float)); networkObject.RegisterRpc("UpdateAcceleration", UpdateAcceleration, typeof(float)); networkObject.RegisterRpc("UpdateSpeed", UpdateSpeed, typeof(float)); networkObject.RegisterRpc("UpdateAgility", UpdateAgility, typeof(float)); networkObject.RegisterRpc("UpdateVerticalInput", UpdateVerticalInput, typeof(int)); networkObject.RegisterRpc("UpdateHorizontalInput", UpdateHorizontalInput, typeof(int)); networkObject.RegisterRpc("UpdateName", UpdateName, typeof(string)); networkObject.RegisterRpc("Sync", Sync, typeof(float), typeof(Vector3), typeof(Quaternion), typeof(Vector3)); networkObject.RegisterRpc("Init", Init); networkObject.onDestroy += DestroyGameObject; if (!obj.IsOwner) { if (!skipAttachIds.ContainsKey(obj.NetworkId)) { uint newId = obj.NetworkId + 1; ProcessOthers(gameObject.transform, ref newId); } else { skipAttachIds.Remove(obj.NetworkId); } } if (obj.Metadata != null) { byte transformFlags = obj.Metadata[0]; if (transformFlags != 0) { BMSByte metadataTransform = new BMSByte(); metadataTransform.Clone(obj.Metadata); metadataTransform.MoveStartIndex(1); if ((transformFlags & 0x01) != 0 && (transformFlags & 0x02) != 0) { MainThreadManager.Run(() => { transform.position = ObjectMapper.Instance.Map <Vector3>(metadataTransform); transform.rotation = ObjectMapper.Instance.Map <Quaternion>(metadataTransform); }); } else if ((transformFlags & 0x01) != 0) { MainThreadManager.Run(() => { transform.position = ObjectMapper.Instance.Map <Vector3>(metadataTransform); }); } else if ((transformFlags & 0x02) != 0) { MainThreadManager.Run(() => { transform.rotation = ObjectMapper.Instance.Map <Quaternion>(metadataTransform); }); } } } MainThreadManager.Run(() => { NetworkStart(); networkObject.Networker.FlushCreateActions(networkObject); }); }