Ejemplo n.º 1
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.º 2
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.º 3
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);
                    }