Exemple #1
0
        private FVector AsVector(VectorType type)
        {
            _reader.Reset();

            FVector tVector = null;

            switch (type)
            {
            case VectorType.Normal:
                tVector = _reader.SerializePropertyVectorNormal();
                break;

            case VectorType.Vector10:
                tVector = _reader.SerializePropertyVector10();
                break;

            case VectorType.Vector100:
                tVector = _reader.SerializePropertyVector100();
                break;

            case VectorType.Quantize:
                tVector = _reader.SerializePropertyQuantizedVector();
                break;
            }

            if (_reader.IsError || !_reader.AtEnd())
            {
                return(null);
            }

            return(tVector);
        }
        /// <summary>
        /// see https://github.com/EpicGames/UnrealEngine/blob/6c20d9831a968ad3cb156442bebb41a883e62152/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Private/GameplayEffectTypes.cpp#L311
        /// see https://github.com/EpicGames/UnrealEngine/blob/6c20d9831a968ad3cb156442bebb41a883e62152/Engine/Plugins/Runtime/GameplayAbilities/Source/GameplayAbilities/Private/GameplayEffectTypes.cpp#L177
        /// </summary>
        /// <param name="reader"></param>
        public void Serialize(NetBitReader reader)
        {
            var validData = reader.ReadBit();

            if (validData)
            {
                var RepBits = reader.ReadBitsToInt(7);

                if ((RepBits & (1 << 0)) > 0)
                {
                    Instigator = reader.ReadIntPacked();
                }
                if ((RepBits & (1 << 1)) > 0)
                {
                    EffectCauser = reader.ReadIntPacked();
                }
                if ((RepBits & (1 << 2)) > 0)
                {
                    AbilityCDO = reader.ReadIntPacked();
                }
                if ((RepBits & (1 << 3)) > 0)
                {
                    SourceObject = reader.ReadIntPacked();
                }
                if ((RepBits & (1 << 4)) > 0)
                {
                    // SafeNetSerializeTArray_HeaderOnly
                    var bitCount = (int)Math.Ceiling(Math.Log2(31));
                    var arrayNum = reader.ReadBitsToInt(bitCount);

                    // SafeNetSerializeTArray_Default
                    Actors = new ActorGuid[arrayNum];
                    for (var i = 0; i < arrayNum; i++)
                    {
                        Actors[i] = new ActorGuid()
                        {
                            Value = reader.ReadIntPacked()
                        };
                    }
                }
                if ((RepBits & (1 << 5)) > 0)
                {
                    HitResult = new FHitResult(reader);
                }
                if ((RepBits & (1 << 6)) > 0)
                {
                    WorldOrigin     = reader.SerializePropertyVector100();
                    bHasWorldOrigin = true;
                }
                else
                {
                    bHasWorldOrigin = false;
                }
            }
        }
Exemple #3
0
        private FVector AsVector(VectorType type)
        {
            _reader.Reset();

            FVector tVector = type switch
            {
                VectorType.Normal => _reader.SerializePropertyVectorNormal(),
                VectorType.Vector10 => _reader.SerializePropertyVector10(),
                VectorType.Vector100 => _reader.SerializePropertyVector100(),
                VectorType.Quantize => _reader.SerializePropertyQuantizedVector(),
                _ => null
            };

            if (_reader.IsError || !_reader.AtEnd())
            {
                return(null);
            }

            return(tVector);
        }