public void CreateDataInitializer(ScenarioTag scnr)
        {
            var scenarioParam = Identifier("scenarioTag");
            var sceneParam    = Identifier("scene");

            var statements = new List <StatementSyntax>();

            statements.Add(ExpressionStatement(AssignmentExpression(SyntaxKind.SimpleAssignmentExpression,
                                                                    MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, ThisExpression(), IdentifierName(nameof(ScenarioScriptBase.Scenario))),
                                                                    IdentifierName(scenarioParam))));

            for (int i = 0; i < scnr.WellKnownItems.Length; i++)
            {
                var externalRef = scnr.WellKnownItems[i];

                if (externalRef.ItemType != ScenarioTag.WellKnownVarType.Undef && externalRef.Index != ushort.MaxValue)
                {
                    var varType = SyntaxUtil.WellKnownTypeSyntax(externalRef.ItemType);
                    statements.Add(CreateWellKnownAssignment(varType, externalRef.Identifier, i));
                }
            }

            AddSquadInitialization(statements, scnr);

            this.methods.Add(
                MethodDeclaration(
                    PredefinedType(Token(SyntaxKind.VoidKeyword)),
                    nameof(ScenarioScriptBase.InitializeData))
                .AddParameterListParameters(
                    Parameter(scenarioParam).WithType(ParseTypeName(nameof(ScenarioTag))),
                    Parameter(sceneParam).WithType(ParseTypeName(nameof(Scene))))
                .AddModifiers(Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.OverrideKeyword))
                .WithBody(Block(statements)));
        }
        public void AddProperties(ScenarioTag scnr)
        {
            for (int i = 0; i < scnr.WellKnownItems.Length; i++)
            {
                var externalRef = scnr.WellKnownItems[i];

                if (externalRef.ItemType == ScenarioTag.WellKnownVarType.Undef)
                {
                    continue;
                }

                var varType = SyntaxUtil.WellKnownTypeSyntax(externalRef.ItemType);

                AddWellKnownPublicProperty(varType, externalRef.Identifier, i);
            }

            for (int i = 0; i < scnr.CameraPathTargets.Length; i++)
            {
                var cam = scnr.CameraPathTargets[i];
                AddPublicProperty(ScriptDataType.CameraPathTarget, cam.Description, i);
            }

            CreateNestedSquadClasses(scnr);

            for (int i = 0; i < scnr.AiSquadGroupDefinitions.Length; i++)
            {
                var ai = scnr.AiSquadGroupDefinitions[i];
                AddPublicProperty(ScriptDataType.AI, ai.Description, i);
            }

            for (int i = 0; i < scnr.AiOrderDefinitions.Length; i++)
            {
                var order = scnr.AiOrderDefinitions[i];
                AddPublicProperty(ScriptDataType.AIOrders, order.Description, i);
            }

            for (int i = 0; i < scnr.LocationFlagDefinitions.Length; i++)
            {
                var flag = scnr.LocationFlagDefinitions[i];
                AddPublicProperty(ScriptDataType.LocationFlag, flag.Description, i);
            }

            for (int i = 0; i < scnr.CinematicTitleDefinitions.Length; i++)
            {
                var title = scnr.CinematicTitleDefinitions[i];
                AddPublicProperty(ScriptDataType.CinematicTitle, title.Title, i);
            }

            for (int i = 0; i < scnr.TriggerVolumes.Length; i++)
            {
                var tv = scnr.TriggerVolumes[i];
                AddPublicProperty(ScriptDataType.Trigger, tv.Description, i);
            }

            for (int i = 0; i < scnr.StartingProfileDefinitions.Length; i++)
            {
                var profile = scnr.StartingProfileDefinitions[i];
                AddPublicProperty(ScriptDataType.StartingProfile, profile.Description, i);
            }

            for (int i = 0; i < scnr.DeviceGroupDefinitions.Length; i++)
            {
                var group = scnr.DeviceGroupDefinitions[i];
                AddPublicProperty(ScriptDataType.DeviceGroup, group.Description, i);
            }
        }