예제 #1
0
 public virtual void OnDeserialize(NetworkReader reader, bool initialState)
 {
     if (!initialState)
     {
         reader.ReadPackedUInt64();
     }
 }
예제 #2
0
        void ReadParameters(NetworkReader reader)
        {
            ulong dirtyBits = reader.ReadPackedUInt64();

            for (int i = 0; i < parameters.Length; i++)
            {
                if ((dirtyBits & (1ul << i)) == 0)
                {
                    continue;
                }

                AnimatorControllerParameter par = parameters[i];
                if (par.type == AnimatorControllerParameterType.Int)
                {
                    int newIntValue = reader.ReadPackedInt32();
                    Animator.SetInteger(par.nameHash, newIntValue);
                }
                else if (par.type == AnimatorControllerParameterType.Float)
                {
                    float newFloatValue = reader.ReadSingle();
                    Animator.SetFloat(par.nameHash, newFloatValue);
                }
                else if (par.type == AnimatorControllerParameterType.Bool)
                {
                    bool newBoolValue = reader.ReadBoolean();
                    Animator.SetBool(par.nameHash, newBoolValue);
                }
            }
        }
예제 #3
0
 internal void DeSerializeObjectsDelta(NetworkReader reader)
 {
     ulong dirty = reader.ReadPackedUInt64();
     for (int i = 0; i < syncObjects.Count; i++)
     {
         SyncObject syncObject = syncObjects[i];
         if ((dirty & (1UL << i)) != 0)
         {
             syncObject.OnDeserializeDelta(reader);
         }
     }
 }
예제 #4
0
        private void DeSerializeObjectsDelta(NetworkReader reader)
        {
            var dirty = reader.ReadPackedUInt64();

            for (var i = 0; i < syncObjects.Count; i++)
            {
                var syncObject = syncObjects[i];
                if ((dirty & (1UL << i)) != 0)
                {
                    syncObject.OnDeserializeDelta(reader);
                }
            }
        }
예제 #5
0
 public void Deserialize(NetworkReader reader)
 {
     netId         = reader.ReadPackedUInt32();
     isLocalPlayer = reader.ReadBoolean();
     sceneId       = reader.ReadPackedUInt64();
     if (sceneId == 0)
     {
         assetId = reader.ReadGuid();
     }
     position = reader.ReadVector3();
     rotation = reader.ReadQuaternion();
     scale    = reader.ReadVector3();
     payload  = reader.ReadBytesAndSizeSegment();
 }
예제 #6
0
        internal void OnDeserializeAllSafely(NetworkBehaviour[] components, NetworkReader reader, bool initialState)
        {
            // read component dirty mask
            ulong dirtyComponentsMask = reader.ReadPackedUInt64();

            // loop through all components and deserialize the dirty ones
            for (int i = 0; i < components.Length; ++i)
            {
                // is the dirty bit at position 'i' set to 1?
                ulong dirtyBit = (ulong)(1L << i);
                if ((dirtyComponentsMask & dirtyBit) != 0L)
                {
                    OnDeserializeSafely(components[i], reader, initialState);
                }
            }
        }
        void ReadParameters(NetworkReader reader)
        {
            ulong dirtyBits = reader.ReadPackedUInt64();

            for (int i = 0; i < namesParameters.Length; i++)
            {
                if ((dirtyBits & (1ul << i)) == 0)
                {
                    continue;
                }

                if (i < lastFloatParameters.Length)
                {
                    float newFloatValue = reader.ReadSingle();
                    m_Motion.motionGraph.SetFloat(Animator.StringToHash(namesParameters[i]), newFloatValue);
                }
                else if (i >= lastFloatParameters.Length &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length))
                {
                    int newIntValue = reader.ReadPackedInt32();
                    m_Motion.motionGraph.SetInt(Animator.StringToHash(namesParameters[i]), newIntValue);
                }
                else if (i >= (lastFloatParameters.Length + lastIntParameters.Length) &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length))
                {
                    bool newBoolValue = reader.ReadBoolean();
                    m_Motion.motionGraph.SetSwitch(Animator.StringToHash(namesParameters[i]), newBoolValue);
                }
                else if (i >= (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length) &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length + lastVectorParameters.Length))
                {
                    Vector3 newVectorValue = reader.ReadVector3();
                    m_Motion.motionGraph.SetVector(Animator.StringToHash(namesParameters[i]), newVectorValue);
                }
                else if (i >= (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length + lastVectorParameters.Length) &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length + lastVectorParameters.Length + lastTransformParameters.Length))
                {
                    Transform newTransformValue = reader.ReadTransform();
                    m_Motion.motionGraph.SetTransform(Animator.StringToHash(namesParameters[i]), newTransformValue);
                }
            }
        }
예제 #8
0
        void ReadParameters(NetworkReader reader)
        {
            // need to read values from NetworkReader even if animator is disabled

            ulong dirtyBits = reader.ReadPackedUInt64();

            for (int i = 0; i < parameters.Length; i++)
            {
                if ((dirtyBits & (1ul << i)) == 0)
                {
                    continue;
                }

                AnimatorControllerParameter par = parameters[i];
                switch (par.type)
                {
                case AnimatorControllerParameterType.Int:
                {
                    int newIntValue = reader.ReadPackedInt32();
                    SetInteger(par, newIntValue);
                    break;
                }

                case AnimatorControllerParameterType.Float:
                {
                    float newFloatValue = reader.ReadSingle();
                    SetFloat(par, newFloatValue);
                    break;
                }

                case AnimatorControllerParameterType.Bool:
                {
                    bool newBoolValue = reader.ReadBoolean();
                    SetBool(par, newBoolValue);
                    break;
                }
                }
            }
        }
예제 #9
0
        void ReadParameters(NetworkReader reader)
        {
            ulong dirtyBits = reader.ReadPackedUInt64();

            for (int i = 0; i < parameters.Length; i++)
            {
                if ((dirtyBits & (1ul << i)) == 0)
                {
                    continue;
                }

                AnimatorControllerParameter par = parameters[i];
                if (par.type == AnimatorControllerParameterType.Int)
                {
                    int newIntValue = reader.ReadPackedInt32();
                    animator.SetInteger(par.nameHash, newIntValue);
                }
                else if (par.type == AnimatorControllerParameterType.Float)
                {
                    float newFloatValue = reader.ReadSingle();
                    // If interpolating, set the target. Otherwise, set the value immediately.
                    if (interpolateFloatParameters)
                    {
                        floatParametersTargets[i] = newFloatValue;
                    }
                    else
                    {
                        animator.SetFloat(par.nameHash, newFloatValue);
                    }
                }
                else if (par.type == AnimatorControllerParameterType.Bool)
                {
                    bool newBoolValue = reader.ReadBoolean();
                    animator.SetBool(par.nameHash, newBoolValue);
                }
            }
        }
예제 #10
0
        // zigzag decoding https://gist.github.com/mfuerstenau/ba870a29e16536fdbaba
        public static long ReadPackedInt64(this NetworkReader reader)
        {
            ulong data = reader.ReadPackedUInt64();

            return(((long)(data >> 1)) ^ -((long)data & 1));
        }
예제 #11
0
 // http://sqlite.org/src4/doc/trunk/www/varint.wiki
 // NOTE: big endian.
 // Use checked() to force it to throw OverflowException if data is invalid
 public static uint ReadPackedUInt32(this NetworkReader reader) => checked ((uint)reader.ReadPackedUInt64());