private static void processRemoveJointMessage(byte[] msg, bool clientMessage) { short jointParentID = ObjectSerializer.deserializeShort(ref msg); if (NetworkEntityManager.Instance.findComponent(jointParentID, out NetworkIdentity jointParent)) { byte[] removeJointMsg = null; bool forwardMessage = clientMessage && ServerBehaviour.Instance; //Should the message be forwarded? byte jointType = ObjectSerializer.deserializeByte(ref msg); switch (jointType) { case 0: if (NetworkEntityManager.Instance.findComponent(jointParentID, out FixedJoint fixedJoint, true)) { Object.Destroy(fixedJoint); //Destroy the joint } if (forwardMessage) { removeJointMsg = MessageFactory.createRemoveJointMessage <FixedJoint>(jointParent); } break; case 1: if (NetworkEntityManager.Instance.findComponent(jointParentID, out HingeJoint hingeJoint, true)) { Object.Destroy(hingeJoint); //Destroy the joint } if (forwardMessage) { removeJointMsg = MessageFactory.createRemoveJointMessage <HingeJoint>(jointParent); } break; case 2: if (NetworkEntityManager.Instance.findComponent(jointParentID, out SpringJoint springJoint, true)) { Object.Destroy(springJoint); //Destroy the joint } if (forwardMessage) { removeJointMsg = MessageFactory.createRemoveJointMessage <SpringJoint>(jointParent); } break; case 3: if (NetworkEntityManager.Instance.findComponent(jointParentID, out ConfigurableJoint configurableJoint, true)) { Object.Destroy(configurableJoint); //Destroy the joint } if (forwardMessage) { removeJointMsg = MessageFactory.createRemoveJointMessage <ConfigurableJoint>(jointParent); } break; case 4: if (NetworkEntityManager.Instance.findComponent(jointParentID, out CharacterJoint characterJoint, true)) { Object.Destroy(characterJoint); //Destroy the joint } if (forwardMessage) { removeJointMsg = MessageFactory.createRemoveJointMessage <CharacterJoint>(jointParent); } break; } //Message was sent from a client, now being processed on the server if (forwardMessage) { short clientID = ObjectSerializer.deserializeShort(ref msg); //Client who sent the message ServerBehaviour.Instance.sendMessage(removeJointMsg, clientID, true); //Forward to all clients but the sender } } }