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); }
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()), });
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)))); }
public BinaryOperatorContext(ScenarioTag.ScriptSyntaxNode node, SyntaxKind operatorSyntaxKind, ScriptDataType returnType) : base(node) { this.operatorSyntaxKind = operatorSyntaxKind; this.OwnDataType = returnType; }
public static InterpreterResult From(object?v, ScriptDataType t = ScriptDataType.Entity) => new InterpreterResult() { Object = v, DataType = t };
public SingleExpressionStatementContext(ScenarioTag.ScriptSyntaxNode node, ScriptDataType scopeType) : base(node) { this.OwnDataType = scopeType; }
public static InterpreterResult From(ushort v, ScriptDataType t = ScriptDataType.Short) => new InterpreterResult() { Short = (short)v, DataType = t };
public static InterpreterResult From(float v, ScriptDataType t = ScriptDataType.Float) => new InterpreterResult() { Float = v, DataType = t };
public static InterpreterResult From(bool v, ScriptDataType t = ScriptDataType.Boolean) => new InterpreterResult() { Boolean = v, DataType = t };
public static InterpreterResult From(uint v, ScriptDataType t = ScriptDataType.Int) => new InterpreterResult() { Int = (int)v, DataType = t };
public Scope(ScriptDataType type, IGenerationContext context, IStatementContext nearestStatements) { this.Type = type; this.StatementContext = nearestStatements; this.Context = context; }
public BeginRandomContext(ScenarioTag.ScriptSyntaxNode node, ScriptDataType type) : base(node) { this.OwnDataType = type; }
public SleepUntilContext(ScenarioTag.ScriptSyntaxNode node, ScriptDataType returnType) : base(node) { this.ReturnType = returnType; }
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()); }
public BeginCallContext(ScenarioTag.ScriptSyntaxNode node, Scope context, ScriptDataType returnType) : base(node) { this.returnType = returnType; }
public MethodCallContext(ScenarioTag.ScriptSyntaxNode node, string methodName, ScriptDataType returnType) : base(node) { this.MethodName = methodName; this.ReturnType = returnType; }
public static SyntaxAnnotation TypeAnnotation(ScriptDataType t) => new SyntaxAnnotation(TypeAnnotationKind, ((int)t).ToString());