From 738a9fc5a8cbcd0a03cd7e80672b210e5e8060c4 Mon Sep 17 00:00:00 2001 From: Daniel Cronqvist Date: Mon, 2 Sep 2024 23:58:25 +0200 Subject: [PATCH] Add docs to quickstart --- docs/docs/quickstart.md | 78 +++++++++++-------- src/DotTiled/Serialization/IResourceCache.cs | 2 +- src/DotTiled/Serialization/IResourceReader.cs | 2 +- 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/docs/docs/quickstart.md b/docs/docs/quickstart.md index 8d067eb..4092730 100644 --- a/docs/docs/quickstart.md +++ b/docs/docs/quickstart.md @@ -6,41 +6,53 @@ Install DotTiled from NuGet: dotnet add package DotTiled ``` -Load a map from file system: +## Loading a map from the file system + +This will create a loader that will load files from the underlying file system using . It will also be configured to use an in-memory cache to avoid loading the same tileset or template multiple times using . ```csharp -string mapPath = "path/to/map.tmx"; -string mapDirectory = Path.GetDirectoryName(mapPath); +using DotTiled; -Tileset ResolveTileset(string source) -{ - string tilesetPath = Path.Combine(mapDirectory, source); - using var tilesetFileReader = new StreamReader(tilesetPath); - var tilesetString = tilesetReader.ReadToEnd(); - using var tilesetReader = new TilesetReader(tilesetString, ResolveTileset, ResolveTemplate, ResolveCustomType); - return tilesetReader.ReadTileset(); -} - -Template ResolveTemplate(string source) -{ - string templatePath = Path.Combine(mapDirectory, source); - using var templateFileReader = new StreamReader(templatePath); - var templateString = templateReader.ReadToEnd(); - using var templateReader = new TemplateReader(templateString, ResolveTileset, ResolveTemplate, ResolveCustomType); - return templateReader.ReadTemplate(); -} - -ICustomTypeDefinition ResolveCustomType(string name) -{ - var allDefinedTypes = [ ... ]; - return allDefinedTypes.FirstOrDefault(type => type.Name == name); -} - -using var mapFileReader = new StreamReader(mapPath); -var mapString = mapFileReader.ReadToEnd(); -using var mapReader = new MapReader(mapString, ResolveTileset, ResolveTemplate, ResolveCustomType); - -var map = mapReader.ReadMap(); +var loader = Loader.Default(); +var map = loader.LoadMap("path/to/map.tmx"); ``` -If the above looks intimidating, don't worry! DotTiled is designed to be flexible and allow you to load maps from any source, such as a database or a custom file format. The above example is just one way to load a map from a file system. Please look at [Loading Maps](essentials/loading-maps.md) for more information on how to load maps from different sources. \ No newline at end of file +## Loading a map from a different source + +If you want to load resources (maps, tilesets, templates) from a different source than the underlying file system, you can override the that is being used with your own implementation of . + +```csharp +using DotTiled; + +var loader = Loader.DefaultWith( + resourceReader: new MyCustomResourceReader()); +var map = loader.LoadMap("path/to/map.tmx"); +``` + +## Caching resources + +Similarly, you can override the that is being used with your own implementation of . + +```csharp +using DotTiled; + +var loader = Loader.DefaultWith( + resourceReader: new MyCustomResourceReader(), + resourceCache: new MyCustomResourceCache()); +var map = loader.LoadMap("path/to/map.tmx"); +``` + +## Custom types + +If you have custom types in your map, you can provide any `IEnumerable` to the loader. This will allow the loader to deserialize the custom types in your map. + +```csharp +using DotTiled; + +var monsterSpawnerDef = new CustomClassDefinition { ... }; +var chestDef = new CustomClassDefinition { ... }; + +var loader = Loader.DefaultWith( + customTypeDefinitions: [monsterSpawnerDef, chestDef]); +var map = loader.LoadMap("path/to/map.tmx"); +``` \ No newline at end of file diff --git a/src/DotTiled/Serialization/IResourceCache.cs b/src/DotTiled/Serialization/IResourceCache.cs index 72bc59c..1020f22 100644 --- a/src/DotTiled/Serialization/IResourceCache.cs +++ b/src/DotTiled/Serialization/IResourceCache.cs @@ -1,4 +1,4 @@ -namespace DotTiled; +namespace DotTiled.Serialization; /// /// Interface for a cache that stores Tiled resources for faster retrieval and reuse. diff --git a/src/DotTiled/Serialization/IResourceReader.cs b/src/DotTiled/Serialization/IResourceReader.cs index b318b83..e66701b 100644 --- a/src/DotTiled/Serialization/IResourceReader.cs +++ b/src/DotTiled/Serialization/IResourceReader.cs @@ -1,4 +1,4 @@ -namespace DotTiled; +namespace DotTiled.Serialization; /// /// Able to read resources from a given path.