示例#1
0
 // Token: 0x060059FA RID: 23034 RVA: 0x001F4220 File Offset: 0x001F2620
 private void VerifyType <T>(VRC_DataStorage.VrcDataElement data)
 {
     if (typeof(T) == typeof(float))
     {
         if (data.type != VRC_DataStorage.VrcDataType.Float)
         {
             Debug.LogError("VRCSDK2.VRC_DataStorage: " + data.name + " is not a float");
         }
     }
     else if (typeof(T) == typeof(string) && data.type != VRC_DataStorage.VrcDataType.String)
     {
         Debug.LogError("VRCSDK2.VRC_DataStorage: " + data.name + " is not a String");
     }
 }
示例#2
0
    // Token: 0x06005A00 RID: 23040 RVA: 0x001F4A64 File Offset: 0x001F2E64
    public static bool Deserialize(VRC_DataStorage.VrcDataElement ds, out object obj)
    {
        obj = null;
        switch (ds.type)
        {
        case VRC_DataStorage.VrcDataType.None:
            obj = null;
            return(true);

        case VRC_DataStorage.VrcDataType.Bool:
            obj = ds.valueBool;
            return(true);

        case VRC_DataStorage.VrcDataType.Int:
            obj = ds.valueInt;
            return(true);

        case VRC_DataStorage.VrcDataType.Float:
            obj = ds.valueFloat;
            return(true);

        case VRC_DataStorage.VrcDataType.String:
            obj = ds.valueString;
            return(true);

        case VRC_DataStorage.VrcDataType.SerializeBytes:
            obj = ds.valueSerializedBytes;
            return(true);

        case VRC_DataStorage.VrcDataType.SerializeObject:
            if (ds.serializeComponent == null)
            {
                return(false);
            }
            ds.serializeComponent.SetBytes(ds.valueSerializedBytes);
            return(true);

        case VRC_DataStorage.VrcDataType.Other:
        {
            object[] array = VRC_Serialization.ParameterDecoder(ds.valueSerializedBytes, false);
            obj = ((array != null && array.Length != 0) ? array[0] : null);
            return(true);
        }

        default:
            Debug.LogError("Unable to handle " + ds.type.ToString());
            return(false);
        }
    }
示例#3
0
 // Token: 0x060059FF RID: 23039 RVA: 0x001F4950 File Offset: 0x001F2D50
 public static bool Serialize(VRC_DataStorage.VrcDataElement ds, object objectToStore)
 {
     ds.added    = (ds.type == VRC_DataStorage.VrcDataType.None);
     ds.modified = true;
     if (objectToStore is bool)
     {
         ds.valueBool = (bool)objectToStore;
         ds.type      = VRC_DataStorage.VrcDataType.Bool;
         return(true);
     }
     if (objectToStore is int)
     {
         ds.valueInt = (int)objectToStore;
         ds.type     = VRC_DataStorage.VrcDataType.Int;
         return(true);
     }
     if (objectToStore is float)
     {
         ds.valueFloat = (float)objectToStore;
         ds.type       = VRC_DataStorage.VrcDataType.Float;
         return(true);
     }
     if (objectToStore is string)
     {
         ds.valueString = (string)objectToStore;
         ds.type        = VRC_DataStorage.VrcDataType.String;
         return(true);
     }
     if (objectToStore is byte[])
     {
         ds.valueSerializedBytes = (byte[])objectToStore;
         ds.type = VRC_DataStorage.VrcDataType.SerializeBytes;
         return(true);
     }
     if (objectToStore is VRC_SerializableBehaviour)
     {
         ds.serializeComponent   = (VRC_SerializableBehaviour)objectToStore;
         ds.valueSerializedBytes = ((VRC_SerializableBehaviour)objectToStore).GetBytes();
         ds.type = VRC_DataStorage.VrcDataType.SerializeObject;
         return(true);
     }
     ds.valueSerializedBytes = VRC_Serialization.ParameterEncoder(new object[]
     {
         objectToStore
     });
     ds.type = VRC_DataStorage.VrcDataType.Other;
     return(true);
 }
示例#4
0
    // Token: 0x06005A02 RID: 23042 RVA: 0x001F4B84 File Offset: 0x001F2F84
    private static void SerializeDataStorage(VRC_DataStorageInternal dataStorage, PhotonStream stream)
    {
        if (dataStorage == null)
        {
            stream.SendNext(0);
        }
        else
        {
            stream.SendNext(dataStorage.GetElementCount());
            for (int i = 0; i < dataStorage.GetElementCount(); i++)
            {
                VRC_DataStorage.VrcDataElement element = dataStorage.GetElement(i);
                stream.SendNext(element.type);
                stream.SendNext(element.name);
                stream.SendNext(element.mirror);
                switch (element.type)
                {
                case VRC_DataStorage.VrcDataType.Bool:
                    stream.SendNext(dataStorage.Get <bool>(i));
                    break;

                case VRC_DataStorage.VrcDataType.Int:
                    stream.SendNext(dataStorage.Get <int>(i));
                    break;

                case VRC_DataStorage.VrcDataType.Float:
                    stream.SendNext(dataStorage.Get <float>(i));
                    break;

                case VRC_DataStorage.VrcDataType.String:
                    stream.SendNext(dataStorage.Get <string>(i));
                    break;

                case VRC_DataStorage.VrcDataType.SerializeBytes:
                case VRC_DataStorage.VrcDataType.SerializeObject:
                case VRC_DataStorage.VrcDataType.Other:
                {
                    byte[] obj = dataStorage.Get <byte[]>(i);
                    stream.SendNext(obj);
                    break;
                }
                }
            }
        }
    }
示例#5
0
    // Token: 0x06005A03 RID: 23043 RVA: 0x001F4CA8 File Offset: 0x001F30A8
    private static void DeserializeDataStorage(VRC_DataStorageInternal dataStorage, PhotonStream stream)
    {
        int count = (int)stream.ReceiveNext();

        if (dataStorage != null)
        {
            dataStorage.Resize(count);
        }
        for (int i = 0; i < dataStorage.GetElementCount(); i++)
        {
            VRC_DataStorage.VrcDataElement element = dataStorage.GetElement(i);
            element.type   = (VRC_DataStorage.VrcDataType)stream.ReceiveNext();
            element.name   = (string)stream.ReceiveNext();
            element.mirror = (VRC_DataStorage.VrcDataMirror)stream.ReceiveNext();
            switch (element.type)
            {
            case VRC_DataStorage.VrcDataType.Bool:
                dataStorage.Set <bool>(i, (bool)stream.ReceiveNext());
                break;

            case VRC_DataStorage.VrcDataType.Int:
                dataStorage.Set <int>(i, (int)stream.ReceiveNext());
                break;

            case VRC_DataStorage.VrcDataType.Float:
                dataStorage.Set <float>(i, (float)stream.ReceiveNext());
                break;

            case VRC_DataStorage.VrcDataType.String:
                dataStorage.Set <string>(i, (string)stream.ReceiveNext());
                break;

            case VRC_DataStorage.VrcDataType.SerializeBytes:
            case VRC_DataStorage.VrcDataType.SerializeObject:
            case VRC_DataStorage.VrcDataType.Other:
            {
                byte[] value = (byte[])stream.ReceiveNext();
                dataStorage.Set <byte[]>(i, value);
                break;
            }
            }
        }
    }
示例#6
0
    // Token: 0x060059FE RID: 23038 RVA: 0x001F45F8 File Offset: 0x001F29F8
    public void Set <T>(int index, T value)
    {
        VRC_DataStorage.VrcDataElement vrcDataElement = this.dataStorage.data[index];
        this.VerifyType <T>(vrcDataElement);
        if (this.dataHash != null && this.dataHash.Length > index)
        {
            this.dataHash[index] = null;
        }
        vrcDataElement.added = (vrcDataElement.type == VRC_DataStorage.VrcDataType.None);
        if (typeof(T) == typeof(bool))
        {
            vrcDataElement.valueBool = (bool)((object)value);
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                this._rainMemory.SetItem <T>(vrcDataElement.name, value);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                if ((bool)((object)value))
                {
                    Debug.Log("True");
                }
                this._animator.SetBool(vrcDataElement.name, (bool)((object)value));
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
        }
        else if (typeof(T) == typeof(int))
        {
            vrcDataElement.valueInt = (int)((object)value);
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                this._rainMemory.SetItem <T>(vrcDataElement.name, value);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                this._animator.SetInteger(vrcDataElement.name, (int)((object)value));
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
        }
        else if (typeof(T) == typeof(float))
        {
            vrcDataElement.valueFloat = (float)((object)value);
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                this._rainMemory.SetItem <T>(vrcDataElement.name, value);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                this._animator.SetFloat(vrcDataElement.name, (float)((object)value));
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
        }
        else if (typeof(T) == typeof(string))
        {
            vrcDataElement.valueString = (string)((object)value);
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                this._rainMemory.SetItem <T>(vrcDataElement.name, value);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                Debug.LogError("Cant set animator string");
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
        }
        else if (typeof(T) == typeof(Array) || typeof(T) == typeof(byte[]))
        {
            vrcDataElement.valueSerializedBytes = (byte[])((object)value);
            VRC_DataStorage.VrcDataMirror mirror = vrcDataElement.mirror;
            if (mirror != VRC_DataStorage.VrcDataMirror.None)
            {
                if (mirror != VRC_DataStorage.VrcDataMirror.SerializeComponent)
                {
                    Debug.LogError("Add Data Mirroring.");
                }
                else
                {
                    vrcDataElement.serializeComponent.SetBytes(vrcDataElement.valueSerializedBytes);
                }
            }
        }
        else
        {
            vrcDataElement.Serialize <T>(value);
        }
    }
示例#7
0
    // Token: 0x060059FC RID: 23036 RVA: 0x001F42CC File Offset: 0x001F26CC
    public T Get <T>(int index)
    {
        VRC_DataStorage.VrcDataElement vrcDataElement = this.dataStorage.data[index];
        this.VerifyType <T>(vrcDataElement);
        if (typeof(T) == typeof(bool))
        {
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                vrcDataElement.valueBool = (bool)this._rainMemory.GetItem(vrcDataElement.name);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                vrcDataElement.valueBool = this._animator.GetBool(vrcDataElement.name);
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
            return((T)((object)vrcDataElement.valueBool));
        }
        if (typeof(T) == typeof(int))
        {
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                vrcDataElement.valueInt = (int)this._rainMemory.GetItem(vrcDataElement.name);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                vrcDataElement.valueInt = this._animator.GetInteger(vrcDataElement.name);
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
            return((T)((object)vrcDataElement.valueInt));
        }
        if (typeof(T) == typeof(float))
        {
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                vrcDataElement.valueFloat = (float)this._rainMemory.GetItem(vrcDataElement.name);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                vrcDataElement.valueFloat = this._animator.GetFloat(vrcDataElement.name);
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
            return((T)((object)vrcDataElement.valueFloat));
        }
        if (typeof(T) == typeof(string))
        {
            switch (vrcDataElement.mirror)
            {
            case VRC_DataStorage.VrcDataMirror.None:
                break;

            case VRC_DataStorage.VrcDataMirror.Rain:
                vrcDataElement.valueString = (string)this._rainMemory.GetItem(vrcDataElement.name);
                break;

            case VRC_DataStorage.VrcDataMirror.Animator:
                Debug.LogError("Cant get animator string");
                break;

            default:
                Debug.LogError("Add Data Mirroring.");
                break;
            }
            return((T)((object)vrcDataElement.valueString));
        }
        if (typeof(T) == typeof(Array) || typeof(T) == typeof(byte[]))
        {
            VRC_DataStorage.VrcDataMirror mirror = vrcDataElement.mirror;
            if (mirror != VRC_DataStorage.VrcDataMirror.None)
            {
                if (mirror != VRC_DataStorage.VrcDataMirror.SerializeComponent)
                {
                    Debug.LogError("Add Data Mirroring.");
                }
                else
                {
                    byte[] bytes = vrcDataElement.serializeComponent.GetBytes();
                    vrcDataElement.valueSerializedBytes = bytes;
                }
            }
            return((T)((object)vrcDataElement.valueSerializedBytes));
        }
        T result;

        vrcDataElement.Deserialize <T>(out result);
        return(result);
    }