コード例 #1
0
        public void Save(Uri uri, SchemaLoader schemaLoader)
        {
            if (Dirty || m_uriChanged)
            {
                string   filePath = uri.LocalPath;
                FileMode fileMode = File.Exists(filePath) ? FileMode.Truncate : FileMode.OpenOrCreate;
                using (FileStream stream = new FileStream(filePath, fileMode))
                {
                    var writer = new CustomDomXmlWriter(Globals.ResourceRoot, schemaLoader.TypeCollection);
                    writer.Write(DomNode, stream, uri);
                }
                m_uriChanged = false;
            }

            // save all the game-references
            foreach (var gameRef in GetChildList <GameReference>(Schema.gameType.gameReferenceChild))
            {
                GameDocument subDoc = Adapters.As <GameDocument>(gameRef.Target);
                if (subDoc == null)
                {
                    continue;
                }
                subDoc.Save(subDoc.Uri, schemaLoader);
            }

            Dirty = false;
        }
コード例 #2
0
ファイル: GameDocument.cs プロジェクト: arsaccol/LevelEditor
        public void Save(Uri uri, SchemaLoader schemaLoader)
        {
            if (Dirty || m_uriChanged)
            {                
                string filePath = uri.LocalPath;
                FileMode fileMode = File.Exists(filePath) ? FileMode.Truncate : FileMode.OpenOrCreate;
                using (FileStream stream = new FileStream(filePath, fileMode))
                {
                    var writer = new CustomDomXmlWriter(Globals.ResourceRoot, schemaLoader.TypeCollection);
                    writer.Write(DomNode, stream, uri);
                }
                m_uriChanged = false;
            }
            
            // save all the game-references
            foreach (var gameRef in GetChildList<GameReference>(Schema.gameType.gameReferenceChild))
            {
                GameDocument subDoc = Adapters.As<GameDocument>(gameRef.Target);
                if(subDoc == null) continue;
                subDoc.Save(subDoc.Uri, schemaLoader);                
            }

            Dirty = false;
        }
コード例 #3
0
        /// <summary>
        /// Register DomNodeAdapters </summary>
        public static void Initialize(SchemaLoader schemaLoader)
        {
            // resource meta data
            Schema.resourceMetadataType.Type.Define(new ExtensionInfo <ResourceMetadataDocument>());
            Schema.textureMetadataType.Type.Define(new ExtensionInfo <ResourceMetadataDocument>());

            // game
            Schema.gameType.Type.Define(new ExtensionInfo <Game>());
            Schema.gameType.Type.Define(new ExtensionInfo <GameDocument>());
            Schema.gameType.Type.Define(new ExtensionInfo <IdToDomNode>());
            Schema.gameType.Type.Define(new ExtensionInfo <GameContext>());
            Schema.gameType.Type.Define(new ExtensionInfo <LayeringContext>());
            Schema.gameType.Type.Define(new ExtensionInfo <BookmarkingContext>());
            Schema.gameType.Type.Define(new ExtensionInfo <CustomLockingValidator>());
            Schema.gameType.Type.Define(new ExtensionInfo <UniqueIdValidator>());

            // grid
            Schema.gridType.Type.Define(new ExtensionInfo <Grid>());

            // gob
            Schema.gameObjectType.Type.Define(new ExtensionInfo <GameObject>());
            Schema.gameObjectType.Type.Define(new ExtensionInfo <GameObjectProperties>());
            Schema.gameObjectType.Type.Define(new ExtensionInfo <TransformUpdater>());

            // gob folder
            Schema.gameObjectFolderType.Type.Define(new ExtensionInfo <GameObjectFolder>());

            // gob group
            Schema.gameObjectGroupType.Type.Define(new ExtensionInfo <GameObjectGroup>());

            // prefab
            Schema.objectOverrideType.Type.Define(new ExtensionInfo <ObjectOverride>());
            Schema.attributeOverrideType.Type.Define(new ExtensionInfo <AttributeOverride>());
            Schema.prefabInstanceType.Type.Define(new ExtensionInfo <PrefabInstance>());
            Schema.prefabType.Type.Define(new ExtensionInfo <Prefab>());

            // locator
            Schema.locatorType.Type.Define(new ExtensionInfo <Locator>());

            // curves
            Schema.curveType.Type.Define(new ExtensionInfo <Curve>());
            Schema.controlPointType.Type.Define(new ExtensionInfo <ControlPoint>());
            Schema.catmullRomType.Type.Define(new ExtensionInfo <CatmullRom>());
            Schema.bezierType.Type.Define(new ExtensionInfo <BezierCurves>());

            // lights
            Schema.PointLight.Type.Define(new ExtensionInfo <PointLight>());
            Schema.DirLight.Type.Define(new ExtensionInfo <DirLight>());
            Schema.BoxLight.Type.Define(new ExtensionInfo <BoxLight>());

            // Billboard
            Schema.billboardTestType.Type.Define(new ExtensionInfo <Billboard>());



            // terrain
            Schema.terrainGobType.Type.Define(new ExtensionInfo <TerrainGob>());
            Schema.layerMapType.Type.Define(new ExtensionInfo <LayerMap>());
            Schema.decorationMapType.Type.Define(new ExtensionInfo <DecorationMap>());


            // references
            Schema.gameReferenceType.Type.Define(new ExtensionInfo <GameReference>());
            Schema.resourceReferenceType.Type.Define(new ExtensionInfo <ResourceReference>());
            Schema.gameObjectReferenceType.Type.Define(new ExtensionInfo <GameObjectReference>());


            Schema.layerType.Type.Define(new ExtensionInfo <Layer>());
            Schema.bookmarkType.Type.Define(new ExtensionInfo <Bookmark>());


            string category = "Grid".Localize();

            Schema.gameType.Type.SetTag(
                new PropertyDescriptorCollection(
                    new PropertyDescriptor[]
            {
                new ChildAttributePropertyDescriptor(
                    "Height".Localize(),
                    Schema.gridType.heightAttribute,
                    Schema.gameType.gridChild,
                    category,
                    "Grid's height (along the world's up vector)".Localize(),
                    false),
                new ChildAttributePropertyDescriptor(
                    "Size".Localize(),
                    Schema.gridType.sizeAttribute,
                    Schema.gameType.gridChild,
                    category,
                    "the size of grid step".Localize(),
                    false),
                new ChildAttributePropertyDescriptor(
                    "Subdivisions".Localize(),
                    Schema.gridType.subdivisionsAttribute,
                    Schema.gameType.gridChild,
                    category,
                    "Number of sub-divisions".Localize(),
                    false),

                new ChildAttributePropertyDescriptor(
                    "snap".Localize(),
                    Schema.gridType.snapAttribute,
                    Schema.gameType.gridChild,
                    category,
                    "Snap to grid vertex".Localize(),
                    false),

                new ChildAttributePropertyDescriptor(
                    "Visible".Localize(),
                    Schema.gridType.visibleAttribute,
                    Schema.gameType.gridChild,
                    category,
                    "Grid visibility".Localize(),
                    false)
            }));
        }
コード例 #4
0
        /// <summary>
        /// Open or create new document.
        /// It opens if the file exist otherwise it will creates new document
        /// </summary>
        public static GameDocument OpenOrCreate(Uri uri, SchemaLoader schemaLoader)
        {
            if (!uri.IsAbsoluteUri)
            {
                return(null);
            }

            var docRegistry = Globals.MEFContainer.GetExportedValue <GameDocumentRegistry>();

            GameDocument document = docRegistry.FindDocument(uri) as GameDocument;

            if (document != null)
            {
                return(document);
            }

            string filePath = uri.LocalPath;

            DomNode rootNode = null;

            if (File.Exists(filePath))
            {
                // read existing document using custom dom XML reader
                using (FileStream stream = File.OpenRead(filePath))
                {
                    var reader = new CustomDomXmlReader(Globals.ResourceRoot, schemaLoader);
                    rootNode = reader.Read(stream, uri);
                }
            }
            else
            {
                // create new document by creating a Dom node of the root type defined by the schema
                rootNode = new DomNode(Schema.gameType.Type, Schema.gameRootElement);
                rootNode.SetAttribute(Schema.gameType.nameAttribute, "Game".Localize());
            }


            GameObjectFolder rootFolder = Adapters.As <GameObjectFolder>(rootNode.GetChild(Schema.gameType.gameObjectFolderChild));

            if (rootFolder == null)
            {
                // create the game object folder
                rootFolder      = (GameObjectFolder)GameObjectFolder.Create();
                rootFolder.Name = "GameObjects".Localize("this is the name of a folder in the project lister");
                rootNode.SetChild(Schema.gameType.gameObjectFolderChild, rootFolder.DomNode);
            }


            // create bookmarks
            DomNode bookmarks = rootNode.GetChild(Schema.gameType.bookmarksChild);

            if (bookmarks == null)
            {
                bookmarks = new DomNode(Schema.bookmarksType.Type);
                rootNode.SetChild(Schema.gameType.bookmarksChild, bookmarks);
            }

            DomNode layersNode = rootNode.GetChild(Schema.gameType.layersChild);

            if (layersNode == null)
            {
                layersNode = new DomNode(Schema.layersType.Type);
                rootNode.SetChild(Schema.gameType.layersChild, layersNode);
            }

            // Create the grid
            DomNode gridNode = rootNode.GetChild(Schema.gameType.gridChild);

            if (gridNode == null)
            {
                gridNode = new DomNode(Schema.gridType.Type);
                rootNode.SetChild(Schema.gameType.gridChild, gridNode);
            }

            document     = rootNode.As <GameDocument>();
            document.Uri = uri;

            // Initialize Dom extensions now that the data is complete
            rootNode.InitializeExtensions();

            docRegistry.Add(document);


            UniqueNamer uniqueNamer = new UniqueNamer('_');

            foreach (DomNode node in rootNode.Subtree)
            {
                if (node.Type.IdAttribute != null)
                {
                    uniqueNamer.Name(node.GetId());
                }
            }


            // sync all the prefab instances
            DomNode folderNode = document.RootGameObjectFolder.As <DomNode>();

            foreach (DomNode node in folderNode.Subtree)
            {
                PrefabInstance prefab = node.As <PrefabInstance>();
                if (prefab == null)
                {
                    continue;
                }
                prefab.Resolve(uniqueNamer);
            }

            if (ResolveOnLoad)
            {
                // resovle all the game references.
                foreach (var subGame in document.GetChildList <GameReference>(Schema.gameType.gameReferenceChild))
                {
                    subGame.Resolve();
                }
            }

            document.Dirty = false;
            return(document);
        }
コード例 #5
0
ファイル: GameAdapters.cs プロジェクト: JanDeHud/LevelEditor
        /// <summary>
        /// Register DomNodeAdapters </summary>        
        public static void Initialize(SchemaLoader schemaLoader)
        {
            // resource meta data             
            Schema.resourceMetadataType.Type.Define(new ExtensionInfo<ResourceMetadataDocument>());
            Schema.textureMetadataType.Type.Define(new ExtensionInfo<ResourceMetadataDocument>());
               
            // game
            Schema.gameType.Type.Define(new ExtensionInfo<Game>());                        
            Schema.gameType.Type.Define(new ExtensionInfo<GameDocument>());
            Schema.gameType.Type.Define(new ExtensionInfo<IdToDomNode>());
            Schema.gameType.Type.Define(new ExtensionInfo<GameContext>());            
            Schema.gameType.Type.Define(new ExtensionInfo<LayeringContext>());            
            Schema.gameType.Type.Define(new ExtensionInfo<BookmarkingContext>());
            Schema.gameType.Type.Define(new ExtensionInfo<CustomLockingValidator>());
            Schema.gameType.Type.Define(new ExtensionInfo<UniqueIdValidator>());

            // grid            
            Schema.gridType.Type.Define(new ExtensionInfo<Grid>());

            // gob            
            Schema.gameObjectType.Type.Define(new ExtensionInfo<GameObject>());
            Schema.gameObjectType.Type.Define(new ExtensionInfo<GameObjectProperties>());
            Schema.gameObjectType.Type.Define(new ExtensionInfo<TransformUpdater>());

            // gob folder
            Schema.gameObjectFolderType.Type.Define(new ExtensionInfo<GameObjectFolder>());

            // gob group
            Schema.gameObjectGroupType.Type.Define(new ExtensionInfo<GameObjectGroup>());

            // prefab
            Schema.objectOverrideType.Type.Define(new ExtensionInfo<ObjectOverride>());
            Schema.attributeOverrideType.Type.Define(new ExtensionInfo<AttributeOverride>());                
            Schema.prefabInstanceType.Type.Define(new ExtensionInfo<PrefabInstance>());
            Schema.prefabType.Type.Define(new ExtensionInfo<Prefab>());
            
            // locator
            Schema.locatorType.Type.Define(new ExtensionInfo<Locator>());

            // curves
            Schema.curveType.Type.Define(new ExtensionInfo<Curve>());            
            Schema.controlPointType.Type.Define(new ExtensionInfo<ControlPoint>());
            Schema.catmullRomType.Type.Define(new ExtensionInfo<CatmullRom>());
            Schema.bezierType.Type.Define(new ExtensionInfo<BezierCurves>());

            // lights            
            Schema.PointLight.Type.Define(new ExtensionInfo<PointLight>());            
            Schema.DirLight.Type.Define(new ExtensionInfo<DirLight>());
            Schema.BoxLight.Type.Define(new ExtensionInfo<BoxLight>());

            // Billboard
            Schema.billboardTestType.Type.Define(new ExtensionInfo<Billboard>());
            

            
            // terrain
            Schema.terrainGobType.Type.Define(new ExtensionInfo<TerrainGob>());
            Schema.layerMapType.Type.Define(new ExtensionInfo<LayerMap>());
            Schema.decorationMapType.Type.Define(new ExtensionInfo<DecorationMap>());
            

            // references
            Schema.gameReferenceType.Type.Define(new ExtensionInfo<GameReference>());            
            Schema.resourceReferenceType.Type.Define(new ExtensionInfo<ResourceReference>());
            Schema.gameObjectReferenceType.Type.Define(new ExtensionInfo<GameObjectReference>());
            

            Schema.layerType.Type.Define(new ExtensionInfo<Layer>());                                    
            Schema.bookmarkType.Type.Define(new ExtensionInfo<Bookmark>());


            string category = "Grid".Localize();
            Schema.gameType.Type.SetTag(
                  new PropertyDescriptorCollection(
                      new PropertyDescriptor[]
                    {
                        new ChildAttributePropertyDescriptor(
                            "Height".Localize(),
                            Schema.gridType.heightAttribute,
                            Schema.gameType.gridChild,
                            category,
                            "Grid's height (along the world's up vector)".Localize(),
                            false),
                        new ChildAttributePropertyDescriptor(
                            "Size".Localize(),
                            Schema.gridType.sizeAttribute,
                            Schema.gameType.gridChild,
                            category,
                            "the size of grid step".Localize(),
                            false),
                        new ChildAttributePropertyDescriptor(
                            "Subdivisions".Localize(),
                            Schema.gridType.subdivisionsAttribute,
                            Schema.gameType.gridChild,
                            category,
                            "Number of sub-divisions".Localize(),
                            false),
                        
                        new ChildAttributePropertyDescriptor(
                            "snap".Localize(),
                            Schema.gridType.snapAttribute,
                            Schema.gameType.gridChild,
                            category,
                            "Snap to grid vertex".Localize(),
                            false),

                        new ChildAttributePropertyDescriptor(
                            "Visible".Localize(),
                            Schema.gridType.visibleAttribute,
                            Schema.gameType.gridChild,
                            category,
                            "Grid visibility".Localize(),
                            false)
                    }));
        }
コード例 #6
0
ファイル: GameDocument.cs プロジェクト: arsaccol/LevelEditor
        /// <summary>
        /// Open or create new document.
        /// It opens if the file exist otherwise it will creates new document        
        /// </summary>        
        public static GameDocument OpenOrCreate(Uri uri, SchemaLoader schemaLoader)
        {
            if (!uri.IsAbsoluteUri)
                return null;

            var docRegistry = Globals.MEFContainer.GetExportedValue<GameDocumentRegistry>();

            GameDocument document = docRegistry.FindDocument(uri) as GameDocument;
            if (document != null)
            {
                return document;
            }

            string filePath = uri.LocalPath;

            DomNode rootNode = null;
            if (File.Exists(filePath))
            {               
                // read existing document using custom dom XML reader
                using (FileStream stream = File.OpenRead(filePath))
                {
                    var reader = new CustomDomXmlReader(Globals.ResourceRoot, schemaLoader);
                    rootNode = reader.Read(stream, uri);
                }
            }
            else
            {
                // create new document by creating a Dom node of the root type defined by the schema                 
                rootNode = new DomNode(Schema.gameType.Type, Schema.gameRootElement);
                rootNode.SetAttribute(Schema.gameType.nameAttribute, "Game".Localize());
            }


            GameObjectFolder rootFolder = Adapters.As<GameObjectFolder>(rootNode.GetChild(Schema.gameType.gameObjectFolderChild));
            if (rootFolder == null)
            {
                // create the game object folder
                rootFolder = (GameObjectFolder)GameObjectFolder.Create();
                rootFolder.Name = "GameObjects".Localize("this is the name of a folder in the project lister");
                rootNode.SetChild(Schema.gameType.gameObjectFolderChild, rootFolder.DomNode);
            }
            

            // create bookmarks 
            DomNode bookmarks = rootNode.GetChild(Schema.gameType.bookmarksChild);
            if (bookmarks == null)
            {
                bookmarks = new DomNode(Schema.bookmarksType.Type);
                rootNode.SetChild(Schema.gameType.bookmarksChild, bookmarks);
            }

            DomNode layersNode = rootNode.GetChild(Schema.gameType.layersChild);
            if (layersNode == null)
            {
                layersNode = new DomNode(Schema.layersType.Type);
                rootNode.SetChild(Schema.gameType.layersChild, layersNode);
            }

            // Create the grid
            DomNode gridNode = rootNode.GetChild(Schema.gameType.gridChild);
            if (gridNode == null)
            {
                gridNode = new DomNode(Schema.gridType.Type);
                rootNode.SetChild(Schema.gameType.gridChild, gridNode);
            }

            document = rootNode.As<GameDocument>();
            document.Uri = uri;

            // Initialize Dom extensions now that the data is complete
            rootNode.InitializeExtensions();
           
            docRegistry.Add(document);


            UniqueNamer uniqueNamer = new UniqueNamer('_');
            foreach (DomNode node in rootNode.Subtree)
            {
                if (node.Type.IdAttribute != null)
                {
                    uniqueNamer.Name(node.GetId());
                }
            }


            // sync all the prefab instances
            DomNode folderNode = document.RootGameObjectFolder.As<DomNode>();
            foreach (DomNode node in folderNode.Subtree)
            {
                PrefabInstance prefab = node.As<PrefabInstance>();
                if (prefab == null) continue;
                prefab.Resolve(uniqueNamer);
            }

            if (ResolveOnLoad)
            {
                // resovle all the game references.
                foreach (var subGame in document.GetChildList<GameReference>(Schema.gameType.gameReferenceChild))
                {
                    subGame.Resolve();
                }
            }

            document.Dirty = false;
            return document;
        }