Example #1
0
        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
                }
            }
        }