Ejemplo n.º 1
0
                    public static ScriptData ReadData(Stream stream)
                    {
                        ScriptDataType scriptDataType = (ScriptDataType)stream.ReadByte();

                        if (!(stream.Position < stream.Length - 4))
                        {
                            return(null);
                        }
                        ScriptData scriptData;

                        switch (scriptDataType)
                        {
                        case ScriptDataType.Number:
                            scriptData = new Number(stream);
                            break;

                        case ScriptDataType.Boolean:
                            scriptData = new Boolean(stream);
                            break;

                        case ScriptDataType.String:
                            scriptData = new String(stream);
                            break;

                        case ScriptDataType.Object:
                            scriptData = new Object(stream);
                            break;

                        case ScriptDataType.Reference:
                            scriptData = new Reference(stream);
                            break;

                        case ScriptDataType.EcmaArray:
                            scriptData = new EcmaArray(stream);
                            break;

                        case ScriptDataType.ObjectEndMark:
                            scriptData = new ObjectEndMark(stream);
                            break;

                        case ScriptDataType.StrictArray:
                            scriptData = new StrictArray(stream);
                            break;

                        default:
                            throw new UnsupportedFormat(string.Format("Unsupported Script data type 0x{0}", scriptDataType.ToString("X2")));
                        }
                        return(scriptData);
                    }
Ejemplo n.º 2
0
        public static TypeSyntax ScriptTypeSyntax(ScriptDataType dataType)
        {
            return(dataType switch
            {
                ScriptDataType.Float => PredefinedType(Token(SyntaxKind.FloatKeyword)),
                ScriptDataType.Int => PredefinedType(Token(SyntaxKind.IntKeyword)),
                ScriptDataType.Boolean => PredefinedType(Token(SyntaxKind.BoolKeyword)),
                ScriptDataType.Short => PredefinedType(Token(SyntaxKind.IntKeyword)),
                ScriptDataType.String => PredefinedType(Token(SyntaxKind.StringKeyword)),
                ScriptDataType.Void => PredefinedType(Token(SyntaxKind.VoidKeyword)),

                ScriptDataType.Trigger => ParseTypeName(nameof(ITriggerVolume)),
                ScriptDataType.LocationFlag => ParseTypeName(nameof(ILocationFlag)),
                ScriptDataType.CameraPathTarget => ParseTypeName(nameof(ICameraPathTarget)),
                ScriptDataType.CinematicTitle => ParseTypeName(nameof(ICinematicTitle)),
                ScriptDataType.DeviceGroup => ParseTypeName(nameof(IDeviceGroup)),
                ScriptDataType.AIScript => ParseTypeName(nameof(IAiScript)),
                ScriptDataType.AIOrders => ParseTypeName(nameof(IAiOrders)),
                ScriptDataType.StartingProfile => ParseTypeName(nameof(IStartingProfile)),
                ScriptDataType.Scenery => ParseTypeName(nameof(IScenery)),
                ScriptDataType.Bsp => ParseTypeName(nameof(IBsp)),

                ScriptDataType.Entity => ParseTypeName(nameof(IGameObject)),
                ScriptDataType.Unit => ParseTypeName(nameof(IUnit)),
                ScriptDataType.Vehicle => ParseTypeName(nameof(IVehicle)),
                ScriptDataType.AI => ParseTypeName(nameof(IAiActorDefinition)),
                ScriptDataType.Device => ParseTypeName(nameof(IDevice)),

                ScriptDataType.Sound => ParseTypeName(nameof(SoundTag)),
                ScriptDataType.Model => ParseTypeName(nameof(RenderModelTag)),
                ScriptDataType.Animation => ParseTypeName(nameof(AnimationGraphTag)),
                ScriptDataType.TagReference => ParseTypeName(nameof(BaseTag)),
                ScriptDataType.LoopingSound => ParseTypeName(nameof(LoopingSoundTag)),
                ScriptDataType.Effect => ParseTypeName(nameof(EffectTag)),
                ScriptDataType.DamageEffect => ParseTypeName(nameof(DamageEffectTag)),


                _ => Enum.IsDefined(typeof(ScriptDataType), dataType)
                    ? ParseTypeName("I" + dataType.ToString())
                    : ParseTypeName(nameof(ScriptDataType) + dataType.ToString()),
            });
Ejemplo n.º 3
0
        private void AddPublicProperty(ScriptDataType type, string name, int itemIndex)
        {
            var propName = nameRepo.RegisterName(name, type.ToString(), itemIndex);

            var scnrPropName = type switch
            {
                ScriptDataType.CameraPathTarget => nameof(ScenarioTag.CameraPathTargets),
                ScriptDataType.LocationFlag => nameof(ScenarioTag.LocationFlagDefinitions),
                ScriptDataType.CinematicTitle => nameof(ScenarioTag.CinematicTitleDefinitions),
                ScriptDataType.Trigger => nameof(ScenarioTag.TriggerVolumes),
                ScriptDataType.StartingProfile => nameof(ScenarioTag.StartingProfileDefinitions),
                ScriptDataType.DeviceGroup => nameof(ScenarioTag.DeviceGroupDefinitions),
                ScriptDataType.AI => nameof(ScenarioTag.AiSquadGroupDefinitions),
                ScriptDataType.AIOrders => nameof(ScenarioTag.AiOrderDefinitions),
                _ => throw new Exception("Not support!")
            };

            ExpressionSyntax access = ElementAccessExpression(MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
                                                                                     IdentifierName(nameof(ScenarioScriptBase.Scenario)),
                                                                                     IdentifierName(scnrPropName)))
                                      .AddArgumentListArguments(Argument(SyntaxUtil.LiteralExpression(itemIndex)));

            var scnrProp = ScenarioTagProperties[scnrPropName];

            if (scnrProp.PropertyType.HasElementType &&
                scnrProp.PropertyType.GetElementType().GetInterfaces().Any(i =>
                                                                           i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IGameObjectDefinition <>)))
            {
                access = MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
                                                access,
                                                IdentifierName(nameof(IGameObjectDefinition <object> .GameObject)));
            }

            var prop = PropertyDeclaration(SyntaxUtil.ScriptTypeSyntax(type), propName)
                       .WithExpressionBody(ArrowExpressionClause(access))
                       .WithSemicolonToken(Token(SyntaxKind.SemicolonToken));


            properties.Add(prop.WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword))));
        }
Ejemplo n.º 4
0
 public BinaryOperatorContext(ScenarioTag.ScriptSyntaxNode node, SyntaxKind operatorSyntaxKind, ScriptDataType returnType) : base(node)
 {
     this.operatorSyntaxKind = operatorSyntaxKind;
     this.OwnDataType        = returnType;
 }
Ejemplo n.º 5
0
 public static InterpreterResult From(object?v, ScriptDataType t = ScriptDataType.Entity) => new InterpreterResult()
 {
     Object = v, DataType = t
 };
Ejemplo n.º 6
0
 public SingleExpressionStatementContext(ScenarioTag.ScriptSyntaxNode node, ScriptDataType scopeType) : base(node)
 {
     this.OwnDataType = scopeType;
 }
Ejemplo n.º 7
0
 public static InterpreterResult From(ushort v, ScriptDataType t = ScriptDataType.Short) => new InterpreterResult()
 {
     Short = (short)v, DataType = t
 };
Ejemplo n.º 8
0
 public static InterpreterResult From(float v, ScriptDataType t = ScriptDataType.Float) => new InterpreterResult()
 {
     Float = v, DataType = t
 };
Ejemplo n.º 9
0
 public static InterpreterResult From(bool v, ScriptDataType t = ScriptDataType.Boolean) => new InterpreterResult()
 {
     Boolean = v, DataType = t
 };
Ejemplo n.º 10
0
 public static InterpreterResult From(uint v, ScriptDataType t = ScriptDataType.Int) => new InterpreterResult()
 {
     Int = (int)v, DataType = t
 };
Ejemplo n.º 11
0
 public Scope(ScriptDataType type, IGenerationContext context, IStatementContext nearestStatements)
 {
     this.Type             = type;
     this.StatementContext = nearestStatements;
     this.Context          = context;
 }
Ejemplo n.º 12
0
 public BeginRandomContext(ScenarioTag.ScriptSyntaxNode node, ScriptDataType type) : base(node)
 {
     this.OwnDataType = type;
 }
Ejemplo n.º 13
0
 public SleepUntilContext(ScenarioTag.ScriptSyntaxNode node, ScriptDataType returnType) : base(node)
 {
     this.ReturnType = returnType;
 }
Ejemplo n.º 14
0
    public void OnEventLoaded()
    {
        TextAsset textAsset = GameData.eventObjects["Holiday_Script_Data"] as TextAsset;

        if (textAsset != null)
        {
            string[] array = textAsset.text.Split(new char[1]
            {
                '\n'
            }, StringSplitOptions.RemoveEmptyEntries);
            string[] array2 = array;
            foreach (string text in array2)
            {
                if (text == null || text == string.Empty)
                {
                    continue;
                }
                string[] array3 = text.Split(new char[1]
                {
                    ','
                }, 3);
                string text2 = Convert.ToString(array3[0]);
                text2 = text2.Replace(" ", string.Empty);
                if (text2[0] == '/' && text2[1] == '/')
                {
                    Debug.Log("Commented out: " + text);
                    continue;
                }
                string text3 = Convert.ToString(array3[1]);
                string text4 = Convert.ToString(array3[2]);
                text3 = text3.Replace(" ", string.Empty);
                ScriptDataType scriptDataType = ScriptDataType.Unknown;
                try
                {
                    scriptDataType = (ScriptDataType)(int)Enum.Parse(typeof(ScriptDataType), text2);
                }
                catch (ArgumentException)
                {
                    Logger.traceError(text2 + " is not a valid type");
                }
                switch (scriptDataType)
                {
                case ScriptDataType.Color:
                {
                    Color color = default(Color);
                    text4 = text4.Replace("(", string.Empty);
                    text4 = text4.Replace(")", string.Empty);
                    text4 = text4.Replace(" ", string.Empty);
                    string[] array4 = text4.Split(',');
                    for (int j = 0; j < text4.Length && j < 4; j++)
                    {
                        color[j] = float.Parse(array4[j]);
                    }
                    Debug.Log("adding color [" + text3 + "] = " + color);
                    GameData.eventObjects.Add(text3, color);
                    break;
                }

                case ScriptDataType.String:
                    GameData.eventObjects.Add(text3, text4);
                    Debug.Log("adding string [" + text3 + "] = " + text4);
                    break;

                case ScriptDataType.Int:
                {
                    int num2 = int.Parse(text4);
                    GameData.eventObjects.Add(text3, num2);
                    Debug.Log("adding int [" + text3 + "] = " + num2);
                    break;
                }

                case ScriptDataType.Float:
                {
                    float num = float.Parse(text4);
                    GameData.eventObjects.Add(text3, num);
                    Debug.Log("adding float [" + text3 + "] = " + num);
                    break;
                }
                }
            }
        }
        StartCoroutine(HolidayEvent.OnEventLoaded());
    }
Ejemplo n.º 15
0
 public BeginCallContext(ScenarioTag.ScriptSyntaxNode node, Scope context, ScriptDataType returnType) : base(node)
 {
     this.returnType = returnType;
 }
Ejemplo n.º 16
0
 public MethodCallContext(ScenarioTag.ScriptSyntaxNode node, string methodName, ScriptDataType returnType) : base(node)
 {
     this.MethodName = methodName;
     this.ReturnType = returnType;
 }
Ejemplo n.º 17
0
 public static SyntaxAnnotation TypeAnnotation(ScriptDataType t) => new SyntaxAnnotation(TypeAnnotationKind, ((int)t).ToString());