示例#1
0
        private void GetVariableValues(List <FsmVariableData> varData, AssetNameResolver namer, AssetTypeValueField variables)
        {
            AssetTypeValueField floatVariables      = variables.Get("floatVariables");
            AssetTypeValueField intVariables        = variables.Get("intVariables");
            AssetTypeValueField boolVariables       = variables.Get("boolVariables");
            AssetTypeValueField stringVariables     = variables.Get("stringVariables");
            AssetTypeValueField vector2Variables    = variables.Get("vector2Variables");
            AssetTypeValueField vector3Variables    = variables.Get("vector3Variables");
            AssetTypeValueField colorVariables      = variables.Get("colorVariables");
            AssetTypeValueField rectVariables       = variables.Get("rectVariables");
            AssetTypeValueField quaternionVariables = variables.Get("quaternionVariables");
            AssetTypeValueField gameObjectVariables = variables.Get("gameObjectVariables");
            AssetTypeValueField objectVariables     = variables.Get("objectVariables");
            AssetTypeValueField materialVariables   = variables.Get("materialVariables");
            AssetTypeValueField textureVariables    = variables.Get("textureVariables");
            AssetTypeValueField arrayVariables      = variables.Get("arrayVariables");
            AssetTypeValueField enumVariables       = variables.Get("enumVariables");
            FsmVariableData     floats = new FsmVariableData()
            {
                Type = "Floats", Values = new List <Tuple <string, object> >()
            };

            varData.Add(floats);
            for (int i = 0; i < floatVariables.GetValue().AsArray().size; i++)
            {
                string name  = floatVariables.Get(i).Get("name").GetValue().AsString();
                object value = floatVariables.Get(i).Get("value").GetValue().AsFloat();
                floats.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData ints = new FsmVariableData()
            {
                Type = "Ints", Values = new List <Tuple <string, object> >()
            };

            varData.Add(ints);
            for (int i = 0; i < intVariables.GetValue().AsArray().size; i++)
            {
                string name  = intVariables.Get(i).Get("name").GetValue().AsString();
                object value = intVariables.Get(i).Get("value").GetValue().AsInt();
                ints.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData bools = new FsmVariableData()
            {
                Type = "Bools", Values = new List <Tuple <string, object> >()
            };

            varData.Add(bools);
            for (int i = 0; i < boolVariables.GetValue().AsArray().size; i++)
            {
                string name  = boolVariables.Get(i).Get("name").GetValue().AsString();
                object value = boolVariables.Get(i).Get("value").GetValue().AsBool().ToString();
                bools.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData strings = new FsmVariableData()
            {
                Type = "Strings", Values = new List <Tuple <string, object> >()
            };

            varData.Add(strings);
            for (int i = 0; i < stringVariables.GetValue().AsArray().size; i++)
            {
                string name  = stringVariables.Get(i).Get("name").GetValue().AsString();
                object value = stringVariables.Get(i).Get("value").GetValue().AsString();
                strings.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData vector2s = new FsmVariableData()
            {
                Type = "Vector2s", Values = new List <Tuple <string, object> >()
            };

            varData.Add(vector2s);
            for (int i = 0; i < vector2Variables.GetValue().AsArray().size; i++)
            {
                string name = vector2Variables.Get(i).Get("name").GetValue().AsString();
                AssetTypeValueField vector2 = vector2Variables.Get(i).Get("value");
                object value = new Vector2(vector2);
                vector2s.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData vector3s = new FsmVariableData()
            {
                Type = "Vector3s", Values = new List <Tuple <string, object> >()
            };

            varData.Add(vector3s);
            for (int i = 0; i < vector3Variables.GetValue().AsArray().size; i++)
            {
                string name = vector3Variables.Get(i).Get("name").GetValue().AsString();
                AssetTypeValueField vector3 = vector3Variables.Get(i).Get("value");
                object value = new Vector2(vector3);
                vector3s.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData colors = new FsmVariableData()
            {
                Type = "Colors", Values = new List <Tuple <string, object> >()
            };

            varData.Add(colors);
            for (int i = 0; i < colorVariables.GetValue().AsArray().size; i++)
            {
                string name = colorVariables.Get(i).Get("name").GetValue().AsString();
                AssetTypeValueField color = colorVariables.Get(i).Get("value");
                object value = new UnityColor(color);
                colors.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData rects = new FsmVariableData()
            {
                Type = "Rects", Values = new List <Tuple <string, object> >()
            };

            varData.Add(rects);
            for (int i = 0; i < rectVariables.GetValue().AsArray().size; i++)
            {
                string name = rectVariables.Get(i).Get("name").GetValue().AsString();
                AssetTypeValueField rect = rectVariables.Get(i).Get("value");
                object value             = new UnityRect(rect);
                rects.Values.Add(new Tuple <string, object>(name, value));
            }
            FsmVariableData quaternions = new FsmVariableData()
            {
                Type = "Quaternions", Values = new List <Tuple <string, object> >()
            };

            varData.Add(quaternions);
            for (int i = 0; i < quaternionVariables.GetValue().AsArray().size; i++)
            {
                string name = quaternionVariables.Get(i).Get("name").GetValue().AsString();
                AssetTypeValueField quaternion = quaternionVariables.Get(i).Get("value");
                object value = new Quaternion(quaternion);
                quaternions.Values.Add(new Tuple <string, object>(name, value));
            }
            string[] pptrTypeHeaders             = new[] { "GameObjects", "Objects", "Materials", "Textures" };
            AssetTypeValueField[] pptrTypeFields = new[] { gameObjectVariables, objectVariables, materialVariables, textureVariables };
            for (int j = 0; j < pptrTypeHeaders.Length; j++)
            {
                string header             = pptrTypeHeaders[j];
                AssetTypeValueField field = pptrTypeFields[j];

                if (field.IsDummy())
                {
                    continue;
                }

                FsmVariableData genericData = new FsmVariableData()
                {
                    Type = header, Values = new List <Tuple <string, object> >()
                };
                varData.Add(genericData);
                for (int i = 0; i < field.GetValue().AsArray().size; i++)
                {
                    string name = field.Get(i).Get("name").GetValue().AsString();
                    AssetTypeValueField valueField = field.Get(i).Get("value");
                    NamedAssetPPtr      pptr       = StructUtil.ReadNamedAssetPPtr(namer, valueField);
                    object value;
                    if (pptr.pathID == 0)
                    {
                        value = "[null]";
                    }
                    else
                    {
                        value = pptr;
                    }
                    genericData.Values.Add(new Tuple <string, object>(name, value));
                }
            }
        }
示例#2
0
 private void ExecuteRemoveCloudColorCommand(UnityColor customColor)
 {
     this.SelectedPlanetType.CloudColors.Remove(customColor);
 }
示例#3
0
        public static object GetFsmObject(this ActionData actionData, int index, int dataVersion)
        {
            BinaryReader r = new BinaryReader(new MemoryStream(actionData.byteData.ToArray()));
            //string actionName = actionData.actionNames[index];
            ParamDataType paramDataType     = actionData.paramDataType[index];
            int           paramDataPos      = actionData.paramDataPos[index];
            int           paramByteDataSize = actionData.paramByteDataSize[index];

            r.BaseStream.Position = paramDataPos;

            object ret;

            switch (paramDataType)
            {
            case ParamDataType.Integer:
                ret = r.ReadInt32();
                break;

            case ParamDataType.FsmInt when dataVersion == 1:
                ret = new FsmInt()
                {
                    value = r.ReadInt32()
                };
                break;

            case ParamDataType.Enum:
                ret = r.ReadInt32();
                //ret = ((Enum)AssemblyHelper.GetPublicFields(typeDef)[index])[ret];
                break;

            case ParamDataType.Boolean:
                ret = r.ReadBoolean();
                break;

            case ParamDataType.FsmBool when dataVersion == 1:
                ret = new FsmBool {
                    value = r.ReadBoolean()
                };
                break;

            case ParamDataType.Float:
                ret = r.ReadSingle();
                break;

            case ParamDataType.FsmFloat when dataVersion == 1:
                ret = new FsmFloat {
                    value = r.ReadSingle()
                };
                break;

            case ParamDataType.String:
                ret = Encoding.UTF8.GetString(r.ReadBytes(paramByteDataSize));
                break;

            case ParamDataType.FsmEvent when dataVersion == 1:
                ret = new FsmEvent {
                    name = Encoding.UTF8.GetString(r.ReadBytes(paramByteDataSize))
                };
                break;

            case ParamDataType.Vector2:
                ret = new Vector2 {
                    x = r.ReadSingle(), y = r.ReadSingle()
                };
                break;

            case ParamDataType.FsmVector2 when dataVersion == 1:
                ret = new FsmVector2 {
                    value = new Vector2 {
                        x = r.ReadSingle(), y = r.ReadSingle()
                    }
                };
                break;

            case ParamDataType.Vector3:
                ret = new Vector3 {
                    x = r.ReadSingle(), y = r.ReadSingle(), z = r.ReadSingle()
                };
                break;

            case ParamDataType.FsmVector3 when dataVersion == 1:
                ret = new FsmVector3 {
                    value = new Vector3 {
                        x = r.ReadSingle(), y = r.ReadSingle(), z = r.ReadSingle()
                    }
                };
                break;

            case ParamDataType.Quaternion:
                ret = new Quaternion {
                    x = r.ReadSingle(), y = r.ReadSingle(), z = r.ReadSingle(), w = r.ReadSingle()
                };
                break;

            case ParamDataType.FsmQuaternion when dataVersion == 1:
                ret = new FsmQuaternion {
                    value = new Quaternion {
                        x = r.ReadSingle(), y = r.ReadSingle(), z = r.ReadSingle(), w = r.ReadSingle()
                    }
                };
                break;

            case ParamDataType.Color:
                ret = new UnityColor {
                    r = r.ReadSingle(), g = r.ReadSingle(), b = r.ReadSingle(), a = r.ReadSingle()
                };
                break;

            case ParamDataType.FsmColor when dataVersion == 1:
                ret = new FsmColor {
                    value = new UnityColor {
                        r = r.ReadSingle(), g = r.ReadSingle(), b = r.ReadSingle(), a = r.ReadSingle()
                    }
                };
                break;

            case ParamDataType.Rect:
                ret = new UnityRect {
                    x = r.ReadSingle(), y = r.ReadSingle(), width = r.ReadSingle(), height = r.ReadSingle()
                };
                break;

            case ParamDataType.FsmRect when dataVersion == 1:
                ret = new FsmRect {
                    value = new UnityRect {
                        x = r.ReadSingle(), y = r.ReadSingle(), width = r.ReadSingle(), height = r.ReadSingle()
                    }
                };
                break;

            /////////////////////////////////////////////////////////
            case ParamDataType.FsmEnum when dataVersion > 1:
                ret = actionData.fsmEnumParams[paramDataPos];
                break;

            case ParamDataType.FsmBool when dataVersion > 1:
                ret = actionData.fsmBoolParams[paramDataPos];
                break;

            case ParamDataType.FsmInt when dataVersion > 1:
                ret = actionData.fsmIntParams[paramDataPos];
                break;

            case ParamDataType.FsmFloat when dataVersion > 1:
                ret = actionData.fsmFloatParams[paramDataPos];
                break;

            case ParamDataType.FsmVector2 when dataVersion > 1:
                ret = actionData.fsmVector2Params[paramDataPos];
                break;

            case ParamDataType.FsmVector3 when dataVersion > 1:
                ret = actionData.fsmVector3Params[paramDataPos];
                break;

            case ParamDataType.FsmQuaternion when dataVersion > 1:
                ret = actionData.fsmQuaternionParams[paramDataPos];
                break;

            case ParamDataType.FsmColor when dataVersion > 1:
                ret = actionData.fsmColorParams[paramDataPos];
                break;

            case ParamDataType.FsmRect when dataVersion > 1:
                ret = actionData.fsmRectParams[paramDataPos];
                break;

            /////////////////////////////////////////////////////////
            case ParamDataType.FsmGameObject:
                ret = actionData.fsmGameObjectParams[paramDataPos];
                break;

            case ParamDataType.FsmOwnerDefault:
                ret = actionData.fsmOwnerDefaultParams[paramDataPos];
                break;

            case ParamDataType.FsmObject:
                ret = actionData.fsmObjectParams[paramDataPos];
                break;

            case ParamDataType.FsmVar:
                ret = actionData.fsmVarParams[paramDataPos];
                break;

            case ParamDataType.FsmString:
                ret = actionData.fsmStringParams[paramDataPos];
                break;

            case ParamDataType.FsmEvent:
                ret = actionData.stringParams[paramDataPos];
                break;

            case ParamDataType.FsmEventTarget:
                ret = actionData.fsmEventTargetParams[paramDataPos];
                break;

            case ParamDataType.FsmArray:
                ret = actionData.fsmArrayParams[paramDataPos];
                break;

            case ParamDataType.ObjectReference:
                ret = $"ObjRef([{actionData.unityObjectParams[paramDataPos]}])";
                break;

            case ParamDataType.FunctionCall:
                ret = actionData.functionCallParams[paramDataPos];
                break;

            case ParamDataType.Array:
                ret = "[Array]";
                break;

            default:
                ret = $"[{paramDataType.ToString()} not implemented]";
                break;
            }

            if (dataVersion == 1 && ret is NamedVariable nv)
            {
                switch (paramDataType)
                {
                case ParamDataType.FsmInt:
                case ParamDataType.FsmBool:
                case ParamDataType.FsmFloat:
                case ParamDataType.FsmVector2:
                case ParamDataType.FsmVector3:
                case ParamDataType.FsmQuaternion:
                case ParamDataType.FsmColor:
                    nv.useVariable = r.ReadBoolean();
                    int nameLength = paramByteDataSize - ((int)r.BaseStream.Position - paramDataPos);
                    nv.name = Encoding.UTF8.GetString(r.ReadBytes(nameLength));
                    break;
                }
            }

            return(ret);
        }
示例#4
0
        public override string ToString()
        {
            object value = null;

            switch (type)
            {
            case VariableType.Float:
                value = floatValue;
                break;

            case VariableType.Int:
                value = intValue;
                break;

            case VariableType.Bool:
                value = boolValue;
                break;

            case VariableType.String:
                value = stringValue;
                break;

            case VariableType.Vector2:
                value = new Vector2()
                {
                    x = vector4Value.x, y = vector4Value.y
                };
                break;

            case VariableType.Vector3:
                value = new Vector3()
                {
                    x = vector4Value.x, y = vector4Value.y, z = vector4Value.z
                };
                break;

            case VariableType.Object:
            case VariableType.GameObject:
            case VariableType.Material:
            case VariableType.Texture:
                value = objectReference;
                break;

            case VariableType.Color:
                value = new UnityColor()
                {
                    r = vector4Value.x, g = vector4Value.y, b = vector4Value.z, a = vector4Value.w
                };
                break;

            case VariableType.Rect:
                value = new UnityRect()
                {
                    x = vector4Value.x, y = vector4Value.y, width = vector4Value.z, height = vector4Value.w
                };
                break;

            case VariableType.Quaternion:
                value = new Quaternion()
                {
                    x = vector4Value.x, y = vector4Value.y, z = vector4Value.z, w = vector4Value.w
                };
                break;

            case VariableType.Array:
                value = arrayValue;
                break;
            }
            if (value != null)
            {
                object valueObj;
                if (value is NamedAssetPPtr namedPPtr && namedPPtr.name != "")
                {
                    valueObj = namedPPtr.name;
                }
                else
                {
                    valueObj = value;
                }

                if (variableName != "")
                {
                    return($"Var {variableName} = {valueObj}");
                }
                else
                {
                    return($"Var unnamed = {valueObj}");
                }
            }