From ab5b0d0ab8e5b6cf3b1f0d76ee7b09c7393374b5 Mon Sep 17 00:00:00 2001 From: Christopher Whitley Date: Tue, 26 Mar 2024 13:27:39 -0400 Subject: [PATCH] Use AsepriteDotNet as core processing library --- MonoGame.Aseprite.sln | 54 ++ .../.config/dotnet-tools.json | 36 + .../AnimatedTilemapExample.csproj | 34 + .../Content/Content.mgcb | 15 + examples/AnimatedTilemapExample/Game1.cs | 87 +++ examples/AnimatedTilemapExample/Icon.bmp | Bin 0 -> 262282 bytes examples/AnimatedTilemapExample/Icon.ico | Bin 0 -> 147541 bytes examples/AnimatedTilemapExample/Program.cs | 3 + examples/AnimatedTilemapExample/app.manifest | 43 ++ .../AnimatedTilemapExample/townmap.aseprite | Bin 0 -> 7355 bytes .../.config/dotnet-tools.json | 36 + .../Content/Content.mgcb | 22 + .../Content/character_robot.aseprite | Bin 0 -> 156758 bytes .../ContentPipelineExample.csproj | 34 + examples/ContentPipelineExample/Game1.cs | 57 ++ examples/ContentPipelineExample/Icon.bmp | Bin 0 -> 262282 bytes examples/ContentPipelineExample/Icon.ico | Bin 0 -> 147541 bytes examples/ContentPipelineExample/Program.cs | 3 + examples/ContentPipelineExample/app.manifest | 43 ++ examples/Directory.Build.props | 23 + .../SpriteExample/.config/dotnet-tools.json | 36 + examples/SpriteExample/Content/Content.mgcb | 15 + examples/SpriteExample/Game1.cs | 67 ++ examples/SpriteExample/Icon.bmp | Bin 0 -> 262282 bytes examples/SpriteExample/Icon.ico | Bin 0 -> 147541 bytes examples/SpriteExample/Program.cs | 3 + examples/SpriteExample/SpriteExample.csproj | 34 + examples/SpriteExample/app.manifest | 43 ++ .../SpriteExample/character_robot.aseprite | Bin 0 -> 156758 bytes .../.config/dotnet-tools.json | 36 + .../SpritesheetExample/Content/Content.mgcb | 15 + examples/SpritesheetExample/Game1.cs | 112 +++ examples/SpritesheetExample/Icon.bmp | Bin 0 -> 262282 bytes examples/SpritesheetExample/Icon.ico | Bin 0 -> 147541 bytes examples/SpritesheetExample/Program.cs | 3 + .../SpritesheetExample.csproj | 34 + examples/SpritesheetExample/app.manifest | 43 ++ .../character_robot.aseprite | Bin 0 -> 156758 bytes .../.config/dotnet-tools.json | 36 + .../TextureAtlasExample/Content/Content.mgcb | 15 + examples/TextureAtlasExample/Game1.cs | 92 +++ examples/TextureAtlasExample/Icon.bmp | Bin 0 -> 262282 bytes examples/TextureAtlasExample/Icon.ico | Bin 0 -> 147541 bytes examples/TextureAtlasExample/Program.cs | 3 + .../TextureAtlasExample.csproj | 34 + examples/TextureAtlasExample/app.manifest | 43 ++ .../character_robot.aseprite | Bin 0 -> 156758 bytes .../TilemapExample/.config/dotnet-tools.json | 36 + examples/TilemapExample/Content/Content.mgcb | 15 + examples/TilemapExample/Game1.cs | 73 ++ examples/TilemapExample/Icon.bmp | Bin 0 -> 262282 bytes examples/TilemapExample/Icon.ico | Bin 0 -> 147541 bytes examples/TilemapExample/Program.cs | 3 + examples/TilemapExample/TilemapExample.csproj | 34 + examples/TilemapExample/app.manifest | 43 ++ examples/TilemapExample/townmap.aseprite | Bin 0 -> 7355 bytes .../TilesetExample/.config/dotnet-tools.json | 36 + examples/TilesetExample/Content/Content.mgcb | 15 + examples/TilesetExample/Game1.cs | 82 ++ examples/TilesetExample/Icon.bmp | Bin 0 -> 262282 bytes examples/TilesetExample/Icon.ico | Bin 0 -> 147541 bytes examples/TilesetExample/Program.cs | 3 + examples/TilesetExample/TilesetExample.csproj | 34 + examples/TilesetExample/app.manifest | 43 ++ examples/TilesetExample/townmap.aseprite | Bin 0 -> 7355 bytes .../AsepriteFileProcessResult.cs | 2 +- .../MonoGame.Aseprite.Content.Pipeline.csproj | 2 +- .../AsepriteFileContentProcessor.cs | 6 +- .../Writers/AsepriteFileContentTypeWriter.cs | 1 + .../MonoGame.Aseprite.Shared/AsepriteFile.cs | 707 ------------------ .../AsepriteTypes/AsepriteBlendMode.cs | 171 ----- .../AsepriteTypes/AsepriteCel.cs | 79 -- .../AsepriteTypes/AsepriteFileBuilder.cs | 302 -------- .../AsepriteTypes/AsepriteFrame.cs | 170 ----- .../AsepriteTypes/AsepriteImageCel.cs | 54 -- .../AsepriteTypes/AsepriteLayer.cs | 78 -- .../AsepriteTypes/AsepriteLayerFlags.cs | 71 -- .../AsepriteTypes/AsepriteLoopDirection.cs | 55 -- .../AsepriteTypes/AsepriteSlice.cs | 68 -- .../AsepriteTypes/AsepriteSliceKey.cs | 76 -- .../AsepriteTypes/AsepriteTag.cs | 99 --- .../AsepriteTypes/AsepriteTile.cs | 75 -- .../AsepriteTypes/AsepriteTilemapCel.cs | 64 -- .../AsepriteTypes/AsepriteTilemapLayer.cs | 40 - .../AsepriteTypes/AsepriteTileset.cs | 132 ---- .../AsepriteTypes/AsepriteUserData.cs | 64 -- .../Content/BinaryReaderExtensions.cs | 277 ------- .../Content/BinaryWriterExtensions.cs | 224 ------ .../Processors/AnimatedTilemapProcessor.cs | 118 --- .../Content/Processors/SpriteProcessor.cs | 124 --- .../Processors/SpriteSheetProcessor.cs | 114 --- .../Processors/TextureAtlasProcessor.cs | 211 ------ .../Content/Processors/TilemapProcessor.cs | 118 --- .../Content/Processors/TilesetProcessor.cs | 93 --- .../Content/Readers/AsepriteFileReader.cs | 598 --------------- .../Readers/RawAnimatedTilemapReader.cs | 84 --- .../Content/Readers/RawSpriteReader.cs | 66 -- .../Content/Readers/RawSpriteSheetReader.cs | 81 -- .../Content/Readers/RawTextureAtlasReader.cs | 55 -- .../Content/Readers/RawTilemapReader.cs | 74 -- .../Content/Readers/RawTilesetReader.cs | 55 -- .../Writers/RawAnimatedTilemapWriter.cs | 74 -- .../Content/Writers/RawSpriteSheetWriter.cs | 73 -- .../Content/Writers/RawSpriteWriter.cs | 61 -- .../Content/Writers/RawTextureAtlasWriter.cs | 54 -- .../Content/Writers/RawTilemapWriter.cs | 67 -- .../Content/Writers/RawTilesetWriter.cs | 54 -- .../RawTypes/RawAnimatedTilemap.cs | 68 -- .../RawTypes/RawAnimationFrame.cs | 59 -- .../RawTypes/RawAnimationTag.cs | 89 --- .../RawTypes/RawNinePatchSlice.cs | 60 -- .../RawTypes/RawSlice.cs | 73 -- .../RawTypes/RawSprite.cs | 67 -- .../RawTypes/RawSpriteSheet.cs | 67 -- .../RawTypes/RawTexture.cs | 75 -- .../RawTypes/RawTextureAtlas.cs | 67 -- .../RawTypes/RawTextureRegion.cs | 69 -- .../RawTypes/RawTilemap.cs | 70 -- .../RawTypes/RawTilemapFrame.cs | 62 -- .../RawTypes/RawTilemapLayer.cs | 88 --- .../RawTypes/RawTilemapTile.cs | 70 -- .../RawTypes/RawTileset.cs | 76 -- .../Utilities/BlendFunctions.cs | 555 -------------- .../AsepriteFileExtensions.cs | 66 +- .../Readers/AsepriteFileContentTypeReader.cs | 3 +- .../MonoGame.Aseprite.csproj | 4 +- .../SpriteBatchExtensions.cs | 8 +- 127 files changed, 1618 insertions(+), 6640 deletions(-) create mode 100644 examples/AnimatedTilemapExample/.config/dotnet-tools.json create mode 100644 examples/AnimatedTilemapExample/AnimatedTilemapExample.csproj create mode 100644 examples/AnimatedTilemapExample/Content/Content.mgcb create mode 100644 examples/AnimatedTilemapExample/Game1.cs create mode 100644 examples/AnimatedTilemapExample/Icon.bmp create mode 100644 examples/AnimatedTilemapExample/Icon.ico create mode 100644 examples/AnimatedTilemapExample/Program.cs create mode 100644 examples/AnimatedTilemapExample/app.manifest create mode 100644 examples/AnimatedTilemapExample/townmap.aseprite create mode 100644 examples/ContentPipelineExample/.config/dotnet-tools.json create mode 100644 examples/ContentPipelineExample/Content/Content.mgcb create mode 100644 examples/ContentPipelineExample/Content/character_robot.aseprite create mode 100644 examples/ContentPipelineExample/ContentPipelineExample.csproj create mode 100644 examples/ContentPipelineExample/Game1.cs create mode 100644 examples/ContentPipelineExample/Icon.bmp create mode 100644 examples/ContentPipelineExample/Icon.ico create mode 100644 examples/ContentPipelineExample/Program.cs create mode 100644 examples/ContentPipelineExample/app.manifest create mode 100644 examples/Directory.Build.props create mode 100644 examples/SpriteExample/.config/dotnet-tools.json create mode 100644 examples/SpriteExample/Content/Content.mgcb create mode 100644 examples/SpriteExample/Game1.cs create mode 100644 examples/SpriteExample/Icon.bmp create mode 100644 examples/SpriteExample/Icon.ico create mode 100644 examples/SpriteExample/Program.cs create mode 100644 examples/SpriteExample/SpriteExample.csproj create mode 100644 examples/SpriteExample/app.manifest create mode 100644 examples/SpriteExample/character_robot.aseprite create mode 100644 examples/SpritesheetExample/.config/dotnet-tools.json create mode 100644 examples/SpritesheetExample/Content/Content.mgcb create mode 100644 examples/SpritesheetExample/Game1.cs create mode 100644 examples/SpritesheetExample/Icon.bmp create mode 100644 examples/SpritesheetExample/Icon.ico create mode 100644 examples/SpritesheetExample/Program.cs create mode 100644 examples/SpritesheetExample/SpritesheetExample.csproj create mode 100644 examples/SpritesheetExample/app.manifest create mode 100644 examples/SpritesheetExample/character_robot.aseprite create mode 100644 examples/TextureAtlasExample/.config/dotnet-tools.json create mode 100644 examples/TextureAtlasExample/Content/Content.mgcb create mode 100644 examples/TextureAtlasExample/Game1.cs create mode 100644 examples/TextureAtlasExample/Icon.bmp create mode 100644 examples/TextureAtlasExample/Icon.ico create mode 100644 examples/TextureAtlasExample/Program.cs create mode 100644 examples/TextureAtlasExample/TextureAtlasExample.csproj create mode 100644 examples/TextureAtlasExample/app.manifest create mode 100644 examples/TextureAtlasExample/character_robot.aseprite create mode 100644 examples/TilemapExample/.config/dotnet-tools.json create mode 100644 examples/TilemapExample/Content/Content.mgcb create mode 100644 examples/TilemapExample/Game1.cs create mode 100644 examples/TilemapExample/Icon.bmp create mode 100644 examples/TilemapExample/Icon.ico create mode 100644 examples/TilemapExample/Program.cs create mode 100644 examples/TilemapExample/TilemapExample.csproj create mode 100644 examples/TilemapExample/app.manifest create mode 100644 examples/TilemapExample/townmap.aseprite create mode 100644 examples/TilesetExample/.config/dotnet-tools.json create mode 100644 examples/TilesetExample/Content/Content.mgcb create mode 100644 examples/TilesetExample/Game1.cs create mode 100644 examples/TilesetExample/Icon.bmp create mode 100644 examples/TilesetExample/Icon.ico create mode 100644 examples/TilesetExample/Program.cs create mode 100644 examples/TilesetExample/TilesetExample.csproj create mode 100644 examples/TilesetExample/app.manifest create mode 100644 examples/TilesetExample/townmap.aseprite delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteFile.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteBlendMode.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteCel.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFileBuilder.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFrame.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteImageCel.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayer.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayerFlags.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLoopDirection.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSlice.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSliceKey.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTag.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTile.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapCel.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapLayer.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTileset.cs delete mode 100644 source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteUserData.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/BinaryReaderExtensions.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/BinaryWriterExtensions.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Processors/AnimatedTilemapProcessor.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Processors/SpriteProcessor.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Processors/SpriteSheetProcessor.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Processors/TextureAtlasProcessor.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Processors/TilemapProcessor.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Processors/TilesetProcessor.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Readers/AsepriteFileReader.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Readers/RawAnimatedTilemapReader.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteReader.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteSheetReader.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Readers/RawTextureAtlasReader.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Readers/RawTilemapReader.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Readers/RawTilesetReader.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Writers/RawAnimatedTilemapWriter.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteSheetWriter.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteWriter.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Writers/RawTextureAtlasWriter.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Writers/RawTilemapWriter.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Content/Writers/RawTilesetWriter.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawAnimatedTilemap.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationFrame.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationTag.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawNinePatchSlice.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawSlice.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawSprite.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawSpriteSheet.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTexture.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTextureAtlas.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTextureRegion.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTilemap.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapFrame.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapLayer.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapTile.cs delete mode 100644 source/MonoGame.Aseprite.Shared/RawTypes/RawTileset.cs delete mode 100644 source/MonoGame.Aseprite.Shared/Utilities/BlendFunctions.cs diff --git a/MonoGame.Aseprite.sln b/MonoGame.Aseprite.sln index 7b065ba0..4f2704db 100644 --- a/MonoGame.Aseprite.sln +++ b/MonoGame.Aseprite.sln @@ -28,6 +28,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".root", ".root", "{780173B6 README.md = README.md EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{C177CFCE-9FD8-4EFA-9046-B5ECC55401CE}" + ProjectSection(SolutionItems) = preProject + examples\Directory.Build.props = examples\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AnimatedTilemapExample", "examples\AnimatedTilemapExample\AnimatedTilemapExample.csproj", "{6E52E54B-E074-4CEE-86D2-F0E3D429F4F6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ContentPipelineExample", "examples\ContentPipelineExample\ContentPipelineExample.csproj", "{615E3A66-5DDB-4691-88BA-6E10E71E1899}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpriteExample", "examples\SpriteExample\SpriteExample.csproj", "{2DEBEDB6-C604-4CC6-94CC-A6964E2781F4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpritesheetExample", "examples\SpritesheetExample\SpritesheetExample.csproj", "{7EBC52B4-982A-4CA1-AD88-CEEA4573E4EF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TextureAtlasExample", "examples\TextureAtlasExample\TextureAtlasExample.csproj", "{55C32452-39B1-4FD0-92D2-1037909B0571}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TilemapExample", "examples\TilemapExample\TilemapExample.csproj", "{813FAB91-CDF4-4F50-8C1A-B4987E84E45A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TilesetExample", "examples\TilesetExample\TilesetExample.csproj", "{385D0648-538D-4A90-A1EA-FEF44C9F9517}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -46,6 +65,34 @@ Global {4E3BCA48-A076-4ECE-A80A-F254DAE2D18E}.Debug|Any CPU.Build.0 = Debug|Any CPU {4E3BCA48-A076-4ECE-A80A-F254DAE2D18E}.Release|Any CPU.ActiveCfg = Release|Any CPU {4E3BCA48-A076-4ECE-A80A-F254DAE2D18E}.Release|Any CPU.Build.0 = Release|Any CPU + {6E52E54B-E074-4CEE-86D2-F0E3D429F4F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E52E54B-E074-4CEE-86D2-F0E3D429F4F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E52E54B-E074-4CEE-86D2-F0E3D429F4F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E52E54B-E074-4CEE-86D2-F0E3D429F4F6}.Release|Any CPU.Build.0 = Release|Any CPU + {615E3A66-5DDB-4691-88BA-6E10E71E1899}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {615E3A66-5DDB-4691-88BA-6E10E71E1899}.Debug|Any CPU.Build.0 = Debug|Any CPU + {615E3A66-5DDB-4691-88BA-6E10E71E1899}.Release|Any CPU.ActiveCfg = Release|Any CPU + {615E3A66-5DDB-4691-88BA-6E10E71E1899}.Release|Any CPU.Build.0 = Release|Any CPU + {2DEBEDB6-C604-4CC6-94CC-A6964E2781F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DEBEDB6-C604-4CC6-94CC-A6964E2781F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DEBEDB6-C604-4CC6-94CC-A6964E2781F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DEBEDB6-C604-4CC6-94CC-A6964E2781F4}.Release|Any CPU.Build.0 = Release|Any CPU + {7EBC52B4-982A-4CA1-AD88-CEEA4573E4EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7EBC52B4-982A-4CA1-AD88-CEEA4573E4EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EBC52B4-982A-4CA1-AD88-CEEA4573E4EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7EBC52B4-982A-4CA1-AD88-CEEA4573E4EF}.Release|Any CPU.Build.0 = Release|Any CPU + {55C32452-39B1-4FD0-92D2-1037909B0571}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55C32452-39B1-4FD0-92D2-1037909B0571}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55C32452-39B1-4FD0-92D2-1037909B0571}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55C32452-39B1-4FD0-92D2-1037909B0571}.Release|Any CPU.Build.0 = Release|Any CPU + {813FAB91-CDF4-4F50-8C1A-B4987E84E45A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {813FAB91-CDF4-4F50-8C1A-B4987E84E45A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {813FAB91-CDF4-4F50-8C1A-B4987E84E45A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {813FAB91-CDF4-4F50-8C1A-B4987E84E45A}.Release|Any CPU.Build.0 = Release|Any CPU + {385D0648-538D-4A90-A1EA-FEF44C9F9517}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {385D0648-538D-4A90-A1EA-FEF44C9F9517}.Debug|Any CPU.Build.0 = Debug|Any CPU + {385D0648-538D-4A90-A1EA-FEF44C9F9517}.Release|Any CPU.ActiveCfg = Release|Any CPU + {385D0648-538D-4A90-A1EA-FEF44C9F9517}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -54,6 +101,13 @@ Global {B5D9570E-E9BF-482B-BD73-8EA6EC4330F8} = {CF520A36-B1B8-4CFA-9835-C3345A65D57B} {49903681-88CC-4B14-AD02-C475E78D4CE2} = {CF520A36-B1B8-4CFA-9835-C3345A65D57B} {4E3BCA48-A076-4ECE-A80A-F254DAE2D18E} = {78ECB0CA-72B0-4E08-BAB1-8BF2B98829D9} + {6E52E54B-E074-4CEE-86D2-F0E3D429F4F6} = {C177CFCE-9FD8-4EFA-9046-B5ECC55401CE} + {615E3A66-5DDB-4691-88BA-6E10E71E1899} = {C177CFCE-9FD8-4EFA-9046-B5ECC55401CE} + {2DEBEDB6-C604-4CC6-94CC-A6964E2781F4} = {C177CFCE-9FD8-4EFA-9046-B5ECC55401CE} + {7EBC52B4-982A-4CA1-AD88-CEEA4573E4EF} = {C177CFCE-9FD8-4EFA-9046-B5ECC55401CE} + {55C32452-39B1-4FD0-92D2-1037909B0571} = {C177CFCE-9FD8-4EFA-9046-B5ECC55401CE} + {813FAB91-CDF4-4F50-8C1A-B4987E84E45A} = {C177CFCE-9FD8-4EFA-9046-B5ECC55401CE} + {385D0648-538D-4A90-A1EA-FEF44C9F9517} = {C177CFCE-9FD8-4EFA-9046-B5ECC55401CE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {185C72A8-896C-42E7-93F4-99FCD65E0961} diff --git a/examples/AnimatedTilemapExample/.config/dotnet-tools.json b/examples/AnimatedTilemapExample/.config/dotnet-tools.json new file mode 100644 index 00000000..efabe22e --- /dev/null +++ b/examples/AnimatedTilemapExample/.config/dotnet-tools.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.1.303", + "commands": [ + "mgcb" + ] + }, + "dotnet-mgcb-editor": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor" + ] + }, + "dotnet-mgcb-editor-linux": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-linux" + ] + }, + "dotnet-mgcb-editor-windows": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-windows" + ] + }, + "dotnet-mgcb-editor-mac": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-mac" + ] + } + } +} \ No newline at end of file diff --git a/examples/AnimatedTilemapExample/AnimatedTilemapExample.csproj b/examples/AnimatedTilemapExample/AnimatedTilemapExample.csproj new file mode 100644 index 00000000..df0fd772 --- /dev/null +++ b/examples/AnimatedTilemapExample/AnimatedTilemapExample.csproj @@ -0,0 +1,34 @@ + + + WinExe + net6.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/examples/AnimatedTilemapExample/Content/Content.mgcb b/examples/AnimatedTilemapExample/Content/Content.mgcb new file mode 100644 index 00000000..ddc4c367 --- /dev/null +++ b/examples/AnimatedTilemapExample/Content/Content.mgcb @@ -0,0 +1,15 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + diff --git a/examples/AnimatedTilemapExample/Game1.cs b/examples/AnimatedTilemapExample/Game1.cs new file mode 100644 index 00000000..03a34049 --- /dev/null +++ b/examples/AnimatedTilemapExample/Game1.cs @@ -0,0 +1,87 @@ +using AsepriteDotNet.Aseprite; +using AsepriteDotNet.IO; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MonoGame.Aseprite; + +namespace AnimatedTilemapExample; + +public class Game1 : Game +{ + private GraphicsDeviceManager _graphics; + private SpriteBatch _spriteBatch; + private AnimatedTilemap _animatedTilemap; + private Vector2 _scale; + + public Game1() + { + _graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + IsMouseVisible = true; + } + + + protected override void LoadContent() + { + _spriteBatch = new SpriteBatch(GraphicsDevice); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Load the file. In this example, we're not using the MGCB/Content Pipeline and have the Aseprite file set as + /// a file in our project that is copied the output directory. Because of this, we can use the + /// TitleContainer.OpenStream to get a stream to the file and use that to load it. + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + AsepriteFile aseFile; + using (Stream stream = TitleContainer.OpenStream("townmap.aseprite")) + { + aseFile = AsepriteFileLoader.FromStream("townmap", stream); + } + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Create an animated tilemap from the file based on all frames. + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _animatedTilemap = aseFile.CreateAnimatedTilemap(GraphicsDevice); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Size the tilemap is created 1:1 with the size it is in Aseprite, we're going to create a scale factor here + /// in this example to be the size of the game window. + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _scale.X = _graphics.PreferredBackBufferWidth / (float)_animatedTilemap.GetFrame(0).GetLayer(0).Width; + _scale.Y = _graphics.PreferredBackBufferHeight / (float)_animatedTilemap.GetFrame(0).GetLayer(0).Height; + + } + + protected override void Update(GameTime gameTime) + { + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// The animated tilemap must be updated each frame to update the animations. + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _animatedTilemap.Update(gameTime); + + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + + _spriteBatch.Begin(samplerState: SamplerState.PointClamp); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Spritebatch extension are provided to draw the tilemap + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _spriteBatch.Draw(_animatedTilemap, Vector2.Zero, Color.White, _scale, 0.0f); + + _spriteBatch.End(); + } +} diff --git a/examples/AnimatedTilemapExample/Icon.bmp b/examples/AnimatedTilemapExample/Icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b481653e241818d2894e4ef33234eaff9aad701 GIT binary patch literal 262282 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 RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/examples/AnimatedTilemapExample/Program.cs b/examples/AnimatedTilemapExample/Program.cs new file mode 100644 index 00000000..0ed9bde8 --- /dev/null +++ b/examples/AnimatedTilemapExample/Program.cs @@ -0,0 +1,3 @@ + +using var game = new AnimatedTilemapExample.Game1(); +game.Run(); diff --git a/examples/AnimatedTilemapExample/app.manifest b/examples/AnimatedTilemapExample/app.manifest new file mode 100644 index 00000000..5fffae64 --- /dev/null +++ b/examples/AnimatedTilemapExample/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + diff --git a/examples/AnimatedTilemapExample/townmap.aseprite b/examples/AnimatedTilemapExample/townmap.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..a7d176b32ce105047c89ea19c098b4ec0751276e GIT binary patch literal 7355 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 Zva*%Q_$!HwCZ{ybC#Gj^{(rRYzX3)_^|b&1 literal 0 HcmV?d00001 diff --git a/examples/ContentPipelineExample/.config/dotnet-tools.json b/examples/ContentPipelineExample/.config/dotnet-tools.json new file mode 100644 index 00000000..efabe22e --- /dev/null +++ b/examples/ContentPipelineExample/.config/dotnet-tools.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.1.303", + "commands": [ + "mgcb" + ] + }, + "dotnet-mgcb-editor": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor" + ] + }, + "dotnet-mgcb-editor-linux": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-linux" + ] + }, + "dotnet-mgcb-editor-windows": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-windows" + ] + }, + "dotnet-mgcb-editor-mac": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-mac" + ] + } + } +} \ No newline at end of file diff --git a/examples/ContentPipelineExample/Content/Content.mgcb b/examples/ContentPipelineExample/Content/Content.mgcb new file mode 100644 index 00000000..8567717e --- /dev/null +++ b/examples/ContentPipelineExample/Content/Content.mgcb @@ -0,0 +1,22 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + +/reference:..\..\..\.artifacts\bin\source\MonoGame.Aseprite.Content.Pipeline\Debug\net6.0\MonoGame.Aseprite.Content.Pipeline.dll + +#---------------------------------- Content ---------------------------------# + +#begin character_robot.aseprite +/importer:AsepriteFileContentImporter +/processor:AsepriteFileContentProcessor +/processorParam:PremultiplyAlpha=True +/build:character_robot.aseprite + diff --git a/examples/ContentPipelineExample/Content/character_robot.aseprite b/examples/ContentPipelineExample/Content/character_robot.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..f235a0fef12b25d83f31e6c5f0baa430b795c284 GIT binary patch literal 156758 zcmdSAS6EY9`0g8IX>_5)4i<>$QtS~?ks1^g6)A!OA`%4=6%c76B?Lr7ML|VDYEV=} zgosElp@X!5AfbmIdVl~)NSWu0p67q|zS(!@VrM z?oUOba%$V5twr!0MWIsjt63S6>nQeMWHm$ zTf-=n5*oBkpL_!~f1C<^epECOP^h#L8tKmok%X;`ufwx=vl}>A6CW}Qg-Xt=g!YFY zMfq@!jI9|k%7xolnE8WGP(NmRlOSHzUrsRpM#fJV@kK7wKWCSb;8}Bfs(6NRcu?PX zXs4GqL0i-0I!U~G6fBHh@eB0wi(IH*eq9LlW9D|y{#rrD!14MgLdC!}0@{Bc58d4m zI9@9c(75C~pv_$kpcZFr#O(ql(887x(BYD`pvY(hXnDFaXlDTy)Ism2xIX_|tTR-x zHtzxrrTi4PTk)X2@4`SiTrOzsrH7yoK9zzR8{Gm;C~gDgRxbzrk#Y)@Vom~$HT430 z7A@X?kcoJnKM7AjZ(O(wYWF$|^nQFH=;yCippDt$ag%@cf<|SFkD|6~6!dOFE$D-9 z&7k8m9MEHz96(RseF19x;4^5;;1uY2QXJ^}@8Y8nTn`65?(iH`-#-b|^jRk8;AQa~ zX0E;j)i{3*G^ef;)cC1*J{Mnzw>@ZN2U_xb5LCm&Lahg-HVuHDz84L8#LO8~ z*H?Vhl#)hJljq`D9kK8LJ?12y?HQjB;)op+#bSAwDkSSK{+^%3Hk7d;iQ0cUrtkC+^3C>bS>%BDE;clb-KE59(h7HF_>y zt9>WMXU+Jfcpa4V2%x9D#p|qePTU89hq%A^sHuNeK-cFJw3Q8PKuyBRk$-_Y|NMF1 z0ye{&0K5YL{(=1fexN=eA9xS22hs!Pf$;!%pgW))xDHT>$-rZPF_0KA3=9SU1API#z+HeY5EpO@tOd{l zWdX6kSAZ*!6|f3S1)u^=0j0oEKok%Z@Cob$Z~`>}nZQecC6E#@35*0l0v!R3z(s%} z5D{<)ECdh&1p$G;KY$;Q53mP21mFSf0Cm7QfE*AG@Fr&4XarCVkS69Czzj&%yi3fm zRy@!P&;{HAXaTVRSHLO&6;KKg1$+WH0hs_xz$5??&!Em#)(3T6eTf=$7rU{G);SQC5+rUXZV9l?uWL~tQk5c~(`1LuM5 zz;j?Ya2r@n?6Vt@;4rWkcngdLt^!MepTJDuB(M>92n+=70qcl;Q!921*af@-Mgf>hbotYeM7g-% zS%O;ezgPc3d0ca_mxkh&E&uPHkpI(Pa?tai|80D*C=7M(ny0PH@x9R80)N8;`JZ_e z!H3TKF%z-3zFoQarZQ=ia%C_=RBsow)tiE+JrQx^nZ`(_6_Tzu}4u9!jX0fg?Q_@-8 z%yCziCa06ryy+K3%BQwi*-vE9wfdF@6kk0cyL`$2<^MZCpX!XJYAyVvOYil) z&LH`Go?uxYc(yu}<;|>0oR>3KVb}97bMlG9a}m-a`a3h<>0^m!?@z{Mb(6dKlj!J% z=b4n!tEbCN_|p3WSU9=2gA01-U_m&;bM3Ty5wdB)Z~r?JM?ykzyo6%f?-I|tTXoaB zBOCEp?iB{VYFqAA_JenhJ?S=MgjUk$(6K0L$wcnzUsC(HXFj1HIZJlq(>Sp;X`Cpg z@>5R0l;%n7jP6{{u!OT)2dDf1B0#Zk4 z@hoRXRUta8R`KAo)ve8$j=o9K|NMh|o#5Yii}m9##*vWk_)t#So4VS>5)|X$nh@QU#CDNA@uUMcy?k z_|{db>_gTTID zbm;ROSLC(RR&^->^(KFEK1buBbWi0ILq$wthjL<(s-p1Pp`_@+Q)o{-g8GV-Q^e>cujD0EZ6%} zulBzjbRX%4M<6S}kN!@%^e$;^c5E_l%>I?9!E8|-`jUV#e_yr&J;7hgqbgUC1dr76 z1307wHW}R~+&R}X?le(NdFSnzPPb_GM|azMpIhEvIvRa%-x`Ku`Mlzw-$8GTAv%Mz z%j?Cc%qo_aV1cwg^%xr&u+O6x477W@$`$SSp}GIjG>UBIK#JJp+(C{)iibialUyYj zZPbtl(w6LmMaU(#y|?A^{^DQHJ+RU|ErrQ`oeOOiM^*Rtn0*}8-i6poS55k}{r4_0 zUs=Q{=HP~iC7p)T#EPH9=W7Y4UGOJGtmQLgpPL;vHaF#!7>X4L3(syTbH*OPTo^&+ zUOs{zKKfQQZ6ZzSP^d3Mv0nH+AJe(%Vu+p5$~6(w*sc|9(mm;wB4x$YT=(_`y;_^o z-H8qKnkIw7yZtt?+f_88q{ei^hB(~MGXZZ)tA|j*{!GOlWHg25 zaiYHMNdNWQ9W@5wByT4>-ULNWl^;TXHTYD{>1dmv^_U`8w)N6J)Ywbzm$*+IdBx{2PS|(rtz@ z7pG;^(SJjBMSVx1UDy!v{W9V0Z+`_Y{>*!(0?Dd+dp~u4OfSj5(;V-om%$j^d@SKS&dD-kC1QiF$^pBsa6N$q3Uf;tL|2 z2~z^rh+peJPhPrpK8*3;2gA-PuL|HpMJ;YX^qBhi07*?`$N4@neW*Erg=|8axS=U4 zNlQiBn2z4{xBG`=j|*^Rg%yZE>#kv$)=g2cbZhQZr=)#k3DP<5orCQsZA3cc^>l~_ z?9wOoH0*N7#axzv9F0vsoTj?84k>iU^^*=F`#8!f*94SG5?=I15IX2Pw8KTj5S?vg zDNWL5@UM_#J=7Ya#iX6V1LuVLB`}ICQtIkQBmImlCe;XQ^$*;cBK@9EmA*N-2?-W( zY*4*gzvho_T%wCbp7S%fhASL9Y;MYKUM$+g*~7zmE^=8?W)RMg?3m&)jxcuUyDk6f zzJ*DJaSuI29N7-9K87OA{x{}JrWr1H*MH0M$5=iSE`k zT+1P=O57&a=kRy+a$Q0}&&On|azcMJm z`})WV3B~py=23TTE=}uOW+i?(fb)IN?%BpY46RS1-@N z)IgT``i{F8+x@n8wufrVH`lMcgS|qcRtg=J8*}A-A2DqEpAo{UNp!U4l>9rU=G^eE z*!oSnub(nhE|7)pQ&~pF6(hxnhk$hpn5np_oBLq8mFLt~r6*cqXnK))KAKzhe@nNn zz_ihpGLsCa?H7_RQP$)c96~(nQ34Mo{pa>ys;AFt?A_|6eW$8rNrjXby<(o-H}n8gBQm2}Oqt=l(@XPM;&*E%l5s!m+<} zeheYh{5PZz*;?35v=H{3_0+HJ-ccvx|Ef=roz6lo9R{*rea#S4?s3 zD<6{@CAc*1W9cdO69V7&0(w2k)|>fOneL&LA*hL6gUd@fKY5`%w$*jEhf3fj$5SL( zHb?g`C>T*YiYF8Lw46=Q^ZM=+3O%#}QnB8fIhp#P`FZG^W!TJ1*-$@YQewI2T&yl(S z*IOAvx+|))ibp=9g`RcOW)lWlFB05+HfKpM-<_0k+kJ3=LZVHJ!t|(bJAw{Qx{{_< zd-04XN(V$L7#FD$q+xSWc9~!c7yC=1LZH0qh{{2k)A|+P@(nKqY&wx`*NU3-ze^ZD zzJU{nxG*+IRs^IeiBy6gUjjMt$GUPc*; zCw+XfQk#o7SLOW~N-*8^S6u9OaaPq4>qtJ$nW_gF$3p7p5(V;G=1sYwOF2Zj2928* z=pXwZ&O0BDZ5j}UYI435+P8EvMK5qW`?Zjo9CDrH@Q*3RXipTHA7XA#_f#p6-|N0g z<0;X)Guda$gjC({f=MOkLf>5+J07{?`Ci|d9Fo9{8o@AW8}k`jfl(EOk?%xrl3H9= zQYbwfwdKmD-S;TfNaIW!o7$#k7oEvh=%6uNCOHn&A+1cS4q^nlj!X4n2MqB;Hw>eW z=#KUs=Px?Z<0>cGHn6y3X!3qGzJ@fUHNhEnefc|Ylf1grV}k;0Wr zr+4&^x>BDaOXpVa(qOZn><_6L-=AiEIj!uKJ!@Y<=1QdTT2{nxyBtx~*MaK9k>jY~ zr{d-w+{8|PrC2$w?ZUh)XrE#?>5Vy4>o@!Pz9|T;NeVqL^Okg7UnLSrq_~dt=BB0> zk=C(B-+Gh}@l%F8AM|*YcBR?v@qIa)T&&28PQtCL&^z&?e*XOJF$og{ySYXHT$l&Cq(cYt3UTT8G^xovMgf zF3ny1Nn$DUiR+cGdGG<uUHUPzT9JI&`8+ed2F=uZ6@`Af z%xCM8Wh0Byc%Qk1aMsuF$alr#^FPuHPm>K7)MQzTm}ftq*zYe;FZ1ZlpOUBA$%;aM zo$5Db(a#@zOx!_0E(vY+w!G76@0A49tzUKr%- z5#yh+bz{Bm)RQJRC^a3eT-#mBlbOek7I~BThU5Ieuu6jFi<;RzP9AZs{CN?4)wDcP z&uZThW5`J7L~$v7FuL$W&bKKm zR{~qUa9e1-z?+<{s?hY#*@uzYW8LwL-<}u|W3ZueLldta$)zXoFr0Fv*JE;GSu##e z3L$rMCJWk!;DcwjXet;_8!Tq}M%ARs_}=68GD!!Wh+8ZE$)n^DGCu9G(b$V9e*C03 z%>QqQcwA69Un)Gp4JBjyeV-v(EEeeoVgF1P@3UmE8R5rQGJm>YZ^96%+Vhy>na`q~ zC(BqeBE4~SY0;mrvVnZtd4dnok$;%O;%5~E>L#M|2$~uUABCCdK9=&SuKbhknzYYc zR*T;bzcGa~b>8b)H4BS4di)qGykSHIf?&iBak2At~TElBzYfc#>vs&}*ZEss#w|I%lyWrNBB$X&Fygc%U$seB2)? z5WTS#$jHe)M0kQ;ERflwn?3}+% zA=!hQy4Bv-2w$?XRMJop>w$poRb+wkY;4#_hwBtyU326Q%N#9u8{~|8k#D$@neeeA z&%us7AlTJQZIQ^v^^KuA*Ai~Y%B|FF2vwS9G$H3w!Yn)n^2WxFg{ax;`}4IBLvv3h zyGw^kNSFGLpTPJKdsHvlIhMM+p~yG2+I?1VacPwLu0RK5yiF$E?&^Rr<{|R3Ti#3h z@icXEv(ZP%i}{oql29`Pw}W2FuHoV`u}Dzv?#Y7nL)Nnaxyi>WR^MUW=b6RsxtG7{ zbzP|3_=lFm@sjL)v^9%zus+Da4qB_ykWj$!;>|5=RTD+jN)%!SXcF%3@u~9vAPnS0;SD1@|~u)!X;GmgK1p#1j1)bEs-_JaG#F9b=e2 znjC9WpIbF}D>fz2HBvD5GdX4oFUYv=O(qWQ5t8Pw$LS{rr?4g$#cl!c*Cv_2}ws8qv+=lt$&y*di}K>2If4 zp}Tya4f#%TUQZL|Si^I3t#~qL%Syu>?%Cfn{ES$oJY1)4k3s!}JS{{1G~O*%@=NvN zKyGM}dNw;PtbW92wrrijsdtk3ErTO#9DE~b{jLQ0E8WWd)K;m~H~ig7-#TlIC{-`y zACm`$9{i5j{7L4;da6v&P%duL;Tp^5S|obNMkAi{?cr@6pBT5|SU1xqeEPi4#xz!r z{O37bfpqvQshK&{{t}sN+*Y-ovEnVc@$N-T@7kfD`z%+2fMkWUml)PokX|phbG9~Q zq-5cN^vX>K%$P#|J8iLStw_G6NRM?eQgSMweQ0c_e<(X=aFaC8d#(FE(y%X6E3~hG zo3gZjw~!{4+cTp56uUMGeO-8=&pbu)qLHT4NiRGSDs@ zb-ui@PG6rFjWck*vUb+vSdSAnEBS*R|0Mbc_7Gt~FR#H4vNzRWnbt0Rk7rFl?@$twbge2c<^^}C2nX_^ATT1Vzqi%^x=L8xk zLoVT(Mzc@xX6au|)q?ij zdq$rd(H{1>DksCwaJD*E`*t)c(#Qb+K`J8F*V)c%?o)kuI<;GMsQLGK;pf#u87o=k zp&a2xIZBzE0zs&Hgb4CvlF`jb=58kkO7hfi+c2s6$lAX#*D_+KTSFhu{?{hKWFOOhbdBS15| zVrn+o-*H>m60=@zndU;t;ZhYcr-VrAs;4g_BN{H``%WZH)D>1Vo;cFAY3Q=1)8o6i zj}b4x*rM>=?W( zDyga2!^$`C!85{dUh|!2N z51;Fu-D7sE&VaT=)P*jnkc0lRV4qC9Fq5m!N(x9#r|V6va1FEStUE( zJ=V{Y{ngCq{|I<3U(O zn$6N_{0)v!`KWEIRmYx+bJ;SZX7^g$Ip=CN_l%*u2Km}0q*XrT>|Ac0*z!nJtm$1{YMlgVn;MZ%s*ji|1`Gd%D zAdpWp_SEsQnmm_YXQl}bo7%2-MEaa#zWwwqGY9rUgxi?zapy#mbaeB?sONg`@@(Rr z+XdroV*&FX0Rmj43KP!<3UA@-N@uU#Zi-8v7(|wWxB`hSq+c-gOW?Y=0dm0=VbKVd1OCVM$y*m z#nxfto0=J03W&SQJ;w@5;;>yF$GJ31^CMaVb#Sq2j|E!LzPyf?aN_&4v%Q;@;ReFM za?jC#2e~hnd21bEP_v3`2*-UmIrv@t2RWRYBNJ}@MVbx7EZ33W?`q_=5d%JKHYQgsqd7PufG20mS_1N>o3(+ zjH~nec5-P2cA}JxijxU(=o6TbnH+;>K4-XNBQ}5cz_M$}pN5*~&4OY@-Zonqp8t$lEZO(Y^Oz038aAr-gl1p{^HitU5*T^@P9>lhqsgy z9o~>R%l%s^cjR~e7LBRKhZK1TAAgulcNG@w=Hk@+3Ra2e8qkD+ia7ely}dJ2aa8*bM_Cy8!9rz=FSXS-E&U39XQQabsvvG+RUTo8 zbMu9|d>Q)eAl}}Ki*t9^mU2Bk%3Kvt!K0>!BCq%qsnLv{?C?peg5Zr;^sG~=M~*qk zFCFn0JlDN%NJ!a1ZQ7zuBX&@P%cqsBGh*LM!mj~saT_~jZen-7LEP(||GOvm2q|k! zA_r3Bg5`wm$7J|kIY`c;mh7qi#=sX-)HCMv=l-3+cNx=+noDr?s5MuT{l z=l907bmDf}F7NT{u_%9bE8mFZuf_;+Z%|W0X<6)642qR}Of+K|EWx+U|wo{(j$^(l2E1 zr!E|GUB&HCMJUpIt+aM*ua?aaU2}!xgyi8>l3Tdb`U@iNb=yv+l^!wuvf)pk?PikA zO%m$V0?(qhBz=!TxYlJF-)+vOMr3XAl^x`4H4DOgaF2hAxYO3}j+U&NE^_~egjMjc zU6HRY#q@7H4GN%ym|ix$SF|zJ(!8>mj{k9e;sL$GETQ|L^d-(`|7F zuAt9*NEbyM!<-n+zxR5p+LptQhS1N^WfskiNS2Ydb zju@egT#u)t^Zm5~kGbPrsb$48#ckv`BDdlOGhaO|^lIp^>J z^VARP@4QeR+HuUXpe)C1&}*NXw*J{Q9FKRUgT&VptVvea$h=Y$Be{XIzlHD7aW3&^ z9MyPD)Rz+|lfQbiB^?tXzG(==7Bh^U8V5<6UM|DRqPHy=NW`;W?Z0 zaK!Nsl?gP@u5HF%qW6+aq8;nqj`>L=#&)};+_@nuV)B0uouleU3>BiDK7c#m6wf1(4z8vF`OE|4@;jR5UXZ@JD zBK+;pSnjcamPZ>)US#0BOdGOJvsLL5<(_rKMwu@Ds$R>YlD4YI{mU=2&I;AMr->rW zZ6w)ie*OH>e-=(ZoL7D1{w@kB%PTwLGKA~99kUiWiIz?NHSb(`wk*K=67?(%|Ty`e=EG5^J&*DFw->y2GCzp})>CGDfr>2aU? zGY$iBLe~c4`HD@W0j~cVbFuwCpD_a*vS)G;>81Em&D0jPBGIRn$XGivykYUG?#hMj zHL4ROj#;`#(i^{OuGC%3Mi=$;QQA4}SlAQ^BQ7kk)aC_>SpZyY!LE;a~dS`BqtA{`K@P z+6=Jx*|bWsmdRdMx$Nlunr(OnF3lb;NIG}R)FE%>#TUY^wJ8q%CC~4U% zwuX;fL#`k8wHi9R0A=Pd#z_ynygh$rEPOUH(1LE0PZ{<9I=3YddBZsD9XA>Lksn+) zL(RvBzuP$QU%4W)lb+kj;Y)~rVTjQEh_T8-MmmmZHc%6XPX6?K9J<4^eNooxql2!5 z4kDRT=v(Q9wU=vPYac`Zz`QOZ!Dnph=)PTotj!H~izcl}MwfS0bz0cAJT-t^~$!UBa zho4Cme>d0SH0nQW)onr92ynq9*A5C7tA;J&;*aLqInVNk3Z)N(A548OdAEz>*`u}k z3+YkE!nh<+6eQ5xjv1K$d?m}~rihy5p_~*OK2$mVG<;$pRCDdF6bCEuV)?7An?H(K2VZ2O{6`3}TRkHDh-NE_dI1 z-u~lcCt}xRyAx3@0)F>zqrwdU8|n+Ksq1rg_x>2abalmX@+~IIBrM%FnQN%!Fk5Rb z>*v%idMZEciDJaE_axc1*zDb!?_p>1=4*Ko(yF=zF3b!4k_4eVQ50f9IhjTDuPHmc zls;xX4fj`Us}CK~)C`}?Ils%kxr>NXPY^_;7w<*zn;*hw`&Z2C=F!GVyS(?y+V4y9 zF6i`}muC^>KKJ2mQoPp`cdRAn?q(%8YVkR}hlTeBHU{NX2AdLG%*oM_#_0A5{z@h_ z6ET%kJL)3}a=UtgTrTg|zzcV&-$TCgd(Ceqp0_HCQ&`54iPO7-W^|W-YqReSn{9gK zDtGFq;=(>Yb4OycVzCpIYWxgISV)yxHK3KD-=elffIUgJ^2(Fq=-Bl=mcEc8(LeSt z((Bj!@fKc<)>yVM=ACn5<~lo(NJ^v$`b1OSO#O$$YjkAqst*L+ zlqRe%eCaL$tD-PrB0a0YuV9Y2ItA@%b@1Ai-An2ZwAfiL*y$`oOh&Oi_?*{Y?yr{f z+hZ$mQj6G`Ngd`#u*umfZt~}P)sx#*YJ|%%`%KA!Me1t)AyK8sY({9aJ`fz}&PMxd8pyeT=^hWma zQOlA-TrYJ@N_JQ;g>E!=DcDz}dwZ8H_6?hOYAt_(&+hWPDY`VZPN*>3eQro8wWfUJ zaDDla=79MocDm&@rYoj|G=W~m8Jqp5BynY4J1N8~i;<$m(IaQ98=z)I_^eICWiptB zF_Nu`lIJytWkfio6*;@KB| zqSpJL>Ob>a@49#=g!;}vc8u^}#8qx*W59P`i(g?6?CnJAzI7kNIZi0<*7uSZneG@b z15HYDv|)J*kGHlrJ4R-0bwXu5eNK4m_R~ktiLnfPMz=G8jHI}4If;3o*1)Gukv(51 z`v&m}A02pn^5>KA*j~-$2--h&TNTgfyq>97MK0a&-r6)ut8YCo+?BPe(ci)=p1GJ( zxk{~vi!ZwL{n4R#NsK1Hz2&X+vuH$ZzK*Z;dWyi*s_}_GKetAvgXKz%mt5v$^hN5n zbP?td_OoXXCMW-SS*gwf63|z6IHLPX)h^T7yk9xwx0nw!hmA+(e`g}YCZ_IM_kOA7 zydF6Y*DrJ9Y3nMbdoWR$L-IY8uw;MsR{dE{sKjL^g&#hrzC1R4lH8{9MY$z|L8?tk zR@a@ok2J0^J2AI~?(ZjG=5~yKc1UvH-eI+aUBRl=$W`Ix7^JkUa6c}3n$UqHtYy{A z##gJ1HU-8>XZz+t*QK++8_)}KEfJGr|3!SiKX)>q19>AuDMenYqU5g1uhcvpi7}ql z9@DudeE@sYN{6F9Yk%wb-1S|Z5mBm7wznmmB$gX7l$)AphK|{nXOKeqvY~+8jGg}t zqsadC`_!1n)zLTP1E%+laR?drEZjqaYbCg=6UTAOyPAtQ#Azqi3 zy*GLA-2Q)=T}iHr#`I_ZQqlEFtL3U(pRO3V@EGUjc;famqfb)9C|0RAtSa6g_l}3J z@;X1hS0=?UHxngS6yY@LRc-xG3R>aH)ZA9GWGy->qUg?3*0zk-X)#wFr@M71DXTFm zk!HmzF81vkoRX~{9=y_%a}fO&a|r1<+DCuAxJ5s~Yt@T}v4xqZZFcfmKBbrYKP&Ax z)stR5^iQLIXw2PvaElk2r_Gk>Q`Xz(yi-xOCd}+fe&*h+$CQJq_WD1`Po*ErPkF@I zc*gUVO=B#t_!CT2zdqJle1d8EjnFHR`(dvFu2WQ)oWF&^% z;C@036)QoC7}9lZ=j-Mc8dbfUUq=3bj%%b z;uu&Z3vTwmU<>unxg}81bB};M5W-8zus5??pqInTq0hx2aZJnDH{J=3=;?Q;ri<|llA;Mu|LlB3xsG%@!hB)r^DWjD3Cm2Q&hjy%Ct1EBBp)!k?`3!ML>?-Ja zzYkD>ZJnThRz)VXFI>lo=ig3%S!GwoqEKIQtKiwhyq{R{SbeNNM@kaUHXPb&Mg&k} z|IgyR5#QtfJZlKSj0c~|;s{W8DCqBQ*!J?v0vfD_CmFVdNCXRF9;WtC&#&+P1hWdw zae~;@uWlTya7_oaVKrb6+U7T*C!8;uc&)C7{#gy!gH>cXsQII0Llml@kx>Xr>+V9K zu11vMVgCW2p}&TS4fHYg`v_ZUp1)3oJzTs2b&Ka2I27vA%RHzYJ7G;-Ic=YK#99Q6qr*e}Z;Kl{ijzAvhBh+EDrXAYODwP^d|3am>c=jSHwllsGnH z>@SWLIbRT0&YiynYV#@!6d5Fe{*9B>{RwMPECZm@SF{1tDa0T2S(G@`^fz2|H%c5s zLK;?s4%&!EN&9jNw2aOKt-TrydiQ-bDAK9{+B?by{Z!fx8gYpTYGrZ~BQvO=bgBu0~aY27GG*o#k*rPdkgp(l8MRkOIGmpUrPzfF3b-1^qoR1*&uB z1*pDvJgBz0J*eh+aV$sMUL3(Pe3%M)=$trEbky=bsOCj+uuawE2Iz$#aV)C%PhbpQ z=g>Z4>IC{X)|Hqejz}H)6Lw0<6Ca&Puz2;%Ld5|jExRC4gGb*%mCjrSRWTrdCKuF# zrWDb{l|M19_vuB@Hh&}Dzp|lt+`qx6zcH<&7H&|{xGrA*Pg&wVN`GQwXFZ~z{WtEV zMi8%|(Vqa7=}RiK51bW;tWLQ_g8mJ3>D(2s?cZ?P-^kOqKM}IO!Kd8%Zg@7WtQqug z!0d16>-?V>o{oDg)K!eGgJ#!uf}SCM0;M(&fc_1A{SAg)3=@Z}{>ID<{1Tz9?Ia%e zZy4;HuXroHz;sZJ+s{D_gT=2LrE^!sswdVT6)m8DBVl__m_hq*0PJkQH)x;z6G;1i zLtk#<$kv`eQLewCufO3j!#|NN{m0^S@i$2JHy(B_C<7|TT*M)Y>DM7)N7!(e}7V+a2Pz5WKq{>I55@&bMSM#BCE(*B0i{?{;=IBfR+MZbXe z0DB-kU>+C`zyP`f+JWl;bs#$699Vwx)*^2Veu30l)xS04jhJ00|%j-~reGYYtQZBmfTp20#M905AXm z0PY9tgYUug;CQe*cpZ!mE(eQ)zroz#Y_K(W8Vn6?1}lS)!NlNTurGKQj0>&>%Yt9Q ztl(6zDR>kN3ho4Jf-k|8;7G6|coB>UE(8mL|G<3UJg^;j4h#ow1FM10z+~Vsuorj> zj0LU|XT98Fz)avIun~9&3ws^-G~gJp3wQ;L0xl6-q*k1%1ZRLPz!P8yaD&(i z5YqgU`+}GM{~G-&+Vg)(SMk#2emhqRu^)C*2NjVR{W86_O9z4%w{B6mBz1bJg2F$o z|7^Op$)RtH>891!FNbeFcJADXrQ!el6TJOZ!~T`0d#ZdZj-=J3ecXHR<8J)G$5$7& z;|FhOF%4*As+^ceWshin_n6Z~I`LN?YrisMvZ*UEkCxYM`+se+D(pGYNyIffnDgyy zh_Gke(~)ElaLs75Cv!XxBkICCsLd3l=Y<%=3VF#a!S|*U+~@=+vU-L6TLak}l0AZH ztf0Rjilyj#VdyZD8rH)QO_38r&&75vjA9VmTOEw1s|`g?#isoH!D()&Z|{d)2yYY5 zn-J81n_W({=jUx2!hI{hd;Wg1s(L9>Tt;#fE_~my((DIu-*PsZ+u!Q#$fyxupFixT zjU4}kE?eeEkSXm%`vy(jvCPNR;M7D+ZN+`2N1iR>$`;m> zSni6hXDAFUpGwi3G@~pYxUz5mf#v^NTRMzhpDFa(r){T?UM^gOw{~&#jgs$4&mhXJ zNXKwBe5FY5T!)L3GMCB9o zy%g$bZvkg3*?ZwRVN#9Pbg5pLI^K#1>#Kt}_rg1~I(~jf&mXiL|G>2IJO}&Pl%wemGDt2{}i58m;1XEiQz~1_EMzedN!_<`a#4m?=PQ0bI#qGR5w_vt07XE z_BR-q_g&eINkvnKdr7xeRGn-=wG@kY?6U<)bfmVHuH;0|U>UX-v@yoQtqkNz3j8uv zv$zg>mlBA$XJSW&jwkb$;DTCz05XeTjFcGTzH8h_bVxANBelHN3qUZYJK%pspa}AMM8Pe2t!S zj~|fiqVB0S%O1I5aAArthQg~1A)NZjUld!l0~#wC>paODC(U@Gve?o^nclLCu+zU^ zpb6Y-XV&BMDaPR%v&PJ7ylTUxv_WlVlw(jRgEqtZ_V;Af=A&qdqQ|95J7( z(o;8c)NEdrD9YGpDcLBI`egXQuwWd=ng-$%#*k2q;B*TX#K_59MFFV@Rm z+F=TA*=sMVvX$bLGo1^cPgBDYujeO*gV?GR>?-D_6$e7sb~W;srN!*l`gOqbpqaDK zhCU!Z)!)r(#PgpH354Ns*Wf7#Gb7q}Ty2(``1c zqSG@;=B{m*(8s-R)5vds37j?)YIWZtO?V^_f~dGSRhd4xwq4ry-{F&5NUw%KCQWwB z3j0hsRkOQ{eo|WZCd8gc9VQAaitJXmL9|aGcrU*=?wCYc$`rvBi7aL8D&vxuv`IDya6C~3vO#WX z8TGqeRmQUk2%97+|MI@!g{g~prRAWm_R-yscpy#K&T15>Ab21_5j!vf_&zUEzDPO*wqn!s@5l+vJDN4L{P_?hrw zO_`CU-qFM{>=Bjb@FC}cRg!`w>3?`hyOww0y-=^iN^ivZht94h2 z!gOBPpIPxaIx%ico0^I3){9LU*Ec5V7kEDA8?w|@OA#TZEhc=)O1Lrq?F6L})k!5%>&G7Q~eNU8d z0vT#zneg1(i>rR{DKWm*F)@*PJEs}hhlVnopQ1n#~J>ldAq{lW^`o6nVlck>KHfhG`xCG=#8HvH-IN}A0qJ1+Oe5=^* zbk>L1{;rjsSO={PvN37v{MQi0PHc|M*48Ao)N@~o)C+YS3KwfQyq7elp6ZgOZ{V*U zBwehpOc&}=xsHkhc(Uq!uZ_`8n)~Y{SULFI`Q2~$oxxvJRXa;Fd7USEx^-FJsWa*d zQwJ}i1#^C`HdTB0^sM^%Qc|i)$@sc#azV>1Bj#v&^L@tV<`5&D)qTWQU5wS_mpc|k zSdaPP)dMRHwM6t-Z_()3n+FAKySc|x>Ig6YlP@+c;T^3Ep%WDqIT~Rf41Fh}mO49x zPM+ja`mOHcj(2XVQQq*Sc;nu~SuTdgp14J5|euqZX^PE+3m97gt_{_|o9#2yg^nLbCCs=!8Nz|Hb{Lv{-w-wj$?y*08 zAGB7FTN$V!X&I$GcqEh&@e0@1-cJM08;@dR}&atZ_=5$9Pa5@QZi1yW_ z?89qC{TqHWZCm3pEtQgR>Rt{7((bozP@L$pJZM-QvEX(p}TYI2vMU+2wMuziHOB8ru8d{ zb;y@XV~-A8PklEzwoa5@zl7$R^mF>7%k~?JHY9|m=(|rJVpdagCl}FrGd8kSE<->H z<8|5n%9sC#x;GDp>W%;Z$-Aafrcx=}XjSiuO0pXzsT4(}Y*Q*KWuL@sypdL;RFq|i zP?kxuGh?SLLt@A>_Q7C=VHUHT@2!5n>-*35`dr_Czy5e#=ep;dan8&Quki?EMi6;>KXfaFRaO*!(6O5hm~|)jl9I)`ss(BKK|O(OoeNqZ!7+%@`=a^uiFbw@`-}7m7_!ymKmk zm*3ha+40R!;z#4Y680IaafT{z)}IKEyML$ZC!KWl@tW+vM71qeU(sJWK;Rh-A`1wE z3FQ>p8^X7Cx7Z{9jSSh2U)xq8>EN4i`CVx>x|0~oCIz*8PF~YY z_=NB`jOu=XZBkcThk7h|+q8S4|M`Vk>JRwOpy2zKO5X;U)uLEx`_2dVw{tdNw0mtv z2@O)NM5&*b--6lf%n(*|#2G3P#%LHEX$AA1ikpTw-KC%gy0_L_OuKjP6l~}22Zje9 zsW+sF$medxnofHzbQ8 zcpqyQCTiR|2BM=|MB@&8uSSf5LQv#tsa51*x~#9KXF_&s2w$szz<;3JzJK5!qf7Sf zhcgs@O&|Mss!v+|rI=Jjuvb)?@T*~0^5mhm<=E|9+zJ@(xGDJNTaD8BAP4O1U^Hb- zG>WoLlb65wrlHA{s{3mG`kd2mOzVPrb2Xjp22HDIWy}voh=ijI_k-uPwIm-X3IoIS z{xZ@VF|LMYV*5*)NA}MQW?t&pq>-a}^qEgYUqJj1+&?4}WrF*nDr!|cmr(u z-Dqwxo3=P#Oj`)ZSLjAlZ?{Lb{7204*)E1!zp5PIsV(a=B0I>XuArmjoLshtK(C<0 zeTEhI(~2`Y-t(u(7n={pNH>?$Yn7i*qrAIy>!9^!?B!u|$=h?ZhPZu(Cprnf>-UOd z&`I}a6wGaL_yco=Xr`Q%*AC2nZ$$r&E`l#q2eru}Px&Xg+r%#Fe}XrAq~^MR;!zn7 zD{6zAnw8DVFFcJ3@cMzn^8cOjDAh&}yK=)tE9r}c+RnGci1iI0+sv~){_}T^;-K8d z=Bo**r(I65)2nvOGv}HYB(Riq`jd3s)Riokjwz|D^!x+dlK}HxBm}4a6lPmp-Xw;~ zcd-nWvdVlsdg9-Cc$>%)%f8u7e)yM1G11BCWi zr9ne|DczefU2IuIs7x;~V!))sP#HAmp$cg`<+kxCC;!29-uQ%^%N)&PtI}1v@Cop& zVHMuNH||}xI#=^{o!sQEmoM=>AaJ6P+1Lc*`fB!I5%B%03o9mR5Ac42mlBr0D`W1+ z1RscR1zZur5s8}}a=g#>2)pK0L3%bMUm%uPdERa!6uqu$-)->VKut#Vd~|CjzKD1} zbD+Lh5Xo_2dsO;KiR|YbFDYW?8GA3k;-j-RUgX<{>a z>W8vMZ>Z9_X|G9E`l-+Acl!fwh32iFdh?iL>`WV;dq2X{VXTPU!Et^_E+$S>2R_H8 zH}MMP?v9PeZQKTvg-Silbfi`;sZR!2)vVX5BVXpSyIA;QqSvYCClasRjkPP*hU%E> zXNLJsMRO;O3O$Zj7>Y6bJRf+NDb74wv!S%A@pJz5D+`u_3(ZB;n()Ef^~;lQ$fR~|?VhNU-;aj6Jog1Gq$cH>o*sOw{44aK}hoIbgjkA%y+DFoBk?A%47(4#iMn8lf>W!%Mx)aAh|E!tu zAXw5_A_}F&%T;bCGjxFF{B6+hZI9RbuEl4U39g1U0S7|830n?TWbC@kdRry=7lkUK zQM9C+3~WbINd5iAbCGIC>kBLfJXW)HX}GPg`PGqjmfNre_-V>!2A$}`aEmRJ7Y8*< zuKVGB9pZf1b&X_zj(I;6N z3(M&C+E5WZGWw)ZNL@M+={a}GO5^&uSAz!Uo$ zf9jf~%o7IwYf?kII|%1AVXsaE`F|cm)`U^^qd1cA_8cuuE7U>$noxM3meiTt6i69sGU*E?EkWJ-sQ2> zcy6o3O=;3*p&G;FTlzkc!}v>Yh8zFv3aw&ZG^>_J6Nowr7_-=BH64$@Ym|_9yGw?p z$;V-~3)jx$2Do)ah+*7g?lv`Vv3)OHR4mS6v5gJybAM>UVF-#DVvrv=Wphwa&f}!Ed2dsaA$&HKde}Laq^iv^yGdx_bbVYy18K4j80~^+vRhc zyBG(AriXf{^KJp;xF)B}U$O>`J1bIl2OWI;YmO2tnrlAp?yinOV%ky?xrq)d-gUT9 zq&JWICgLgWOu~;f!yDD29%|GgR!@YCFQX`#E;opcI(6XKCdNLTSgeBv-2zP|m&QHW zOgEf=8LBMDDCJ+#nx>48o@LXbdn?Vk44RLJG=0(JJIn0efyd(^BlZKaq#JEWk3lFy z&u=k`dCxVTJu1<2H;sEW=Z^pIZ3U-$0C$Mg?%Mmr(yKo&2J)mG9)4~r_dVuhkOs>v zN3OC+gSm;_lMqtu>4y5Q^bu~dok~+5)C^k3^*cj}Yzo?Vfpm%BhEtbkttB?HMV*(q zTz6O(AGqm`(64eCM)0gB>KC(@Q`9Ri^&4HZv-|Cyz1}%GctB6+b3ckN%?A$aR;xB9=h8{b{Svt-ZfkPdID!5Ws=W2L$*9C6LG`c`O&=pBS@!!(3U_<@DQ1* z{75R0g-q)(*u*n4+FJa)uK^BoA#(WR?Yd_2rbKc;xYm9J*6~w%$Eoa>V%sfR+lr~7gB;>Du1Jw`<5yzYr(@yrf1E>|+0A)%2&W(i-{eV#bM$^IS~zSAXV@`sMMDWA+UQej$iFl7EzQ{*?g7JEBcZ?O#!0wxC%LZWlS18u0kn&^ zi^<^O^!zJ(S1@=+2)(zZOfD}V>*mgO0G-%F0ydIX(kDhDknGYoM?Pfd7(K-&WGx+n%p<$;!?TX*p7geaEWCy$51KAV8ejJ(VnCeG9U8AuutT_)utl)h2Zek?)rqPyax z`OB><@VMN0|CRjjm|Vcxi0={|y4Qpee1y4rCnW-M@*5^#yn8{ftHF$1 zLB)B0|b5U7|%7j+BxWM}X?$PNpYdmvO-^W!*()89j@aKnVs zC_j~OQ7@baRy46K+MFk>a=u4Ryt-pM(^}~6Y0I*bs;F@!Nw4)aMpd7^c5?rmWF^N% zWy=nU_G7Nu)K5x!WKBAp2=$WYKFrAE?PZv&+@kSv5%ztQlh^ct zJxDPO-RUn~$-;ZDZSXs0B9g^%2vuua02)h$DhExd48wA$;M(We|63@FbP09&sm!1J!qAkdPgG=9-TTwZZg7vPU&E$Jw9glRkN@fdODwFA=p*9F7s13 z1aFsZ5s}ik-+gL*P=(}>^Om*$nG#ap+OgR`rc~d3G&8l7$11Jw_v?3y&ZA$6`QYOn z4*&Iym&edeIz5BDDE9-(b@5T_-tm%o2DP4l!d3Pk((UHX(765DhN}8hORN;j*rgx3 z^PtB$+Na6_AL!=Et;-k|y#{&vj(Scq%g!apFYuSS1}5!3RH5M^gHAaoKsCkKIgvL| zRF>SrVBn>sUncI^;VowZrO!o8>8SaSF$oP*7`)p9+{3Y{ruZ~ZDlesdCcYG_u-bOh z@NQfk(2b@?FfZiuoY^^C(raBA;BZtD;(blO`>af$zxzYX2KC!;0#g^u7adF%EK1+3lDf@NFP+@~pe%GHl~qLiV(p!?&Pl~Rp=9KEzQV=P zV}qyL^{-vA)#YkgjG!MYx(06len}8?EwDXkou06lZd*@i3-RIYIY4E8KL^$n`VqQf zaxhgX&2zD!+?I=gT&iB!2apVuiHJvJm^OGvbgGPQ$NmFj>}oJC={o zh3NN;4tJUa`6hqV*C5LFp7m=P_%UP=W0iinwDS3@N_|p=4`Iyd-h<8|7ZcDc)&i{+ znoqHxbJfpnSHSVpS;VCw$$jql&hA`Dq|*z{t&gD}JAF)y zSTtXLH`waka%DP#y(`kb`Ak-9LW5LI^v{e_`~JE+N95v^Ka@SX*cl@HEcdP)db2dV zxq@v$nV-5-kFMt*h`^)@64DhNjzDy2_iS#_0hj4^kwug81yjPFUMh4`OszLMeeXL-r2ovDf+l0tKD%_wEjZS$M*E8JxsukUlzw4vN z^u&L8y6+S=irJR1Is8{!n^{%bGgHD;HU`&16)X~0cNa;_CR}P#t>Ix%jpF$4BL86g zX@T~kiY9~op|vvGzyfRuCNx)1y_8+U8|n4aggvF|LxGC3=wmsDAi55J&-E2wP}N#G zyEvgIam3%t#MSIJEPpvBn{1?Ovh7oewnKyF6XL=g%Zs>cvp%8rT*Bg(hvtW&aDJDc z-m}F5vH>-OjjEAsRT?!C#oH7o3PhFlT?;K_T}Tt1WnfYetcOf>F3pt%5&`JJ3nGAUej>F1_x4X3ZMy zffqgIA5I#HT=r3R_9SRI-vomgGQxJMLJcOgjl^xU3zc-aeyhpYGX@=}5;O1C zWsusZe4yzfQK15WM;&~?s%kOsa&FHITZW7Gg`sc1W^9tw zTBdLQkJiBSopnvr+26rgs3go{YM5s@R=Jgey9=r{vG=Y zRK1t+0}xmpWzRzg!Iswd5!siF54j4c?XSUY$0K= zJX57_?mn+G4NI-3>vpDGz@vD5tEJ4@Qz$W9U>ZIR_ePPUIi_yyxEw3u(|M1!_LJ=G z#H|#ig$3ci2*cqU-|1|0mK$rp2ai#;ffay2a~R+?a2L!T z537s>ws#;IH0rgE`O`~RIfxQnw zRcwj48hrw`Vvx!f-KL^I|K0sxJk^j=?^SU#bMm;lx8eikp4PCrck7#?U+Pv&SMNnM zEG%Yn-3AF$z1QzU3-PtZ>tNA-A#5-VcLCT}s(&=Dgv@)Da4Nb`h`{XBg_t86P(B+> zXh60$t9|c0HRe{~H~G}^P-tooE1HJ;-YMHmNNs>_Zuk*exA@4)FbQ*OtOCC!K8y{< z+`4ysfYDTqOp97KB(qWwjzT8Gh?ZwXu9j&V_pF zvQ8QQB$U+ZMXrE%nB_dCyv@EpH)WHk!SKt7A0yV)E3{mpE#&okFKp^M$k{2|t;Hut z#a-oVy6JdUT0t)JO}ou)DHzbMFl=RG8cahAgjK>U~kOeM^R4GA@Qf_zW2#xniu7n#kmEK6`Z~;Dz?Ws ziN0Sg)s)c-7uirAX6Q8q;Qdjnic5_k^W}$!OCD+!B_c(%_Y69 zi8xJq{S-lw3aqm6a37P6sOLM_Dci&`I*(Pj$iwXp0_5J}O8LwEMY`lTZHZ5B{x=ixEAw$B%4jPq;BSd99eX7l-fkYYs1v?(p zY7|q&6gCON7gf!1X-_&sTLbf>pXaPa<`d{rx-!k|ILcN)?9;rwrItxvCL(iQ$G%u7 z`OLTCTVCoW+!txyK>?+?UTY>et2lQqhnV^dD`vpcjJ&K9@DZoz;xG15PdCmGb^1H5 z@w9}7;*0vI4pAomgxxd}?QtJV-lDH#C(t&2!8%58qPrK~S#NUfz&f?tqM+w;mx_P+ z)R&kx*eQ~(i<}`wnwrJbvvYh}Mbwp~7U?s#&K=3N!=lUqf{W55>zE=%z7R)gEFN9l zZxet&z^eF=-=g&X{vjVEXV^uINWpd+p@8xZZlKT%#fc}kaTU?jNGG$in@mCq$ltNcg|J!4Ekb+q;&&ECqVpvbBO@)Y3otS0)M;LnHPFa~mXmOi^lmh* zzzDUs0zFvjo#@drwM%?(?0f<4z?e=AA1s`ZfEy%HXX-0#jke{j-+h3$sYvyFo#o)Y zUG+QgXIInPbo%8H2&#waNRXSn|CD1Pdz5J!dg!2s+3p}yhaSeE6)|!@^j8OjLpA9e zQl9pq2D0o)EJUm1!*4QZ91jUP%9%_n&{eN zU~Van6-HIZdsJ9YbQMNIhJ3|1`8|2b1JKSo%CZEx4T<%F8PTEmglqVwDN8=S|A?aK zWRQ$`F)2#I7a~99YDXDr6lLSKsHHqb+&DDZ8-@_^7;+h+4{nR30h=C1?&=Y>Hd%2j zknlHq*Ixz5nCtTzN4Yl`{RS&>^OahO6SDp|8^vCjHR?lc23Jw=#bTfvmmEuOi782iO%@M!ts#qq0V@UD{2Y?boChmd-HB zhbGL1r58f4$8swBUh5X`&V3s30V0H7M49pr6 z)Cn5$%fqhL-6OqrROmZ>Bw35>3-esp=jO-5_7y17r zJZOb8gMX{fLB(GNdRCHKKn}kyJ%&Z}iAMM)FOK8wI@T$1TeJEr4xSX0lXEHQ%jHZ@ zVlv9QVPmkZb*m<~_DzMBu~WwRTS6N!cceX2a@G3lCo#$e7t3d`@wgkYszoKR4*q%; zPWj_0)G8^VhhBYOu*F5UnM%s&0syc+vX#ZcP77hx`&zuAX#7S zgxTx5|M%Xe3n6J3;1ePihJgU1+)6QU?OeVELY>TmGM)B)1@w$WZ*@pZ65}1o+n?yqhG38!JhVyKBIu|p>+`W zfi8w-fPGBuuG;|j#`Am{2<4$Pd;M|wu$NpTL*NWg`@SZC^MCLr7PyO|si6Jiw<^Yx zqp0^ac!uySa1;oA0nd3MC|-NXnRE~A1NH>%=>=89KcQ6AKl^~AjBKxiN0ArZ$V<+r zCEu0(<1aR#<&rz`|94HHVk(h;BB(%nHGPx-t`r-O0I$6LZ4_`ymDOu6`J75Y@D}p2 z8)M1KMWrsiZhfFVqp+3)Ugtk?T~}WfBV=SsTLzGS{ud2gi{C3Yc!tsj!k_;L_PiYS z89aLI${ld*@r!p5z`ymf2y9=9$fhp6dOuNrf{H-9V{|zITqEHlsGm#gk)S1N$xUT? z=@tznbNwouY%=IOxxeg&qEz}NB-+%G})yihc*%O_x`k!#Cym~s=zWH*=n=-_j2i4`>(w;91 zm(F}zkn3MJzdB?El1F{f)s|aE%5nf5V|Hap_>&0=?u4vVXJW6Vkit2dZ^A z8B~xb1gdT5Cs6nQiC8jlT)OrTc~zhuIqwFl)x#w}jeT@AsE%)IK)v*`0#v)FOXpVn z$079B_w(1=WZ@MB+W&fbEPP&r?Z57*i?5cR!T68M>TgU{!S`;^^4DEtjZFsIw$F<} zJ@v=Ub1G=bh4a@_rF(YCx1?u%9aQT-@m`1jIGK!YFTEEj-~P!=+)nFu5*7JMF!SO=WO$Q$;tFLE=t$t z2H5`pqO2?(z_!k*tDv3<%LVms^p%-U4A{1Px%B$~bt(Pznc2K32QB+gTn6>83+iu_ z)n6agU+2>?zomEiz#r$+UoY3WCrj7<*U9wPFQt9T5w!euG681?*#7Hz`suvfQ zhV|FU^w-t&*X{Jz$@Dj<>wk*7`rqCrz1*`?21?&Wf1$+f?1!M(S1xy8vfTkd+3bX)-0)hg30(Js$0wWYaCJ3kk zumq$8m;{UjfCO{|XarmYPy|E-I0P&NM*#`~1cCzr`~dj?_5kw$@Br<=haGSZKn@TN z;0>^C32c|$0nz}^0L%c%0LB2r0Kfpfme3_&0B8YX0bBuA0Z;)-Eg`Dgd=N|2!IE`1^@;?1%L#=0{{a+0)PR)0001>ejt6I zdmwtCcp!Ih`9SDEi$I7#g+PKpe?WXdc|dkRb3kxQAy$?SKxaT?Kw&^$ zKwCgqKvh6eKuj@j)q&)%BtEoj+u;a|f@ojQbn-PVNSL>j)ukY*^F!nK(4 z6EU=M{#C|1U4CFOn_2odH7baP`F}nz>i-yebM|Wh)>P@Sg*9F|5()-fJmj^wfEJ%cF z8x=X~&`GX~Kv)%r+=oXLmI+b|Ql=Ww3lqx-*d7n1>WhWR59;`|?>dw%;Z+ z2~(!ok76*QuNUOb*2(SbWN@0zRXh!gl1BFte5Ot`*s~pP_60h`Ntc0`Qb}T6ITu97N01N!MFY%_|Jo%xV;z2UX<)IV3zC>4oPD$ zOzbHb*1%Uh9UXxZ)o;QP$d9@!N>t#z+Px7>1m(f$d3Kf@j$8gheI1!E=~GTqaRn=c z)1=Xshr5|4Sj*Adbs1l*DPCgcK^NL?{ zf4i%&<-&brS$$4Gh}L`sU3M}Hg#l-PLQk-OL<{L-%y=Wa1bD7xT3@ZBCibXVUrS2R&s;w)m6 z50t<*gBcP=6C%T{b)oY7vV*N(CwMUlS>?jwN}-;Ki9Yig!9c)46C-bmp4{(Q6jc95 z-kw0<@+8N<*dcu z0V|kz;dhIKQ{N=fBb3gNqrH{^ZG*J}>C5AnUAPt3I`ZM0k4sPtdSk2F75bpG&JnHz z-ol38eU?hQfMrOlXf(W1h{Dx%w?s+Up`z+>nZ?o~a(NAuN8v<)>AQjxIFycgKvxjo zYF`-Sy>;&_^^s^>@kqaYJoMc3yxb8_0(I4=;$*a*iOVRY3)h~kU?TQURJ>1sUu_KmLzL%|RcuvuXw2J{z7oMV*#wg8TPVwHfZOb&tEUUMrWBIGukE4awbs zfC&uQLsmUxI1~ANPz#UA)Mfay@0r~zEBky-ME@7xqpI*x}mF_FQ#ENgxyn+ z*i68_iwooH+!NVZh<86B4~rT0LsTJ>yWAH#B;_}^ot9^W{94TJ4NR&cs6n=hzxnw( z&lQ>p_RNAc_XwY(Hk=a1D_)Iq|ET>%J_i$hc&>N=s;msPKnu1NCTS7cKB zZ-0?mF$^hzG{2*vcj_wp?FXSP{7f-Ta%_WaY=P9NhVKi{-gmoH862 z{S)-LjzG=)3B;l}XljiTw$8n+H+%TL9l0K1)9AxlH1*Uv;O>Ump9E-Biqvi6J_xnZWv1>z%+znLYRVi~ za$UL}3Xsknunc0N_emq>plTS+v&-hgy!lBsB@CzVyoR`0cJeB`n4x zNDDr0qD~RoN%0~@+PF22 zGAFo;JwI#d?DUpPBC*_l4JvjxW2lAq6F5QA;Rzy(!R8@FvBOkth&QLLpHRfkrRgV( z$MFw=3EAsz4Enuiw`)JfghM%6&H_?)`%KwMAGiD;P*ij0kT@o6i+-BrHc91JgaGv_ z07@NiuP8pzqG?;&rUIEDPR)66zNGP2iC9x_gExs#lUrl>9M*Hv2?DAP6(s{qnXY!Vh<5&J|qaOBAY5Eq|) zNJ{MSS}8=HlM)i3VGdIBU*e#F9slTiSLJ!l0?kN;jRoKuKbbW_rw1VzSx|R{9(-Ob zD(=ZS7fFc2BGxDB>?)KeM-K^4xm*!zw8>63PM3L6udy?aN?&lG`F(5^@#1G99DidP zQRJcyCT#D4o!U@<{sQQmiD46{HJmhJ;pC5$4h;`z0)@) zr*jL`D5M>RkVV7R^@NuUi9pE+CI3{ys4)q?J~C+8xg53QVobsh+|J9i_3g6aZO>r4 z;d8XFN>_hFKUf!Cg(Ubr>ZcmQNMWJVrf+d6k5OJRsxZx!tWyoV;o*O9q|IV-=GxgC z*W2V;RDEW0ysY=@HB7Cp=}601gmsG7LAiWWs1`A43v<=|#X0&N{`pC?IUc#8QSxn& za4JHqZ#I`4gnW*!@W1wTWwYnK&je9IHhqNjz*)q$W2|{`K3EJmar#uiJdXz0@ttknh6@Dk%oJy%qSf`JfEejh6hoLzI<1 zzV`U@apD_}rw8#*fiXjcg>a=Yc19cOn={(}7juf}>)~lKvfa zZUqJ?#W}mlAbbASOr z!JDvj0=|tQX}St7mDic}JAaK{BNTht^)2X!(O)!Iztv6prFbFeIAL_Q1IN9QxPD0L zm7~QxG+5dxH`)Jt4l(gB!XaJ0>q4J>!3#ovadY~kosRsjef#Mb4m2M(;d0??TFMrs zwfy}b1T!CHb{%|xxG zwzl|tyPk8w_BSHuQ=j2A3rtEw(Os+3&7DU(ExMJ~&+HfpW)%_Yn7qyIo?%cEOh;Pp zQ@7Y?vz}_9zu&lXJ7Fn^rP7b{kR%!&LB6WmMeusDkk+Vrm(J_w!*ux!jPz)|*ECzy zoBmc+T8;5sKM191Bf5U;(bLv;aoV-ZhEfaqss^J3CBgCe!v#;ND2nHBTWH!A8HHcj zi1t)i);UVfVsAZveH^=pG~3TKEv&-%I(VZ5RB(U)z;rjv)R+-L!!@IFVEG1*$8yQ? z4k&Ct(GLDz@XX}?Q*BOmy_%I?dHs0_iH1Ajin`C$<*%PR?#drEJ|s@pzRHMasr)*2 zA*RBh7W@Xd{I%z|*I*EqqZ1J0y9UcJR2UArNbW8Oel3Jll$^#oAGVZ*O-g%CJw@8! z509dYXsHXq<;3&Tc8^6X#SeOEJ8N(`?}m-JxdCeaz1jkjGnXQy!?cPXu=fgZRe?7< za_UzwovDoM^jmS%?8ju+WnQB};@^RH3O~TSQTH|)%wOpPw=!1eMwN{-GV?lV22TPH zkC0v2+iD2&HT(tK47a?BP{aVwCBdL; zX6y(>vuspq-O^X$zwZ?^!;&dUp;6Dif*jzjq7vpC+*2PP>K&80Vr}~F8r(x7C!iU3 zBFBJ^e4Cf3ciWL{pk1b96p6~BqQY3VHTK)C6Amd-L>m~aodnPNy=*c2OEF>n{GBTb zLq;7Fl|{VR_F}@sPs8^(BK9%^_(Aft1iebqYPqRvj51Zdt{xZYqn8?8`oi0V>ry24 z$TYn$_%9<<5OZuBBZ^U#fHGma@{78%J7u5reN#B)WU?O;I;D8GEqrX4!ZyGV5fU;t zaPl4!pF(0D`(nW{2CuZl_lpEwhRS;RFZ<17HF)>kTmJ>??fjr87%%>;(6mIr}_hg1~~prDNkoVP&>Iw(60f z4VK0FJP*d+yTASM)Rq}qCPR*&EBxsJd-;2RK-!Kx+2r453CPyojV)CcR~=dZIJOMq zN2`@C*GvSb!vqdxyU7Q1pMH>=lX7m%zId|g{gB;DN?^jjdjr!m*wx+c>-oRTf1Ot;2SZff7ud{3hedNh6;V-xreB&o(Zeq|I_9D9=Ky3CR= zI@RpcRuW}`q@NeC$+CvKUz(hod6t-~UYQVO%28h&L&xB4n)p7V4NswxoMXJgowU8Z zs60PLQ-@I1aItPLjmqN(s0K=Eo-kc7m~|W6v;{i9p5=x6Qd(JZ75vRVRI2w0u6BX> zqMVKiGq+*$s$sk^>)eIeg53MDammCpG8%&cnabIYMxSZ?^3ET8PRz_JJ5UL(E6s!q=sKobFa< z@B=6|__tO;ca;{zf#-CN->=@Ec)yYsIN22kRxyD__96F56!>WEy#`=4&B>Y~ZTDk? zk4buUM}^qVvdAA>SumV7vCkLF+Ng8!1-Ovn`@1@z8{ayogxgcVaT>DmTzNhwhaa zFgs9=DAs=h`6lY_Qn;NdN8wz-UB;@4y-Eucst90Z)#knn$FwwSg!`r04VB?^C-!Pw zqK*Zu#&QG0Qee}PG=j|2eB;wO%Jfw)y;6|}RbdJ@ujK3C2BqHddD=`YFEXK_*uF22 zCbVbxshR}KIqBIKO6&OspO_Hkx9+tqY8mZv>u0L{9^{|=m0)yg0XHvQb2N-S8$icm z)95lmvqS9qBCW#hg{IO;==;{AF$_L>V66I05xB};ep~U4`s(L#l!{A5PCw;_mN7Jc z1QNx(&lWTFJUZPekN@orNxB%RqgDRk`sgKs!w^9iUPAtga<*r>q|13b3_Un-F6jK# z9bfr}&Z@TY&JtEb#Ye%N>5Crs2T1;G3YjtKN3o_9L8C)!+>>Ew!z6TNo}`K(wtct~ zK`Wo^SM2h*n;J-n9}K5)99aKpi;1Ey>gm7UW_1f&SG&O1Yt;)8{Lo2%8A@KuV{K;r zY|w$|SYr##o06!-yw^^4aq;fa>=Ypzo3s$4ri`>Jg@FaGMHO6vbMGW+6k-^PC$}x` ziDtZ!C=d>`8lD%J7YhndbFldvq1>*qE{tR#&BoI?clN8IxA9Jn3km17OpN4nG0_6l z&yWhC=d}EH{6D;}S}`nE2ya?|#BRz-f1IULrsVo>A1vcO(vsS5M}O7W4;IrvtQ7rP zyF>GtxwhClVhnSZB5cYP-Exx^J^WgKp)I7sP=mYs2!B_A@mcsz?77Z=4pjfza91i% zWC_4x+uo#-)#Zd~_GrgM2wBkSac@ z{>DS?!Bp&QgnT4}A;g~-Aoy*>&7v#5$5TxC12@nIz>pK0A z0(GK8l1f~~{C>IX$( zg8rv`L;9r=OlGcvheH$;xHfx);C4uA;w^ZysY(<UmY&YbL7ZO)6kK923 z8*U5iXNg7u;uvw!5O(BWC^ya<`Fh8i?B$0{9#5K|c&uGxziQUm&xK2A8LJETj=^n#*xio{Z%v zwcjdx+^jk%34NXW-o^rbe7*{bn{uw#XEca{oB2Ybr|u}Yy(QI3v_XPzI3I4DJ8%Nn zsq3eZ8VcU{sDRE|hLVC0Nt8>hz{`o?(c<3!E(j1t+KC@vE6a*+wJWXgx+hs2plX-n zIFlB7#j2jUreQ5#0^J{SnpF%C1Gvv#niQMc&cj}=BKLghUP&*RwL0;|-R={+X0 z66MscskORO9^bjuQqmNs<%3ilG%co2>AL+Z9fi>DJ3>Wi280%8$@fY{r5R;$zG*V5XCj0a|x^0N({}JLlxN&chmifY7-m3$x30xB#D{`4n2vEON?wk@n)3)XV{{g@PL7;ZjPH;iYJ}2E z*W-~}nfyR)3rKzt6UDt#7W3}(vjXbp`rb3d({#UwC+|~(B~B=qK&=hqve%ny5rDu) zZB04sp}f@L=v2O^EatsoIpcZi_!aufS>#1%jJspO$(T~PphEU7zFXx+oKnK_F zdWppcoz3P%=Z zcEK;X(=t{0qI4|@`L0N*mLE74E|PJyQESzoi{cp8;HWJhSoCw12gT`|K_}1%`Zou; z(->xY@l3h34u7~jG(T)lW#9!G9Kj@gO;;45W&@X*JbLDs z&(sV`VoA)4celwB#*%tq6wcG=Mhn;%2?e3;1ov?XGtL}0bH3lV^Ps$#8EETbBZiWu z={%Q&OI+6O-goEn>FXK`JB264EB1F*O#(8B6r}XVpb1$WqBUi-Cl>Qc(*HuK2%n|%hCR4L=*n)U4p}Wi)y&2hW3eEz4gs% zNHGZA=5?~Ames8xHEcZzdm8&NEPkE%fk{1)in9%R9aUyNUAkKGXn1#FbsiK4!;GyRa;7@EH_FX(HFEd^)6rRGqt^N@V~ zQ5CRA)0i)M?UppeYFx~xH?ty^$RrlrG(QyUKl~6fy}M9b*BotlzDqnM#pT#J?cF1^K5)2He?%mZ6o+wh>bpAlszXfIvB!oeIj9Xo)jGje9MGH4 zSyrYrEtg-c-ZiV#FYcE4G>pqYrb}_J+&^`3UDhPAwDdv?4Y7PK~rde`p7KhkgB$eSWuDPofLNu>Dnc}iqpVld8O z2>K|8EKt#e%ok?yITH5d)h&opfR$FGut1-c?jK@P{;S{`_8?4*UeUK)6m8}e78*7Wye}}8ZxX3+{U_a4s$z4ka`K3)2*341a&j_==xr>oRApA2IqHe{V39PM0yG4^y57)-v$zv$+Wnd`T6%{D1H z@hg@|4@luo${jrV^ovMya>MEW#oe2~L-ogh<9U16RASnZGFl{UNXRy$R9c8qAm=Rp%vKz%M<+HO}Sbqv}0ZwcnLU4|<-P z3tD+OXoDdP4xI`*TOxJF{-XQ#C4p(*@ zn`b0HY8ZsRNme%O-nadeJ_>ta_Wo*TMJDUdU)Aby(ckA=B^uDx{7iKRD8_aOkPU?Q zr5p^lFO+GXkHl$wu{?!pvKByN<7N?s9;I5=vM+w4eswBh&|xg{E_q`Uwag^rP6w+@ z=noptX`Z&mS?z_Szd_RNr zX)Nif>pcj@_*j?6)>*0gqnyBiO&1@W>Z#m;m2@fkx*)I4sRR@6x=gS#&!TP7%~AGq zcTR=Z9A(AhW^GSBDE~@6&Xg8c7+Suf?1@=`}$~$WIF(M|7 z!Qfu;QQ>HNb0Yluxeq9FN4|I# zb8TT{Q_Bt)>+MLWt@K@%!R$qH+jAT=;_}BSQUJl}R~x8$JB-L#e)<-cxO47LejU{R zbE9u9EZ3eL=u}pfW?B3w*l?B#6^Q+qcZp^bTCM&BN$!9Cm>dE0<=pALdsHDzkYvF`nqV4RufqO38`&Dv$ z{g*v?{|bVUuvZu`A-kx8t$B`78M-iy6+}$TTU6GzUwtgcZ{mG<0LZ6Vi1Sc(SqykN zGmM2AXEerA)e@Peq79VeKe1FQM`9b`xR9$sRKAUw{J!rE@4aagcemER`jqWprA~es ztMEigojcnzzbdjJpj7T6y+u%sxGSwyzJ1&}{TS-e6S7v6v=%Xa-eWl{oMf4`g1xYm zS$FqK%&sY7HLsi8wSWpN#cttCawVzZzgBfOJbQ1Uj36gK@`BObCw)ZH z#L+9CLWQXc*_D>zSD{AP+v5|@ofufjo0I=Bw4obnIbUhMHRxyu1D`J)hrU#?Z>GMk z;f!_73kiH1m-KD97pc+Tk6P@32<6st-7be66y(@u?ikqu-pP>zbD_FXgL-?u$ajp6 zST5iUj^%7Dz{N!58Ia8A*M5d;x|ej0*dg^(-iu&eV7<X8kq*aM#_{xdRb8P# z_H&@9LbY*VsQElBBQ;@n<^99J22(DgGQTymd`l~_Xu`Y<0iGv}q&ms<1vjC(m^}`0 ze--)a3)(s-W22r*y24^1rvRm@t_!2a7;R}Ns}!`369W)D^t07dqa}kQc_Tj}CW1`_ zparLVynHhUHbS_?r9v{&rwDgSa)!DD65OZ>!E>7JscgT|-JFSBdo<(l=-RgAU+7Ga zR{a;Z5l9pg5KcFmiE_$#!PPHn*E<&V^v7LDN&;jG@Tc*{dMuWiOc*jyALTL5KN*Nt zpk7M4!0aetB)->xct08;&WWXm9i04!A%rNQ?Eyv`|UunDIM zyK?ipR+`IgKG8^q;Ax`e+Nh(1S`&rbWl+v!KBiYvY3G?qU@ei}5wb=2+)D22K54+f zstO1gW=Gq#14mha@x^Bwt23)&MaBdW=RjLqEJFutndJ$t9Tca;_cO-Gr1iX_Ql;-U z6m3dX%gO~%IimCHsyu8@=iT^4DamToxQB6V8uzN#lg8u=*;zoOQ90|!tPrMykK`>< zPNmN44x(#0ajgzuS@hEv8mr;oxOrvc%yTLRk+XRn5l$CcJL03FJ$@Y?WnijT;=Gnaw~lMW-kKt*F?{h( zU|Dp3SN9cMz@O+cqyOua2ft*`&Z_0|7qgG-kF1a4-dn&p+;sUwJVzBqpM+DISHDMJ#^xMR@o96==A zH(K&OA0lx=hAe+0VD-VQipNeaD_e~uX2>v6nm{Q9}x2_8mHU?PFny%GSv!!wQv z6laa&3S8Q03N8$|b0wdjxxylJ<8VsO8u|Vy8G^yN(J%}m$Ut;tG;nS-J*nSlDsb7wy&)0 zssO&aikV|5Ipp1@Tlx?Bd4J!3p8QaT<49k-g7BLZe;vA@=iSN`HS3Jcy@kDFSXQDSPkdN7rlyYmQ%QQ^Mix$j@G zxaI(7V`$gWKiY~tQj0wEccK)OZx$F*wLg{nD~kJ@_&QjHTeZFbI?rwjsGGod^N`E* zClIyv^L9;7-FXxPMWe{o=@+@nXh}i%jD~ zP2eAGrzA@5WqePv+yLj0xRpx2go1(fY@T9tH!W>VtIx?veu@o!E@$ov|DG&YTk3HZ zfP-Iwx!3xg>-B5t2epEOEE~7xkpnZQPA+e! zep06PpTJ7${|k?jk`Tr7B;Plx{EzSj{O5nR64}&-4N_q_i@75y4*el9BFOt+mf>sH zou;sU(jx7Fctv-gkDSPj^sE)*PH+?_J)w zwrC1FlWBf5rQ^Z>lbha4021v#AVyl0jDCRNf_wNk;2#LPpt@{hVYk`5c(fq%ltN#HWN9nEH^NwepT0JIB?JlS?M#8OTk|BY zqj}4ODH(oL6{O&N?0$#!FVR!udXgu#5{>ABqsA!h!7E#d^V4uT1hc1Euk@7W>OGuA z;SClRwmGx^x%t>b&a+bP-m!YuizDy8A;Sy(y1#LxyedMFmc1+6tAN%TA8OrFTA>os zfn@B#NbvD>z=3(g`j)Fv*z!ihOsL4q#dnM{a8`IPfNP!oG{mRdBIOZX)_#-{lFg%Z zhwI^-;m)64xx>b>hO}peImV)2->S6z>XM7n@6~e%cQ=DgfP5MLi)YGc{8$yuqe^?+ zLg{<07OgJ?>D{~JIl1n;>)@KH&@yKKv4Op|zJ1g25lJsZr`DP)@bw(nvQ%3slSnU^ z{PR}UzWqJPeh*Oi3KUKu!FQZBk|>{p1i6JDIiU-M{$QEEaAYv@>epaew`;tlmnFIZ zkP=dUaA6>uoOq)Z6)`8%B+f&M3x0&PHD%XyHu+$Gbnek1V-_?#5EAYM3#~f*tY}?o zlq(jL++w`q$hH~NovQwK`Y82Ni%pdIeH#Mt`gY*ga`I)?Mx{d_gYsu4jz% zFS_?_=!Cex$l{@IQ-I<@OGR)|4LIaPvWC4OH+ej)^0#!Sx2=}pjkr?l7ec7=*5IY? zZ_drthjUxRpK$&f+}z!;@042tj~g)qPIsMeC~d($REO>}ICKs*4LL8S_#2+v9f+8gRv^lf^uN?08^I#2X3 z7{9_LwBow(DWZBo`L9Av;bVc!9c-fQsm;{mG-O-T1fgD%+}qWsbV_NgvHCkc1>1!m zOGvjH0%TToT&muj1MTk#$n`?o|Jh56t}5KcWBwFDd{=ai6gDA_ly6P+o`pxUq(>A6 z{~Y9dG!)xZk>~uxwQY8K;OD@$MEgYW-R&lXt7DTmxI+ZF&)Rpkd?RIgG!dPvMWHqP zY0RE892$v7MQNqb;c@j|^Ce5;76RLS!SV}?2Ih?L&Jx2$ z%G%zJ5CVl1tcFGIbw2XT+?yHWJ;LAoD{Y|fH*K*U;wG>0Y)IKZU>j~H*n*1#rxChp z!4X@<_o*EJa7$H*Cj7@q9%1~|pa$=oAN^U!Cq4yBt!KYew`frxVBaimKC%`M&A7wW z5G3{CPx4@X6-X)W=;?^14_l@hGb*V1V7+YepnnKBx!aXntc=0k)@Gyp7YezsePEC) zDGh+;I^zWe6^FIxhLd@=?P6%>#$LLD!ap~FUy^zBIvM{FaLQgjq`U=yvvb!1?~{C} zgt{6dYr{fm8gj;@i8v!}R=tlTdmbBUf8QC4a$AVklDn-}j9rx~hpM0^YTG1ZB+W9` z7cAY(^{Od%e)x^vGc1grLee9HeCxXZ`&C%yQzyt-1g@B?rN{UN@dvSL-KrJTYAd9P zSRNS;3#lB{0rQ}n0oyU&Xx}TR_UzJ`TU>$QTFyXc8i$Ytyq+=n%&ys0tUKNx=Ejao zTr{-NWewvjY2NRW`ntmkeIu9r>%gUlL$jz|`No(B#>he}O9FU7h0>&k@ zjGWiaV zsG_yEofiZaAHnT3ga=-j?nBzCPm2{P*}i*${A^?I3-3AW<@w+60kMxV0X#3Tf1u)|7>gBse1p?b)nT`)%w2F48We4VvS%61>#xpX0 zj5pTz>a<t0#E+$DiY=V@psqbsZJ4&2dn33 z_1t*#6MT(_8QN(tPx;Z<_!zTEXfuPj)3CJe#`#jr2M4IPxn$Qq)KbxH()70I*Se?Z zy)J(@Ir}-?;llg6n#^At7SF7Cj2dh+=i-N}lH7zf7!~}B>uR*SU&gPV{E#NoO?Q z_PVI@73hwEvL@q@VHL1%tNAA$`=)@nTHPXH`})c-ItT}QpKN?7>t<8thYsSr1%1H*Lt;CrJ5l+&%yWOJgqBw4hX{J}9vASqRYHsxT*-amnO^1X=U}X< zcZJ@nrR<8G631(0ToC&6q$b{+gggcgoZ9G09CcVPaNdYapNOmwAzJbSnc2Y709Q0sj-v*nt?@9;xnj8^( zuT}loyV3x&YT7S~vZCsyvD>F`UIgVErnCs*3vU}bq8@tCLt2tlwH{WZX4MNR(HO;d zDA?+5dc#i-+w)u^#i-bIx0LM(zpX=%E8s{EO9v^D+M3z#v=9e9wg}!M3SKT7ag;!x zBZ?@BH_Z)e#5^4{A zK+~$%+P>)T6s6@s4x%LHFmF;&lYja0uvt~atCZDOq8n4<+f;NEHU!>4(#u&)JZF0o zC6_l-+-_bK^NZ)t=cd$e5FN|qZU)M_g{AF5ArQ=&5vBSe zT}oG*`3}@hYjWlF8JHohzCEHlweO+fjMI9Nh@Pi_`xfLjNt zFKeMd248i78?H&iFYSbFE{pQ#La*m8QIm|0Wq5x@oprSQvEJ3tf^KU@jS^6C+Uw`_ zS$lxWa)FcUT0iug!N<>JUYRBCcW)bBwh5vjAG;X!R~ED#8cv?`DRin*|0z-<`zbC) z(Z@aTYkFd>c){nSA8>aO^~XG4n#i_vrqP>jMc`+@Ex%B``BQy&l+FQ-68<6u2UNtM*Xn zOTiw@2XM4pY+BQXens?cBesjw=w$(Q_|xOX8BjnCx%!4FzZr1Z3Hl1XHN9FzsWE4P zB{iN6U$wm-MK!3>*So{!J!dxK96JB)a;kT~SV?HDgfCgbQ(oD>Z`kXziV~eq5Lqoy7Mexv zSvER7e;y75cHb5LSq${4A*brt>^T!CQ?6k)4P~Ldh_%j{(>#h643RAG%R&=G0zBAv zFkU2*uiCh*?1DeRDu0+gMN(|8^@unbk}QnZ(tXcO%J^f(QUzADXVErXf(JOLeLA3l zSzpi{;ryjQ(*f#LCHxw__>Jse2}AwOLy%YCu+yf&XS> ztSiasCbzFHi44Xe6=jzZsq1)z%hwi))4)Yexs_7NZXo-p>$5EU{c#3PQjk>h>}3t^ z|M+#diS!Mx43_FMo5^@Y0?&3IU@EM^PV}NQd~!k-5BsrV`5Q`rYJS?H;VC*rZH$-u z0RIZ?A=Wfbkf>F^aINCwV!>7*;hkovU3RC3vpJ;}CZ|O`cn?sYB-C#T@mZH5*axQk z4smT*`6Sl9azY7zq8LCOn7iI}4>NQOQ(1P~XR^!QU6I?Y+5vt5nG~FhkZah8vm|@I zCkOnUPwdussCI#Fu?OP0l5dzODQ;-=(sQ?XSe*}7>F@_!TtfwtZ!w9;rZT&j zdtlqeo=Ts0-KAzK!lT@1?-uL6hvdpqJxMn6dHfB+-n_h^@tNvS#@RnxWbWR0;2WvO zK6Q3YXHHs5d`Aeal4>HYNlhY$H!W1kQ*#s%+%TtjaAqKm7bvPH0Mm^1k`=l>gHgW) z>{KrTh*^Ixmb}sjS-2D8IqF?bIZtzQ>EaSfg@Ul<<~l2F=SndkUE(MHMtPJJfnt!; zqnZV4p1K=iCs4$@KDJ97ryfGJv96zmFzE0ac1^a8T^ng7O0;V6Qb5f8Ds>RH9npi7 z!TTf9!46=e@s;I=6`co;_6fkCk)h^!cQad(I3C-3w z?9sQngHY**x{SJtz3(sM`Cx+?CLLbur~RBc*gMqD7ifEE)WE-=eZ`a};9GYzj@y)n ztB+W#Nn|9joL7*J^=rPu8{7lhob2tq41R6{WE{%AK7N=)3;cRYXz5iWF@Puj&BU-P z!3vEW_CktB9%06$4O~ff;xcPQ!jt+JOJtXLoL+eH-%a0-CG4_CMEq)MLlTS-UU>BS zUmw{ZMXuXIIwz?Ex2-!yt7C5Xng5ePJ#iu7C;B7)8tX9XSR86fdiq~CUz6A1bED00 z0kU0!Xe%ywpWsTH52U}=qRIk_;4owu_uZqJhgsuX-zHWCi-7U0PpVax2Y}3)D-P+l z@=DTI<{=lCRfIBrFZ351($rzIee$-1!=r^Q!sBbv!rvaASv0CEf&4~LXi+LTddj72 z@o_d`*kO?QzR}Wcyn4Fi%ii0Q(n9C~Z8fa()eo?i1WG=%q^{6kOLa}er;4|IwSxnL z?KkYF_z2c$e2Ey*;$kUF&(TIusLUr3q|Xj3(Q5B-D!v;WIQ#x0cSkD{w*t8FWI-eY zQY4;GreMkvQd?`wT@YL;f6~s}<~`$~Tv3y_oz%0Col{lP3ckJWn>Ugir*9Xp>vO<$ zT;E$`bXdKJ_Yr#>1)$2&XQrUxu*lQ_cqFIdrk(s0Px0vo7kjIf=;Jh(-!;=t zc^6VUf_xa(SxH?d?F3Ho6mL|-9MM7!dWddToAHJO*n4i~HO@O=DrA*1kE(aC8UxP2 z9`0L+Sx@HZ=C@31b(IT|F8EkrJMa{v_MNn1?|>g;R_=BMRjZMVSuYzK)>v2=j+DjGeT+(?5n`z1>VQMw#TUA zBkW_&6+mhfW`H-Ph5lwgTyUx$Z?z$ysMB=~1)Z5E0@(d$QD{_zSVf4k_-HqmV_vBd z4n=<)z)~$rQDY*EStYc66xmg zIF?bjYjX~U$p)2Yr0=^^c6U!Eshw#6vmT|TG!aX~73Bh*3QEdfRA_8s>L2YVV$WC} zot946F&lni4!)fiUB^8gngB8`h0bhSn<-wCB6THWt^p~)wsHQQpF!{*<(ge<9|}}E zy;-V^idw|}ookcI(dd!@`n_+L*=@^vqH#uPb$WHx6T@pn-b+#745!;NOUOYuENUl1 zJrR+M2nS54I}sMkIY;0obL>WOAD*KT$7899N{`zLFZE^r|Ke z>E^nRnYS(5iS*73(L`GHj=BRtDiW* z_?fzxt4e$$;K>e{;?CdbTaJoH6|}F+;%BiA7bvRj2sF252*Fg!Zks2z7kvI07^Lfy zBl?c@W56rwGV99=yExRc#3yT4)w7if6M6C@_7JfWa=olF1NJ20-rNKG_oo`3Ss=5w zgNgtJ{#T{E1b~x+7x9aYb^u5SV!()G0W%CSi3CQ=JX^oQQ*B+#}1;O)R7y| zdI|adFZpS2lcJOb{^}%wVa99mC1_aBNE5aEtg0z44`opY#l`TKOXR%H5R_)`MYv@G zRrG5_mf8Xt@HZUHKp3zRu*ZMX3oda-O>(2ra9$P=`fP2oU{e!SfbX*w3aPn&MlP{n zt}6q@Bti?k&a&U>UG9>`0s&3iHNY-CKdp0ctyOs#HMn>uvce|O9b?fj9j~xhDKZkxsTHGCZQD&#^&$v(WLb`MxI&yUD;j$Mn1yEJ*FJpSH z9-m;jF0Dnd1G?1S!maiImZa(7Hp*p~r-U*lM{$21D4RYmpj~jZ9b};HkwQPOPZA02 z1TBrr3yg&ml3HuR`=OtE6xI>+q(s(ITk2jL*D>To)o@`6y;D9`~Pu~^QRh~@f>@u$R~ z^1{sSj-#Yi}o(pQ@&B2O1BGkEW zckHPgiys~j9D_;hx+2wiqo%ObKaUK>sn9D*6Z7FwtLph24S9y&@UZRK`tlz+`LB6f zz`te#Siej}pDZ|iv1sAYA^GR12Y2pC4{9I3HQR}43#-@$IU4+?>{6hS)bmYoKa-G^4NQEiW+^`VBfLem~y z>bCaM^9#X(J>uNHr+P`E`V->The^PH6ZK%Zev;w>O-&xI3IDS6!b1&fQYEz%S&^=a zc`_JtKzw8Db%iwFvI~EXtX6Fn?6pv+(Q}p9TMBia)}~80pK1%91RwzZrsjRHXiP(S zC~)EqMY&fk8h^440VuitJ^Ii-fE>^A|D2?S%NZuS;%7TVfi_1gsM-UE?}orHKZmyP zLq)NA<24}**xfp?Ni1NA%gbDg_9ZKK_D^Q8Q>vtD7~c6=c-zoN?CYme2-!!45&#^( ze9w2Sy&rw#ZYl5!^JZF@;G{rMYeR@d5+(MdMd`kGXgtN@kjpns(rO*S?I?U{mSr=} zA(%R54TlWKg-KRE_!(&-wxb|gmVWnr3!ZMmM?Wc`8-IBrDKukQR(t4f17Ko2!6$?Ga_ylrfPZCs9i*t z7OX&jNtU>~8`Zua5#qs2PG<{bf*=kY;udwJB-LuCr#tj#p_?NXv#U1=)EI%j^)6Jq zOQn{QsUNR5>K$#`mhVd2ox5P18}UdJ)Ls$uF{!@a^Wz*F8`uSDv*5Zg9y*~UY%IY? zOf_9MvnBikit8G`u;MDzF^>bgdPXCq{YBMUVmjmp2e&@lxiLB1=r3aPH zA1dwMrG2$;?e`Qyd{Y^;QJ#Mdjv762H&QFi_m4-`3eI`6AJOTTkYKH$-tEEidDoz{ zL#XH_*|1);(+p48!4}chKGv^KE@ML**P?LcNZN5U-i>P|s(T9u)OG%`W<2%{%8{t+ zhYR<5{D%a;DvXspJp5OT_#f_jfP5|8qGp$`@|`x$vK7;}#7?RSyLPXQ$u2gIoORNm zkjs~(*MGWERL&x=aLLB6R^JqiKNnuEk;1T(1kYNAjrcJ)`8>+uN4MSua);=SS=s`7 zMKHgjYCrIfHq@}qoZK3D)#V%~NB{lwc~*&ax29KlK8JVm2rC6&S4H?m`Xr1DFLom! z*Z-Ep-^WCT@2bDtMxKtUR<7l}m37XMXRSIAj%yuNrQK{IjVFB?5%7sm`RpfXLbz62 z>8}Kbtplyo30{kqA8EUtJhq!HUfK z!r#DbwuSz&JZe7U0{^nm)oVemDe=47;M32r4{6)Z#l3(%7wEH$$3uLec0I6LLKDG1 z*igL2N$L`(ufly%`m1b_x0-pQyz4E=-OE9=MQi4JC!Pt7_%tdr5|HV#92S(Eqj8%b zMLoKtHyDB@%?|IT{jnL%Ztze4DxJaK;Bnm!em1Ovhq<$84VWmhai!x3={-JV)Vk>sqYwO$I>4#g}K@%;s(l1by zCYwBn$4MHrJYuP?!U|rkjdmYNf5J6hjPn1lTj!QN0sMnV&z;*>rBt&Q`(|kGV4iyP z4v!PpbBVUVNgARP{Sfn9*JPfRU=f(Mzb^V4+am3Et^Aq}?;!oRIU=o2X((r@8pij2 zH#V-R>U-fBVv6I2W`vB&oyA594y8d?ZE`fSyIP?OtqvpIm?Pk9s^^PF9!N&3MDJ5(uYdMIJqcuBW%w`TjYrRK-oZ=K?48;kJ6*d`;I0A1I3Y9J56ypoW3hE^F`p zLE}tcYz#<(=ChvA_gi#cgw&vl-&x()!hqzqIga&GC0^vZ#Xa?p->73{K#?A?) zVYQ#7tLw4H5u0bsh_Gat*6vVQwpvaaG!CkXPaZtv6JyTp7IpggF_k+cSx6B6R{cM3 zGL?=7%C0oTe1^7gc?&+H{Yog0cfalC^t<=4?{r>oU=)8Qbg7Bj3d-oR$uimlzifLy zK?pF}()3=O6I@jqz(B2raD#(;qve$k&B{}yS z;_amXqyuNz>QvXWd{QJ+G2piK37AZqT*>?yC8(EE& z2TXI?ZJ{%|S&|#hgMfX9#>x)LSlU7b=YPuo5=Ign@r_uyqu7I5LyVVX!m!+gHk>Wc z`Z=XPvF_9%io(Z%Ip4+>V6gnPF(y+#ce>m0ZXJHIlVJt+)AE?df#ut+!GuskI03*Q zYVfXaJ9i|N!Yn*@wLoVfl>-n`I_i6f`3`txmDd)5)x%PY*#^p|K@ASl1+m(Lb0p6l zYNXp}EB_9}uqs?{7;4ZEZRms$g5V$C9>&j=Tb`nL0YcNGRAJqe8pJ2gGe~$DR zNizGt&wxJZ792}xJ@T1s(=N9Ay&uRiM8tXWjxZjRmmn9hkOInk%Lqd*xdf226nKJcVI}=?*-HoQa~^p)ovFosGSv^zKMKES zEY{%3!Q;)?qwI=d{Ph)lEW|+`+ck{_4c13tsCgG&qvT=N>KDT zNkoqpY%Wi89LcLXuy-a1rqNv(09N#-oqI=6JNfXakSb_kX34Ft&z+$>|UEJ z%3b!VmD`G25p@@%a2NOBA2kN|AtFFnMSEPb<$DW6lTQ(yq(Yk*WaO((B9c9={7qzh zlHGA}(K-lLX5Ch&+m6Ww3OcZRSR)}{w}j?-e*b85X8i0nfjOd;aU`@E;^5cY0C!MR zc#Vr%N#sbcU%!K;4eo#4bPjW=6m^E3IaGB6*@xQ?TD+*UIn~B(@c!*`&oHmn``75f zc=a3nbK(2Zut1Bt8x9)6^S}nI>X_adR%IIU0cG{if_-V_z3IoV0P|&pC(PLG{tGOE zZjU&AGN}GPl=Tqh?(jcB2ha6mX(gA3{bZU1Rs!3GeuHnjD3^j@ENFu_*OlmC887I6 zdrF1c2C4N6O0?IXnR*QUw|(nBi{}GacdnN1LKqFB$bOf$rK1mX#yzMmI9?E{cyHOT zx_$xQWMH5gu&t<8VL-++Fb{o>$^)eXcIr03ZHcWBu~j%8JDTl1%P>8Ku)Q@WJq2;2 zy{gMWj#btpfX~nGMV4WIi9TmgVS$ZxX>J0mvuexj)6z7KkqyOQ45z%e{Ow~;etLB# z^Qe1OuJ|W8CU~^N%U=q%)IMoSd*vthw%;J7wZYPk*Sh-GU5i8t5?H-~@Aj7YifCy& z8ZvI`_>Cnos5$~j2aJtktl|Y&d5*pvv|jL`Mq+K#|y`?d3+ z>d12;U&>3`)jp7!L3fKovI_ElUJ8M~$C@Oaf94fzz@7}57oR+8t#|x)%t}TA0)99g zDw?lHM0cFsBM?~qgao5iDyUw$1@ErrV}24+X6XG@T;&mRPw-duG^hX-P&(jgkkz{1 z(Gm9LUZH0}T*Z}+mi>OS?Z3S$X}>!$$|})p)QwO= zF9SYM<8=pl8vBi`5B&d5pyKb4|GS+)pUovUmJ>z!jb?4~2O@yJg7hR(4Q*x@oA`ca ziNm`AgL81q51bU*@;7XG-e42JQ&uL3nwV_N=Q*^d!modbO`+|pG9m>?uH1q1%4pnWvBcN`B&i| z=FqwdpH~MN+o?|(qHC9J{)u=H;rwtb8HPrsajA!^aaJtIOjwO1x!X3!Sz*&eCSU(W zQaiOgiLJW&-O+SP-WWe!x@v)dHLpCa6zuHX3hsf$oL&bEn{pn&U*>xyC$+Q{IC#I} z5#_>~LUyK~6?Jawl{P3(nY`CKs?if=>YwY-yHcrbE~&K4F@~98$TtuN4es4ua*w9Y zBt|*6lF&Iy{v#D1FMG+hA)K1Mk;us9dhIA zfbmlNz$<$KTva^wWrQ$RvCP8K<-4pLgd#PMxH0*0LTK}ic8RymgN{Y=ou*c#=r{iB zxIhH6XNwtl$Wzel(=?*~w^3V80oE{+*ArdP-lU0{;Kh?^VR+LV@Cst|-6L!MxQv)# ziNCRWe>;nfn+cs;jep?{vs{U+CCza(x5>ZD4$VF83ILOc26ie}Yuj50-zZ2F|Im%mu&5A-`LUY6Yr#dv&G?qVzntQ z{z3C$vaYf2v-R_3ho^xjwMo;Zpxg*cqQ{t)$^Ui<6}d!pnaGTKsTBGGAX+8>SH_3^ ztw-gz?_zLZV~K4Wa`jcJz&H!r^=NE0+$gbPiX{)fJ-{~m32Uppntk=a3^c5UWHrPU8eU6=qK3lUqi^cdeAeQ?khP=Tixiv3Eg z0zUEsKVtXJf$tyjyQp$V4UJ7Ekl2@5%7)DoJwjwK<-A&N92o0>NAM03VdMvsxsY3i z6)wNUfqA)mi&OFPK+b`WZ2E0^cdF zd@;CUyDuV!PAU;(v1uIAcd%xZ+_zCnNn*sRDQ0kyBY25Xr#I4C{sbG5CGiFjn=|mA zq@@52?+q=MX+TbWBzV21ajL}!p94n7C1avWKwaZ!&%{z-5%L+>CUOybOVX{WkAALQ zym3F6Llx%vi6LGpOY$70A=5uA3j5a0{@cw#41@$o>+E8L$Y7bf(N@R1b+ zpt-CAh6kpwc49JVrfyVhGkdvrbpJlE=0NU*WSFBm`+2Ed=^fXy1K$UyOk$$>gG#TRLuCJzkpKs9}EN)xe)}az{YXwJnR+MEvfQ*b{zPe;T*Po zq#Uid6?_Uf3NlcTlr*m_#;2q zbmI{AOg&t#VqgCHB!(adD(>pS2Vqzzi{X5Bo30|omN@;GO-jyIi)-CJ$UJm_&n*`p z(uUS%3|0b%C}SwoIsGDe5K�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 z%0D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 RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/examples/SpritesheetExample/Program.cs b/examples/SpritesheetExample/Program.cs new file mode 100644 index 00000000..797b0e87 --- /dev/null +++ b/examples/SpritesheetExample/Program.cs @@ -0,0 +1,3 @@ + +using var game = new SpritesheetExample.Game1(); +game.Run(); diff --git a/examples/SpritesheetExample/SpritesheetExample.csproj b/examples/SpritesheetExample/SpritesheetExample.csproj new file mode 100644 index 00000000..40822a25 --- /dev/null +++ b/examples/SpritesheetExample/SpritesheetExample.csproj @@ -0,0 +1,34 @@ + + + WinExe + net6.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/examples/SpritesheetExample/app.manifest b/examples/SpritesheetExample/app.manifest new file mode 100644 index 00000000..529de5b1 --- /dev/null +++ b/examples/SpritesheetExample/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + diff --git a/examples/SpritesheetExample/character_robot.aseprite b/examples/SpritesheetExample/character_robot.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..f235a0fef12b25d83f31e6c5f0baa430b795c284 GIT binary patch literal 156758 zcmdSAS6EY9`0g8IX>_5)4i<>$QtS~?ks1^g6)A!OA`%4=6%c76B?Lr7ML|VDYEV=} zgosElp@X!5AfbmIdVl~)NSWu0p67q|zS(!@VrM z?oUOba%$V5twr!0MWIsjt63S6>nQeMWHm$ zTf-=n5*oBkpL_!~f1C<^epECOP^h#L8tKmok%X;`ufwx=vl}>A6CW}Qg-Xt=g!YFY zMfq@!jI9|k%7xolnE8WGP(NmRlOSHzUrsRpM#fJV@kK7wKWCSb;8}Bfs(6NRcu?PX zXs4GqL0i-0I!U~G6fBHh@eB0wi(IH*eq9LlW9D|y{#rrD!14MgLdC!}0@{Bc58d4m zI9@9c(75C~pv_$kpcZFr#O(ql(887x(BYD`pvY(hXnDFaXlDTy)Ism2xIX_|tTR-x zHtzxrrTi4PTk)X2@4`SiTrOzsrH7yoK9zzR8{Gm;C~gDgRxbzrk#Y)@Vom~$HT430 z7A@X?kcoJnKM7AjZ(O(wYWF$|^nQFH=;yCippDt$ag%@cf<|SFkD|6~6!dOFE$D-9 z&7k8m9MEHz96(RseF19x;4^5;;1uY2QXJ^}@8Y8nTn`65?(iH`-#-b|^jRk8;AQa~ zX0E;j)i{3*G^ef;)cC1*J{Mnzw>@ZN2U_xb5LCm&Lahg-HVuHDz84L8#LO8~ z*H?Vhl#)hJljq`D9kK8LJ?12y?HQjB;)op+#bSAwDkSSK{+^%3Hk7d;iQ0cUrtkC+^3C>bS>%BDE;clb-KE59(h7HF_>y zt9>WMXU+Jfcpa4V2%x9D#p|qePTU89hq%A^sHuNeK-cFJw3Q8PKuyBRk$-_Y|NMF1 z0ye{&0K5YL{(=1fexN=eA9xS22hs!Pf$;!%pgW))xDHT>$-rZPF_0KA3=9SU1API#z+HeY5EpO@tOd{l zWdX6kSAZ*!6|f3S1)u^=0j0oEKok%Z@Cob$Z~`>}nZQecC6E#@35*0l0v!R3z(s%} z5D{<)ECdh&1p$G;KY$;Q53mP21mFSf0Cm7QfE*AG@Fr&4XarCVkS69Czzj&%yi3fm zRy@!P&;{HAXaTVRSHLO&6;KKg1$+WH0hs_xz$5??&!Em#)(3T6eTf=$7rU{G);SQC5+rUXZV9l?uWL~tQk5c~(`1LuM5 zz;j?Ya2r@n?6Vt@;4rWkcngdLt^!MepTJDuB(M>92n+=70qcl;Q!921*af@-Mgf>hbotYeM7g-% zS%O;ezgPc3d0ca_mxkh&E&uPHkpI(Pa?tai|80D*C=7M(ny0PH@x9R80)N8;`JZ_e z!H3TKF%z-3zFoQarZQ=ia%C_=RBsow)tiE+JrQx^nZ`(_6_Tzu}4u9!jX0fg?Q_@-8 z%yCziCa06ryy+K3%BQwi*-vE9wfdF@6kk0cyL`$2<^MZCpX!XJYAyVvOYil) z&LH`Go?uxYc(yu}<;|>0oR>3KVb}97bMlG9a}m-a`a3h<>0^m!?@z{Mb(6dKlj!J% z=b4n!tEbCN_|p3WSU9=2gA01-U_m&;bM3Ty5wdB)Z~r?JM?ykzyo6%f?-I|tTXoaB zBOCEp?iB{VYFqAA_JenhJ?S=MgjUk$(6K0L$wcnzUsC(HXFj1HIZJlq(>Sp;X`Cpg z@>5R0l;%n7jP6{{u!OT)2dDf1B0#Zk4 z@hoRXRUta8R`KAo)ve8$j=o9K|NMh|o#5Yii}m9##*vWk_)t#So4VS>5)|X$nh@QU#CDNA@uUMcy?k z_|{db>_gTTID zbm;ROSLC(RR&^->^(KFEK1buBbWi0ILq$wthjL<(s-p1Pp`_@+Q)o{-g8GV-Q^e>cujD0EZ6%} zulBzjbRX%4M<6S}kN!@%^e$;^c5E_l%>I?9!E8|-`jUV#e_yr&J;7hgqbgUC1dr76 z1307wHW}R~+&R}X?le(NdFSnzPPb_GM|azMpIhEvIvRa%-x`Ku`Mlzw-$8GTAv%Mz z%j?Cc%qo_aV1cwg^%xr&u+O6x477W@$`$SSp}GIjG>UBIK#JJp+(C{)iibialUyYj zZPbtl(w6LmMaU(#y|?A^{^DQHJ+RU|ErrQ`oeOOiM^*Rtn0*}8-i6poS55k}{r4_0 zUs=Q{=HP~iC7p)T#EPH9=W7Y4UGOJGtmQLgpPL;vHaF#!7>X4L3(syTbH*OPTo^&+ zUOs{zKKfQQZ6ZzSP^d3Mv0nH+AJe(%Vu+p5$~6(w*sc|9(mm;wB4x$YT=(_`y;_^o z-H8qKnkIw7yZtt?+f_88q{ei^hB(~MGXZZ)tA|j*{!GOlWHg25 zaiYHMNdNWQ9W@5wByT4>-ULNWl^;TXHTYD{>1dmv^_U`8w)N6J)Ywbzm$*+IdBx{2PS|(rtz@ z7pG;^(SJjBMSVx1UDy!v{W9V0Z+`_Y{>*!(0?Dd+dp~u4OfSj5(;V-om%$j^d@SKS&dD-kC1QiF$^pBsa6N$q3Uf;tL|2 z2~z^rh+peJPhPrpK8*3;2gA-PuL|HpMJ;YX^qBhi07*?`$N4@neW*Erg=|8axS=U4 zNlQiBn2z4{xBG`=j|*^Rg%yZE>#kv$)=g2cbZhQZr=)#k3DP<5orCQsZA3cc^>l~_ z?9wOoH0*N7#axzv9F0vsoTj?84k>iU^^*=F`#8!f*94SG5?=I15IX2Pw8KTj5S?vg zDNWL5@UM_#J=7Ya#iX6V1LuVLB`}ICQtIkQBmImlCe;XQ^$*;cBK@9EmA*N-2?-W( zY*4*gzvho_T%wCbp7S%fhASL9Y;MYKUM$+g*~7zmE^=8?W)RMg?3m&)jxcuUyDk6f zzJ*DJaSuI29N7-9K87OA{x{}JrWr1H*MH0M$5=iSE`k zT+1P=O57&a=kRy+a$Q0}&&On|azcMJm z`})WV3B~py=23TTE=}uOW+i?(fb)IN?%BpY46RS1-@N z)IgT``i{F8+x@n8wufrVH`lMcgS|qcRtg=J8*}A-A2DqEpAo{UNp!U4l>9rU=G^eE z*!oSnub(nhE|7)pQ&~pF6(hxnhk$hpn5np_oBLq8mFLt~r6*cqXnK))KAKzhe@nNn zz_ihpGLsCa?H7_RQP$)c96~(nQ34Mo{pa>ys;AFt?A_|6eW$8rNrjXby<(o-H}n8gBQm2}Oqt=l(@XPM;&*E%l5s!m+<} zeheYh{5PZz*;?35v=H{3_0+HJ-ccvx|Ef=roz6lo9R{*rea#S4?s3 zD<6{@CAc*1W9cdO69V7&0(w2k)|>fOneL&LA*hL6gUd@fKY5`%w$*jEhf3fj$5SL( zHb?g`C>T*YiYF8Lw46=Q^ZM=+3O%#}QnB8fIhp#P`FZG^W!TJ1*-$@YQewI2T&yl(S z*IOAvx+|))ibp=9g`RcOW)lWlFB05+HfKpM-<_0k+kJ3=LZVHJ!t|(bJAw{Qx{{_< zd-04XN(V$L7#FD$q+xSWc9~!c7yC=1LZH0qh{{2k)A|+P@(nKqY&wx`*NU3-ze^ZD zzJU{nxG*+IRs^IeiBy6gUjjMt$GUPc*; zCw+XfQk#o7SLOW~N-*8^S6u9OaaPq4>qtJ$nW_gF$3p7p5(V;G=1sYwOF2Zj2928* z=pXwZ&O0BDZ5j}UYI435+P8EvMK5qW`?Zjo9CDrH@Q*3RXipTHA7XA#_f#p6-|N0g z<0;X)Guda$gjC({f=MOkLf>5+J07{?`Ci|d9Fo9{8o@AW8}k`jfl(EOk?%xrl3H9= zQYbwfwdKmD-S;TfNaIW!o7$#k7oEvh=%6uNCOHn&A+1cS4q^nlj!X4n2MqB;Hw>eW z=#KUs=Px?Z<0>cGHn6y3X!3qGzJ@fUHNhEnefc|Ylf1grV}k;0Wr zr+4&^x>BDaOXpVa(qOZn><_6L-=AiEIj!uKJ!@Y<=1QdTT2{nxyBtx~*MaK9k>jY~ zr{d-w+{8|PrC2$w?ZUh)XrE#?>5Vy4>o@!Pz9|T;NeVqL^Okg7UnLSrq_~dt=BB0> zk=C(B-+Gh}@l%F8AM|*YcBR?v@qIa)T&&28PQtCL&^z&?e*XOJF$og{ySYXHT$l&Cq(cYt3UTT8G^xovMgf zF3ny1Nn$DUiR+cGdGG<uUHUPzT9JI&`8+ed2F=uZ6@`Af z%xCM8Wh0Byc%Qk1aMsuF$alr#^FPuHPm>K7)MQzTm}ftq*zYe;FZ1ZlpOUBA$%;aM zo$5Db(a#@zOx!_0E(vY+w!G76@0A49tzUKr%- z5#yh+bz{Bm)RQJRC^a3eT-#mBlbOek7I~BThU5Ieuu6jFi<;RzP9AZs{CN?4)wDcP z&uZThW5`J7L~$v7FuL$W&bKKm zR{~qUa9e1-z?+<{s?hY#*@uzYW8LwL-<}u|W3ZueLldta$)zXoFr0Fv*JE;GSu##e z3L$rMCJWk!;DcwjXet;_8!Tq}M%ARs_}=68GD!!Wh+8ZE$)n^DGCu9G(b$V9e*C03 z%>QqQcwA69Un)Gp4JBjyeV-v(EEeeoVgF1P@3UmE8R5rQGJm>YZ^96%+Vhy>na`q~ zC(BqeBE4~SY0;mrvVnZtd4dnok$;%O;%5~E>L#M|2$~uUABCCdK9=&SuKbhknzYYc zR*T;bzcGa~b>8b)H4BS4di)qGykSHIf?&iBak2At~TElBzYfc#>vs&}*ZEss#w|I%lyWrNBB$X&Fygc%U$seB2)? z5WTS#$jHe)M0kQ;ERflwn?3}+% zA=!hQy4Bv-2w$?XRMJop>w$poRb+wkY;4#_hwBtyU326Q%N#9u8{~|8k#D$@neeeA z&%us7AlTJQZIQ^v^^KuA*Ai~Y%B|FF2vwS9G$H3w!Yn)n^2WxFg{ax;`}4IBLvv3h zyGw^kNSFGLpTPJKdsHvlIhMM+p~yG2+I?1VacPwLu0RK5yiF$E?&^Rr<{|R3Ti#3h z@icXEv(ZP%i}{oql29`Pw}W2FuHoV`u}Dzv?#Y7nL)Nnaxyi>WR^MUW=b6RsxtG7{ zbzP|3_=lFm@sjL)v^9%zus+Da4qB_ykWj$!;>|5=RTD+jN)%!SXcF%3@u~9vAPnS0;SD1@|~u)!X;GmgK1p#1j1)bEs-_JaG#F9b=e2 znjC9WpIbF}D>fz2HBvD5GdX4oFUYv=O(qWQ5t8Pw$LS{rr?4g$#cl!c*Cv_2}ws8qv+=lt$&y*di}K>2If4 zp}Tya4f#%TUQZL|Si^I3t#~qL%Syu>?%Cfn{ES$oJY1)4k3s!}JS{{1G~O*%@=NvN zKyGM}dNw;PtbW92wrrijsdtk3ErTO#9DE~b{jLQ0E8WWd)K;m~H~ig7-#TlIC{-`y zACm`$9{i5j{7L4;da6v&P%duL;Tp^5S|obNMkAi{?cr@6pBT5|SU1xqeEPi4#xz!r z{O37bfpqvQshK&{{t}sN+*Y-ovEnVc@$N-T@7kfD`z%+2fMkWUml)PokX|phbG9~Q zq-5cN^vX>K%$P#|J8iLStw_G6NRM?eQgSMweQ0c_e<(X=aFaC8d#(FE(y%X6E3~hG zo3gZjw~!{4+cTp56uUMGeO-8=&pbu)qLHT4NiRGSDs@ zb-ui@PG6rFjWck*vUb+vSdSAnEBS*R|0Mbc_7Gt~FR#H4vNzRWnbt0Rk7rFl?@$twbge2c<^^}C2nX_^ATT1Vzqi%^x=L8xk zLoVT(Mzc@xX6au|)q?ij zdq$rd(H{1>DksCwaJD*E`*t)c(#Qb+K`J8F*V)c%?o)kuI<;GMsQLGK;pf#u87o=k zp&a2xIZBzE0zs&Hgb4CvlF`jb=58kkO7hfi+c2s6$lAX#*D_+KTSFhu{?{hKWFOOhbdBS15| zVrn+o-*H>m60=@zndU;t;ZhYcr-VrAs;4g_BN{H``%WZH)D>1Vo;cFAY3Q=1)8o6i zj}b4x*rM>=?W( zDyga2!^$`C!85{dUh|!2N z51;Fu-D7sE&VaT=)P*jnkc0lRV4qC9Fq5m!N(x9#r|V6va1FEStUE( zJ=V{Y{ngCq{|I<3U(O zn$6N_{0)v!`KWEIRmYx+bJ;SZX7^g$Ip=CN_l%*u2Km}0q*XrT>|Ac0*z!nJtm$1{YMlgVn;MZ%s*ji|1`Gd%D zAdpWp_SEsQnmm_YXQl}bo7%2-MEaa#zWwwqGY9rUgxi?zapy#mbaeB?sONg`@@(Rr z+XdroV*&FX0Rmj43KP!<3UA@-N@uU#Zi-8v7(|wWxB`hSq+c-gOW?Y=0dm0=VbKVd1OCVM$y*m z#nxfto0=J03W&SQJ;w@5;;>yF$GJ31^CMaVb#Sq2j|E!LzPyf?aN_&4v%Q;@;ReFM za?jC#2e~hnd21bEP_v3`2*-UmIrv@t2RWRYBNJ}@MVbx7EZ33W?`q_=5d%JKHYQgsqd7PufG20mS_1N>o3(+ zjH~nec5-P2cA}JxijxU(=o6TbnH+;>K4-XNBQ}5cz_M$}pN5*~&4OY@-Zonqp8t$lEZO(Y^Oz038aAr-gl1p{^HitU5*T^@P9>lhqsgy z9o~>R%l%s^cjR~e7LBRKhZK1TAAgulcNG@w=Hk@+3Ra2e8qkD+ia7ely}dJ2aa8*bM_Cy8!9rz=FSXS-E&U39XQQabsvvG+RUTo8 zbMu9|d>Q)eAl}}Ki*t9^mU2Bk%3Kvt!K0>!BCq%qsnLv{?C?peg5Zr;^sG~=M~*qk zFCFn0JlDN%NJ!a1ZQ7zuBX&@P%cqsBGh*LM!mj~saT_~jZen-7LEP(||GOvm2q|k! zA_r3Bg5`wm$7J|kIY`c;mh7qi#=sX-)HCMv=l-3+cNx=+noDr?s5MuT{l z=l907bmDf}F7NT{u_%9bE8mFZuf_;+Z%|W0X<6)642qR}Of+K|EWx+U|wo{(j$^(l2E1 zr!E|GUB&HCMJUpIt+aM*ua?aaU2}!xgyi8>l3Tdb`U@iNb=yv+l^!wuvf)pk?PikA zO%m$V0?(qhBz=!TxYlJF-)+vOMr3XAl^x`4H4DOgaF2hAxYO3}j+U&NE^_~egjMjc zU6HRY#q@7H4GN%ym|ix$SF|zJ(!8>mj{k9e;sL$GETQ|L^d-(`|7F zuAt9*NEbyM!<-n+zxR5p+LptQhS1N^WfskiNS2Ydb zju@egT#u)t^Zm5~kGbPrsb$48#ckv`BDdlOGhaO|^lIp^>J z^VARP@4QeR+HuUXpe)C1&}*NXw*J{Q9FKRUgT&VptVvea$h=Y$Be{XIzlHD7aW3&^ z9MyPD)Rz+|lfQbiB^?tXzG(==7Bh^U8V5<6UM|DRqPHy=NW`;W?Z0 zaK!Nsl?gP@u5HF%qW6+aq8;nqj`>L=#&)};+_@nuV)B0uouleU3>BiDK7c#m6wf1(4z8vF`OE|4@;jR5UXZ@JD zBK+;pSnjcamPZ>)US#0BOdGOJvsLL5<(_rKMwu@Ds$R>YlD4YI{mU=2&I;AMr->rW zZ6w)ie*OH>e-=(ZoL7D1{w@kB%PTwLGKA~99kUiWiIz?NHSb(`wk*K=67?(%|Ty`e=EG5^J&*DFw->y2GCzp})>CGDfr>2aU? zGY$iBLe~c4`HD@W0j~cVbFuwCpD_a*vS)G;>81Em&D0jPBGIRn$XGivykYUG?#hMj zHL4ROj#;`#(i^{OuGC%3Mi=$;QQA4}SlAQ^BQ7kk)aC_>SpZyY!LE;a~dS`BqtA{`K@P z+6=Jx*|bWsmdRdMx$Nlunr(OnF3lb;NIG}R)FE%>#TUY^wJ8q%CC~4U% zwuX;fL#`k8wHi9R0A=Pd#z_ynygh$rEPOUH(1LE0PZ{<9I=3YddBZsD9XA>Lksn+) zL(RvBzuP$QU%4W)lb+kj;Y)~rVTjQEh_T8-MmmmZHc%6XPX6?K9J<4^eNooxql2!5 z4kDRT=v(Q9wU=vPYac`Zz`QOZ!Dnph=)PTotj!H~izcl}MwfS0bz0cAJT-t^~$!UBa zho4Cme>d0SH0nQW)onr92ynq9*A5C7tA;J&;*aLqInVNk3Z)N(A548OdAEz>*`u}k z3+YkE!nh<+6eQ5xjv1K$d?m}~rihy5p_~*OK2$mVG<;$pRCDdF6bCEuV)?7An?H(K2VZ2O{6`3}TRkHDh-NE_dI1 z-u~lcCt}xRyAx3@0)F>zqrwdU8|n+Ksq1rg_x>2abalmX@+~IIBrM%FnQN%!Fk5Rb z>*v%idMZEciDJaE_axc1*zDb!?_p>1=4*Ko(yF=zF3b!4k_4eVQ50f9IhjTDuPHmc zls;xX4fj`Us}CK~)C`}?Ils%kxr>NXPY^_;7w<*zn;*hw`&Z2C=F!GVyS(?y+V4y9 zF6i`}muC^>KKJ2mQoPp`cdRAn?q(%8YVkR}hlTeBHU{NX2AdLG%*oM_#_0A5{z@h_ z6ET%kJL)3}a=UtgTrTg|zzcV&-$TCgd(Ceqp0_HCQ&`54iPO7-W^|W-YqReSn{9gK zDtGFq;=(>Yb4OycVzCpIYWxgISV)yxHK3KD-=elffIUgJ^2(Fq=-Bl=mcEc8(LeSt z((Bj!@fKc<)>yVM=ACn5<~lo(NJ^v$`b1OSO#O$$YjkAqst*L+ zlqRe%eCaL$tD-PrB0a0YuV9Y2ItA@%b@1Ai-An2ZwAfiL*y$`oOh&Oi_?*{Y?yr{f z+hZ$mQj6G`Ngd`#u*umfZt~}P)sx#*YJ|%%`%KA!Me1t)AyK8sY({9aJ`fz}&PMxd8pyeT=^hWma zQOlA-TrYJ@N_JQ;g>E!=DcDz}dwZ8H_6?hOYAt_(&+hWPDY`VZPN*>3eQro8wWfUJ zaDDla=79MocDm&@rYoj|G=W~m8Jqp5BynY4J1N8~i;<$m(IaQ98=z)I_^eICWiptB zF_Nu`lIJytWkfio6*;@KB| zqSpJL>Ob>a@49#=g!;}vc8u^}#8qx*W59P`i(g?6?CnJAzI7kNIZi0<*7uSZneG@b z15HYDv|)J*kGHlrJ4R-0bwXu5eNK4m_R~ktiLnfPMz=G8jHI}4If;3o*1)Gukv(51 z`v&m}A02pn^5>KA*j~-$2--h&TNTgfyq>97MK0a&-r6)ut8YCo+?BPe(ci)=p1GJ( zxk{~vi!ZwL{n4R#NsK1Hz2&X+vuH$ZzK*Z;dWyi*s_}_GKetAvgXKz%mt5v$^hN5n zbP?td_OoXXCMW-SS*gwf63|z6IHLPX)h^T7yk9xwx0nw!hmA+(e`g}YCZ_IM_kOA7 zydF6Y*DrJ9Y3nMbdoWR$L-IY8uw;MsR{dE{sKjL^g&#hrzC1R4lH8{9MY$z|L8?tk zR@a@ok2J0^J2AI~?(ZjG=5~yKc1UvH-eI+aUBRl=$W`Ix7^JkUa6c}3n$UqHtYy{A z##gJ1HU-8>XZz+t*QK++8_)}KEfJGr|3!SiKX)>q19>AuDMenYqU5g1uhcvpi7}ql z9@DudeE@sYN{6F9Yk%wb-1S|Z5mBm7wznmmB$gX7l$)AphK|{nXOKeqvY~+8jGg}t zqsadC`_!1n)zLTP1E%+laR?drEZjqaYbCg=6UTAOyPAtQ#Azqi3 zy*GLA-2Q)=T}iHr#`I_ZQqlEFtL3U(pRO3V@EGUjc;famqfb)9C|0RAtSa6g_l}3J z@;X1hS0=?UHxngS6yY@LRc-xG3R>aH)ZA9GWGy->qUg?3*0zk-X)#wFr@M71DXTFm zk!HmzF81vkoRX~{9=y_%a}fO&a|r1<+DCuAxJ5s~Yt@T}v4xqZZFcfmKBbrYKP&Ax z)stR5^iQLIXw2PvaElk2r_Gk>Q`Xz(yi-xOCd}+fe&*h+$CQJq_WD1`Po*ErPkF@I zc*gUVO=B#t_!CT2zdqJle1d8EjnFHR`(dvFu2WQ)oWF&^% z;C@036)QoC7}9lZ=j-Mc8dbfUUq=3bj%%b z;uu&Z3vTwmU<>unxg}81bB};M5W-8zus5??pqInTq0hx2aZJnDH{J=3=;?Q;ri<|llA;Mu|LlB3xsG%@!hB)r^DWjD3Cm2Q&hjy%Ct1EBBp)!k?`3!ML>?-Ja zzYkD>ZJnThRz)VXFI>lo=ig3%S!GwoqEKIQtKiwhyq{R{SbeNNM@kaUHXPb&Mg&k} z|IgyR5#QtfJZlKSj0c~|;s{W8DCqBQ*!J?v0vfD_CmFVdNCXRF9;WtC&#&+P1hWdw zae~;@uWlTya7_oaVKrb6+U7T*C!8;uc&)C7{#gy!gH>cXsQII0Llml@kx>Xr>+V9K zu11vMVgCW2p}&TS4fHYg`v_ZUp1)3oJzTs2b&Ka2I27vA%RHzYJ7G;-Ic=YK#99Q6qr*e}Z;Kl{ijzAvhBh+EDrXAYODwP^d|3am>c=jSHwllsGnH z>@SWLIbRT0&YiynYV#@!6d5Fe{*9B>{RwMPECZm@SF{1tDa0T2S(G@`^fz2|H%c5s zLK;?s4%&!EN&9jNw2aOKt-TrydiQ-bDAK9{+B?by{Z!fx8gYpTYGrZ~BQvO=bgBu0~aY27GG*o#k*rPdkgp(l8MRkOIGmpUrPzfF3b-1^qoR1*&uB z1*pDvJgBz0J*eh+aV$sMUL3(Pe3%M)=$trEbky=bsOCj+uuawE2Iz$#aV)C%PhbpQ z=g>Z4>IC{X)|Hqejz}H)6Lw0<6Ca&Puz2;%Ld5|jExRC4gGb*%mCjrSRWTrdCKuF# zrWDb{l|M19_vuB@Hh&}Dzp|lt+`qx6zcH<&7H&|{xGrA*Pg&wVN`GQwXFZ~z{WtEV zMi8%|(Vqa7=}RiK51bW;tWLQ_g8mJ3>D(2s?cZ?P-^kOqKM}IO!Kd8%Zg@7WtQqug z!0d16>-?V>o{oDg)K!eGgJ#!uf}SCM0;M(&fc_1A{SAg)3=@Z}{>ID<{1Tz9?Ia%e zZy4;HuXroHz;sZJ+s{D_gT=2LrE^!sswdVT6)m8DBVl__m_hq*0PJkQH)x;z6G;1i zLtk#<$kv`eQLewCufO3j!#|NN{m0^S@i$2JHy(B_C<7|TT*M)Y>DM7)N7!(e}7V+a2Pz5WKq{>I55@&bMSM#BCE(*B0i{?{;=IBfR+MZbXe z0DB-kU>+C`zyP`f+JWl;bs#$699Vwx)*^2Veu30l)xS04jhJ00|%j-~reGYYtQZBmfTp20#M905AXm z0PY9tgYUug;CQe*cpZ!mE(eQ)zroz#Y_K(W8Vn6?1}lS)!NlNTurGKQj0>&>%Yt9Q ztl(6zDR>kN3ho4Jf-k|8;7G6|coB>UE(8mL|G<3UJg^;j4h#ow1FM10z+~Vsuorj> zj0LU|XT98Fz)avIun~9&3ws^-G~gJp3wQ;L0xl6-q*k1%1ZRLPz!P8yaD&(i z5YqgU`+}GM{~G-&+Vg)(SMk#2emhqRu^)C*2NjVR{W86_O9z4%w{B6mBz1bJg2F$o z|7^Op$)RtH>891!FNbeFcJADXrQ!el6TJOZ!~T`0d#ZdZj-=J3ecXHR<8J)G$5$7& z;|FhOF%4*As+^ceWshin_n6Z~I`LN?YrisMvZ*UEkCxYM`+se+D(pGYNyIffnDgyy zh_Gke(~)ElaLs75Cv!XxBkICCsLd3l=Y<%=3VF#a!S|*U+~@=+vU-L6TLak}l0AZH ztf0Rjilyj#VdyZD8rH)QO_38r&&75vjA9VmTOEw1s|`g?#isoH!D()&Z|{d)2yYY5 zn-J81n_W({=jUx2!hI{hd;Wg1s(L9>Tt;#fE_~my((DIu-*PsZ+u!Q#$fyxupFixT zjU4}kE?eeEkSXm%`vy(jvCPNR;M7D+ZN+`2N1iR>$`;m> zSni6hXDAFUpGwi3G@~pYxUz5mf#v^NTRMzhpDFa(r){T?UM^gOw{~&#jgs$4&mhXJ zNXKwBe5FY5T!)L3GMCB9o zy%g$bZvkg3*?ZwRVN#9Pbg5pLI^K#1>#Kt}_rg1~I(~jf&mXiL|G>2IJO}&Pl%wemGDt2{}i58m;1XEiQz~1_EMzedN!_<`a#4m?=PQ0bI#qGR5w_vt07XE z_BR-q_g&eINkvnKdr7xeRGn-=wG@kY?6U<)bfmVHuH;0|U>UX-v@yoQtqkNz3j8uv zv$zg>mlBA$XJSW&jwkb$;DTCz05XeTjFcGTzH8h_bVxANBelHN3qUZYJK%pspa}AMM8Pe2t!S zj~|fiqVB0S%O1I5aAArthQg~1A)NZjUld!l0~#wC>paODC(U@Gve?o^nclLCu+zU^ zpb6Y-XV&BMDaPR%v&PJ7ylTUxv_WlVlw(jRgEqtZ_V;Af=A&qdqQ|95J7( z(o;8c)NEdrD9YGpDcLBI`egXQuwWd=ng-$%#*k2q;B*TX#K_59MFFV@Rm z+F=TA*=sMVvX$bLGo1^cPgBDYujeO*gV?GR>?-D_6$e7sb~W;srN!*l`gOqbpqaDK zhCU!Z)!)r(#PgpH354Ns*Wf7#Gb7q}Ty2(``1c zqSG@;=B{m*(8s-R)5vds37j?)YIWZtO?V^_f~dGSRhd4xwq4ry-{F&5NUw%KCQWwB z3j0hsRkOQ{eo|WZCd8gc9VQAaitJXmL9|aGcrU*=?wCYc$`rvBi7aL8D&vxuv`IDya6C~3vO#WX z8TGqeRmQUk2%97+|MI@!g{g~prRAWm_R-yscpy#K&T15>Ab21_5j!vf_&zUEzDPO*wqn!s@5l+vJDN4L{P_?hrw zO_`CU-qFM{>=Bjb@FC}cRg!`w>3?`hyOww0y-=^iN^ivZht94h2 z!gOBPpIPxaIx%ico0^I3){9LU*Ec5V7kEDA8?w|@OA#TZEhc=)O1Lrq?F6L})k!5%>&G7Q~eNU8d z0vT#zneg1(i>rR{DKWm*F)@*PJEs}hhlVnopQ1n#~J>ldAq{lW^`o6nVlck>KHfhG`xCG=#8HvH-IN}A0qJ1+Oe5=^* zbk>L1{;rjsSO={PvN37v{MQi0PHc|M*48Ao)N@~o)C+YS3KwfQyq7elp6ZgOZ{V*U zBwehpOc&}=xsHkhc(Uq!uZ_`8n)~Y{SULFI`Q2~$oxxvJRXa;Fd7USEx^-FJsWa*d zQwJ}i1#^C`HdTB0^sM^%Qc|i)$@sc#azV>1Bj#v&^L@tV<`5&D)qTWQU5wS_mpc|k zSdaPP)dMRHwM6t-Z_()3n+FAKySc|x>Ig6YlP@+c;T^3Ep%WDqIT~Rf41Fh}mO49x zPM+ja`mOHcj(2XVQQq*Sc;nu~SuTdgp14J5|euqZX^PE+3m97gt_{_|o9#2yg^nLbCCs=!8Nz|Hb{Lv{-w-wj$?y*08 zAGB7FTN$V!X&I$GcqEh&@e0@1-cJM08;@dR}&atZ_=5$9Pa5@QZi1yW_ z?89qC{TqHWZCm3pEtQgR>Rt{7((bozP@L$pJZM-QvEX(p}TYI2vMU+2wMuziHOB8ru8d{ zb;y@XV~-A8PklEzwoa5@zl7$R^mF>7%k~?JHY9|m=(|rJVpdagCl}FrGd8kSE<->H z<8|5n%9sC#x;GDp>W%;Z$-Aafrcx=}XjSiuO0pXzsT4(}Y*Q*KWuL@sypdL;RFq|i zP?kxuGh?SLLt@A>_Q7C=VHUHT@2!5n>-*35`dr_Czy5e#=ep;dan8&Quki?EMi6;>KXfaFRaO*!(6O5hm~|)jl9I)`ss(BKK|O(OoeNqZ!7+%@`=a^uiFbw@`-}7m7_!ymKmk zm*3ha+40R!;z#4Y680IaafT{z)}IKEyML$ZC!KWl@tW+vM71qeU(sJWK;Rh-A`1wE z3FQ>p8^X7Cx7Z{9jSSh2U)xq8>EN4i`CVx>x|0~oCIz*8PF~YY z_=NB`jOu=XZBkcThk7h|+q8S4|M`Vk>JRwOpy2zKO5X;U)uLEx`_2dVw{tdNw0mtv z2@O)NM5&*b--6lf%n(*|#2G3P#%LHEX$AA1ikpTw-KC%gy0_L_OuKjP6l~}22Zje9 zsW+sF$medxnofHzbQ8 zcpqyQCTiR|2BM=|MB@&8uSSf5LQv#tsa51*x~#9KXF_&s2w$szz<;3JzJK5!qf7Sf zhcgs@O&|Mss!v+|rI=Jjuvb)?@T*~0^5mhm<=E|9+zJ@(xGDJNTaD8BAP4O1U^Hb- zG>WoLlb65wrlHA{s{3mG`kd2mOzVPrb2Xjp22HDIWy}voh=ijI_k-uPwIm-X3IoIS z{xZ@VF|LMYV*5*)NA}MQW?t&pq>-a}^qEgYUqJj1+&?4}WrF*nDr!|cmr(u z-Dqwxo3=P#Oj`)ZSLjAlZ?{Lb{7204*)E1!zp5PIsV(a=B0I>XuArmjoLshtK(C<0 zeTEhI(~2`Y-t(u(7n={pNH>?$Yn7i*qrAIy>!9^!?B!u|$=h?ZhPZu(Cprnf>-UOd z&`I}a6wGaL_yco=Xr`Q%*AC2nZ$$r&E`l#q2eru}Px&Xg+r%#Fe}XrAq~^MR;!zn7 zD{6zAnw8DVFFcJ3@cMzn^8cOjDAh&}yK=)tE9r}c+RnGci1iI0+sv~){_}T^;-K8d z=Bo**r(I65)2nvOGv}HYB(Riq`jd3s)Riokjwz|D^!x+dlK}HxBm}4a6lPmp-Xw;~ zcd-nWvdVlsdg9-Cc$>%)%f8u7e)yM1G11BCWi zr9ne|DczefU2IuIs7x;~V!))sP#HAmp$cg`<+kxCC;!29-uQ%^%N)&PtI}1v@Cop& zVHMuNH||}xI#=^{o!sQEmoM=>AaJ6P+1Lc*`fB!I5%B%03o9mR5Ac42mlBr0D`W1+ z1RscR1zZur5s8}}a=g#>2)pK0L3%bMUm%uPdERa!6uqu$-)->VKut#Vd~|CjzKD1} zbD+Lh5Xo_2dsO;KiR|YbFDYW?8GA3k;-j-RUgX<{>a z>W8vMZ>Z9_X|G9E`l-+Acl!fwh32iFdh?iL>`WV;dq2X{VXTPU!Et^_E+$S>2R_H8 zH}MMP?v9PeZQKTvg-Silbfi`;sZR!2)vVX5BVXpSyIA;QqSvYCClasRjkPP*hU%E> zXNLJsMRO;O3O$Zj7>Y6bJRf+NDb74wv!S%A@pJz5D+`u_3(ZB;n()Ef^~;lQ$fR~|?VhNU-;aj6Jog1Gq$cH>o*sOw{44aK}hoIbgjkA%y+DFoBk?A%47(4#iMn8lf>W!%Mx)aAh|E!tu zAXw5_A_}F&%T;bCGjxFF{B6+hZI9RbuEl4U39g1U0S7|830n?TWbC@kdRry=7lkUK zQM9C+3~WbINd5iAbCGIC>kBLfJXW)HX}GPg`PGqjmfNre_-V>!2A$}`aEmRJ7Y8*< zuKVGB9pZf1b&X_zj(I;6N z3(M&C+E5WZGWw)ZNL@M+={a}GO5^&uSAz!Uo$ zf9jf~%o7IwYf?kII|%1AVXsaE`F|cm)`U^^qd1cA_8cuuE7U>$noxM3meiTt6i69sGU*E?EkWJ-sQ2> zcy6o3O=;3*p&G;FTlzkc!}v>Yh8zFv3aw&ZG^>_J6Nowr7_-=BH64$@Ym|_9yGw?p z$;V-~3)jx$2Do)ah+*7g?lv`Vv3)OHR4mS6v5gJybAM>UVF-#DVvrv=Wphwa&f}!Ed2dsaA$&HKde}Laq^iv^yGdx_bbVYy18K4j80~^+vRhc zyBG(AriXf{^KJp;xF)B}U$O>`J1bIl2OWI;YmO2tnrlAp?yinOV%ky?xrq)d-gUT9 zq&JWICgLgWOu~;f!yDD29%|GgR!@YCFQX`#E;opcI(6XKCdNLTSgeBv-2zP|m&QHW zOgEf=8LBMDDCJ+#nx>48o@LXbdn?Vk44RLJG=0(JJIn0efyd(^BlZKaq#JEWk3lFy z&u=k`dCxVTJu1<2H;sEW=Z^pIZ3U-$0C$Mg?%Mmr(yKo&2J)mG9)4~r_dVuhkOs>v zN3OC+gSm;_lMqtu>4y5Q^bu~dok~+5)C^k3^*cj}Yzo?Vfpm%BhEtbkttB?HMV*(q zTz6O(AGqm`(64eCM)0gB>KC(@Q`9Ri^&4HZv-|Cyz1}%GctB6+b3ckN%?A$aR;xB9=h8{b{Svt-ZfkPdID!5Ws=W2L$*9C6LG`c`O&=pBS@!!(3U_<@DQ1* z{75R0g-q)(*u*n4+FJa)uK^BoA#(WR?Yd_2rbKc;xYm9J*6~w%$Eoa>V%sfR+lr~7gB;>Du1Jw`<5yzYr(@yrf1E>|+0A)%2&W(i-{eV#bM$^IS~zSAXV@`sMMDWA+UQej$iFl7EzQ{*?g7JEBcZ?O#!0wxC%LZWlS18u0kn&^ zi^<^O^!zJ(S1@=+2)(zZOfD}V>*mgO0G-%F0ydIX(kDhDknGYoM?Pfd7(K-&WGx+n%p<$;!?TX*p7geaEWCy$51KAV8ejJ(VnCeG9U8AuutT_)utl)h2Zek?)rqPyax z`OB><@VMN0|CRjjm|Vcxi0={|y4Qpee1y4rCnW-M@*5^#yn8{ftHF$1 zLB)B0|b5U7|%7j+BxWM}X?$PNpYdmvO-^W!*()89j@aKnVs zC_j~OQ7@baRy46K+MFk>a=u4Ryt-pM(^}~6Y0I*bs;F@!Nw4)aMpd7^c5?rmWF^N% zWy=nU_G7Nu)K5x!WKBAp2=$WYKFrAE?PZv&+@kSv5%ztQlh^ct zJxDPO-RUn~$-;ZDZSXs0B9g^%2vuua02)h$DhExd48wA$;M(We|63@FbP09&sm!1J!qAkdPgG=9-TTwZZg7vPU&E$Jw9glRkN@fdODwFA=p*9F7s13 z1aFsZ5s}ik-+gL*P=(}>^Om*$nG#ap+OgR`rc~d3G&8l7$11Jw_v?3y&ZA$6`QYOn z4*&Iym&edeIz5BDDE9-(b@5T_-tm%o2DP4l!d3Pk((UHX(765DhN}8hORN;j*rgx3 z^PtB$+Na6_AL!=Et;-k|y#{&vj(Scq%g!apFYuSS1}5!3RH5M^gHAaoKsCkKIgvL| zRF>SrVBn>sUncI^;VowZrO!o8>8SaSF$oP*7`)p9+{3Y{ruZ~ZDlesdCcYG_u-bOh z@NQfk(2b@?FfZiuoY^^C(raBA;BZtD;(blO`>af$zxzYX2KC!;0#g^u7adF%EK1+3lDf@NFP+@~pe%GHl~qLiV(p!?&Pl~Rp=9KEzQV=P zV}qyL^{-vA)#YkgjG!MYx(06len}8?EwDXkou06lZd*@i3-RIYIY4E8KL^$n`VqQf zaxhgX&2zD!+?I=gT&iB!2apVuiHJvJm^OGvbgGPQ$NmFj>}oJC={o zh3NN;4tJUa`6hqV*C5LFp7m=P_%UP=W0iinwDS3@N_|p=4`Iyd-h<8|7ZcDc)&i{+ znoqHxbJfpnSHSVpS;VCw$$jql&hA`Dq|*z{t&gD}JAF)y zSTtXLH`waka%DP#y(`kb`Ak-9LW5LI^v{e_`~JE+N95v^Ka@SX*cl@HEcdP)db2dV zxq@v$nV-5-kFMt*h`^)@64DhNjzDy2_iS#_0hj4^kwug81yjPFUMh4`OszLMeeXL-r2ovDf+l0tKD%_wEjZS$M*E8JxsukUlzw4vN z^u&L8y6+S=irJR1Is8{!n^{%bGgHD;HU`&16)X~0cNa;_CR}P#t>Ix%jpF$4BL86g zX@T~kiY9~op|vvGzyfRuCNx)1y_8+U8|n4aggvF|LxGC3=wmsDAi55J&-E2wP}N#G zyEvgIam3%t#MSIJEPpvBn{1?Ovh7oewnKyF6XL=g%Zs>cvp%8rT*Bg(hvtW&aDJDc z-m}F5vH>-OjjEAsRT?!C#oH7o3PhFlT?;K_T}Tt1WnfYetcOf>F3pt%5&`JJ3nGAUej>F1_x4X3ZMy zffqgIA5I#HT=r3R_9SRI-vomgGQxJMLJcOgjl^xU3zc-aeyhpYGX@=}5;O1C zWsusZe4yzfQK15WM;&~?s%kOsa&FHITZW7Gg`sc1W^9tw zTBdLQkJiBSopnvr+26rgs3go{YM5s@R=Jgey9=r{vG=Y zRK1t+0}xmpWzRzg!Iswd5!siF54j4c?XSUY$0K= zJX57_?mn+G4NI-3>vpDGz@vD5tEJ4@Qz$W9U>ZIR_ePPUIi_yyxEw3u(|M1!_LJ=G z#H|#ig$3ci2*cqU-|1|0mK$rp2ai#;ffay2a~R+?a2L!T z537s>ws#;IH0rgE`O`~RIfxQnw zRcwj48hrw`Vvx!f-KL^I|K0sxJk^j=?^SU#bMm;lx8eikp4PCrck7#?U+Pv&SMNnM zEG%Yn-3AF$z1QzU3-PtZ>tNA-A#5-VcLCT}s(&=Dgv@)Da4Nb`h`{XBg_t86P(B+> zXh60$t9|c0HRe{~H~G}^P-tooE1HJ;-YMHmNNs>_Zuk*exA@4)FbQ*OtOCC!K8y{< z+`4ysfYDTqOp97KB(qWwjzT8Gh?ZwXu9j&V_pF zvQ8QQB$U+ZMXrE%nB_dCyv@EpH)WHk!SKt7A0yV)E3{mpE#&okFKp^M$k{2|t;Hut z#a-oVy6JdUT0t)JO}ou)DHzbMFl=RG8cahAgjK>U~kOeM^R4GA@Qf_zW2#xniu7n#kmEK6`Z~;Dz?Ws ziN0Sg)s)c-7uirAX6Q8q;Qdjnic5_k^W}$!OCD+!B_c(%_Y69 zi8xJq{S-lw3aqm6a37P6sOLM_Dci&`I*(Pj$iwXp0_5J}O8LwEMY`lTZHZ5B{x=ixEAw$B%4jPq;BSd99eX7l-fkYYs1v?(p zY7|q&6gCON7gf!1X-_&sTLbf>pXaPa<`d{rx-!k|ILcN)?9;rwrItxvCL(iQ$G%u7 z`OLTCTVCoW+!txyK>?+?UTY>et2lQqhnV^dD`vpcjJ&K9@DZoz;xG15PdCmGb^1H5 z@w9}7;*0vI4pAomgxxd}?QtJV-lDH#C(t&2!8%58qPrK~S#NUfz&f?tqM+w;mx_P+ z)R&kx*eQ~(i<}`wnwrJbvvYh}Mbwp~7U?s#&K=3N!=lUqf{W55>zE=%z7R)gEFN9l zZxet&z^eF=-=g&X{vjVEXV^uINWpd+p@8xZZlKT%#fc}kaTU?jNGG$in@mCq$ltNcg|J!4Ekb+q;&&ECqVpvbBO@)Y3otS0)M;LnHPFa~mXmOi^lmh* zzzDUs0zFvjo#@drwM%?(?0f<4z?e=AA1s`ZfEy%HXX-0#jke{j-+h3$sYvyFo#o)Y zUG+QgXIInPbo%8H2&#waNRXSn|CD1Pdz5J!dg!2s+3p}yhaSeE6)|!@^j8OjLpA9e zQl9pq2D0o)EJUm1!*4QZ91jUP%9%_n&{eN zU~Van6-HIZdsJ9YbQMNIhJ3|1`8|2b1JKSo%CZEx4T<%F8PTEmglqVwDN8=S|A?aK zWRQ$`F)2#I7a~99YDXDr6lLSKsHHqb+&DDZ8-@_^7;+h+4{nR30h=C1?&=Y>Hd%2j zknlHq*Ixz5nCtTzN4Yl`{RS&>^OahO6SDp|8^vCjHR?lc23Jw=#bTfvmmEuOi782iO%@M!ts#qq0V@UD{2Y?boChmd-HB zhbGL1r58f4$8swBUh5X`&V3s30V0H7M49pr6 z)Cn5$%fqhL-6OqrROmZ>Bw35>3-esp=jO-5_7y17r zJZOb8gMX{fLB(GNdRCHKKn}kyJ%&Z}iAMM)FOK8wI@T$1TeJEr4xSX0lXEHQ%jHZ@ zVlv9QVPmkZb*m<~_DzMBu~WwRTS6N!cceX2a@G3lCo#$e7t3d`@wgkYszoKR4*q%; zPWj_0)G8^VhhBYOu*F5UnM%s&0syc+vX#ZcP77hx`&zuAX#7S zgxTx5|M%Xe3n6J3;1ePihJgU1+)6QU?OeVELY>TmGM)B)1@w$WZ*@pZ65}1o+n?yqhG38!JhVyKBIu|p>+`W zfi8w-fPGBuuG;|j#`Am{2<4$Pd;M|wu$NpTL*NWg`@SZC^MCLr7PyO|si6Jiw<^Yx zqp0^ac!uySa1;oA0nd3MC|-NXnRE~A1NH>%=>=89KcQ6AKl^~AjBKxiN0ArZ$V<+r zCEu0(<1aR#<&rz`|94HHVk(h;BB(%nHGPx-t`r-O0I$6LZ4_`ymDOu6`J75Y@D}p2 z8)M1KMWrsiZhfFVqp+3)Ugtk?T~}WfBV=SsTLzGS{ud2gi{C3Yc!tsj!k_;L_PiYS z89aLI${ld*@r!p5z`ymf2y9=9$fhp6dOuNrf{H-9V{|zITqEHlsGm#gk)S1N$xUT? z=@tznbNwouY%=IOxxeg&qEz}NB-+%G})yihc*%O_x`k!#Cym~s=zWH*=n=-_j2i4`>(w;91 zm(F}zkn3MJzdB?El1F{f)s|aE%5nf5V|Hap_>&0=?u4vVXJW6Vkit2dZ^A z8B~xb1gdT5Cs6nQiC8jlT)OrTc~zhuIqwFl)x#w}jeT@AsE%)IK)v*`0#v)FOXpVn z$079B_w(1=WZ@MB+W&fbEPP&r?Z57*i?5cR!T68M>TgU{!S`;^^4DEtjZFsIw$F<} zJ@v=Ub1G=bh4a@_rF(YCx1?u%9aQT-@m`1jIGK!YFTEEj-~P!=+)nFu5*7JMF!SO=WO$Q$;tFLE=t$t z2H5`pqO2?(z_!k*tDv3<%LVms^p%-U4A{1Px%B$~bt(Pznc2K32QB+gTn6>83+iu_ z)n6agU+2>?zomEiz#r$+UoY3WCrj7<*U9wPFQt9T5w!euG681?*#7Hz`suvfQ zhV|FU^w-t&*X{Jz$@Dj<>wk*7`rqCrz1*`?21?&Wf1$+f?1!M(S1xy8vfTkd+3bX)-0)hg30(Js$0wWYaCJ3kk zumq$8m;{UjfCO{|XarmYPy|E-I0P&NM*#`~1cCzr`~dj?_5kw$@Br<=haGSZKn@TN z;0>^C32c|$0nz}^0L%c%0LB2r0Kfpfme3_&0B8YX0bBuA0Z;)-Eg`Dgd=N|2!IE`1^@;?1%L#=0{{a+0)PR)0001>ejt6I zdmwtCcp!Ih`9SDEi$I7#g+PKpe?WXdc|dkRb3kxQAy$?SKxaT?Kw&^$ zKwCgqKvh6eKuj@j)q&)%BtEoj+u;a|f@ojQbn-PVNSL>j)ukY*^F!nK(4 z6EU=M{#C|1U4CFOn_2odH7baP`F}nz>i-yebM|Wh)>P@Sg*9F|5()-fJmj^wfEJ%cF z8x=X~&`GX~Kv)%r+=oXLmI+b|Ql=Ww3lqx-*d7n1>WhWR59;`|?>dw%;Z+ z2~(!ok76*QuNUOb*2(SbWN@0zRXh!gl1BFte5Ot`*s~pP_60h`Ntc0`Qb}T6ITu97N01N!MFY%_|Jo%xV;z2UX<)IV3zC>4oPD$ zOzbHb*1%Uh9UXxZ)o;QP$d9@!N>t#z+Px7>1m(f$d3Kf@j$8gheI1!E=~GTqaRn=c z)1=Xshr5|4Sj*Adbs1l*DPCgcK^NL?{ zf4i%&<-&brS$$4Gh}L`sU3M}Hg#l-PLQk-OL<{L-%y=Wa1bD7xT3@ZBCibXVUrS2R&s;w)m6 z50t<*gBcP=6C%T{b)oY7vV*N(CwMUlS>?jwN}-;Ki9Yig!9c)46C-bmp4{(Q6jc95 z-kw0<@+8N<*dcu z0V|kz;dhIKQ{N=fBb3gNqrH{^ZG*J}>C5AnUAPt3I`ZM0k4sPtdSk2F75bpG&JnHz z-ol38eU?hQfMrOlXf(W1h{Dx%w?s+Up`z+>nZ?o~a(NAuN8v<)>AQjxIFycgKvxjo zYF`-Sy>;&_^^s^>@kqaYJoMc3yxb8_0(I4=;$*a*iOVRY3)h~kU?TQURJ>1sUu_KmLzL%|RcuvuXw2J{z7oMV*#wg8TPVwHfZOb&tEUUMrWBIGukE4awbs zfC&uQLsmUxI1~ANPz#UA)Mfay@0r~zEBky-ME@7xqpI*x}mF_FQ#ENgxyn+ z*i68_iwooH+!NVZh<86B4~rT0LsTJ>yWAH#B;_}^ot9^W{94TJ4NR&cs6n=hzxnw( z&lQ>p_RNAc_XwY(Hk=a1D_)Iq|ET>%J_i$hc&>N=s;msPKnu1NCTS7cKB zZ-0?mF$^hzG{2*vcj_wp?FXSP{7f-Ta%_WaY=P9NhVKi{-gmoH862 z{S)-LjzG=)3B;l}XljiTw$8n+H+%TL9l0K1)9AxlH1*Uv;O>Ump9E-Biqvi6J_xnZWv1>z%+znLYRVi~ za$UL}3Xsknunc0N_emq>plTS+v&-hgy!lBsB@CzVyoR`0cJeB`n4x zNDDr0qD~RoN%0~@+PF22 zGAFo;JwI#d?DUpPBC*_l4JvjxW2lAq6F5QA;Rzy(!R8@FvBOkth&QLLpHRfkrRgV( z$MFw=3EAsz4Enuiw`)JfghM%6&H_?)`%KwMAGiD;P*ij0kT@o6i+-BrHc91JgaGv_ z07@NiuP8pzqG?;&rUIEDPR)66zNGP2iC9x_gExs#lUrl>9M*Hv2?DAP6(s{qnXY!Vh<5&J|qaOBAY5Eq|) zNJ{MSS}8=HlM)i3VGdIBU*e#F9slTiSLJ!l0?kN;jRoKuKbbW_rw1VzSx|R{9(-Ob zD(=ZS7fFc2BGxDB>?)KeM-K^4xm*!zw8>63PM3L6udy?aN?&lG`F(5^@#1G99DidP zQRJcyCT#D4o!U@<{sQQmiD46{HJmhJ;pC5$4h;`z0)@) zr*jL`D5M>RkVV7R^@NuUi9pE+CI3{ys4)q?J~C+8xg53QVobsh+|J9i_3g6aZO>r4 z;d8XFN>_hFKUf!Cg(Ubr>ZcmQNMWJVrf+d6k5OJRsxZx!tWyoV;o*O9q|IV-=GxgC z*W2V;RDEW0ysY=@HB7Cp=}601gmsG7LAiWWs1`A43v<=|#X0&N{`pC?IUc#8QSxn& za4JHqZ#I`4gnW*!@W1wTWwYnK&je9IHhqNjz*)q$W2|{`K3EJmar#uiJdXz0@ttknh6@Dk%oJy%qSf`JfEejh6hoLzI<1 zzV`U@apD_}rw8#*fiXjcg>a=Yc19cOn={(}7juf}>)~lKvfa zZUqJ?#W}mlAbbASOr z!JDvj0=|tQX}St7mDic}JAaK{BNTht^)2X!(O)!Iztv6prFbFeIAL_Q1IN9QxPD0L zm7~QxG+5dxH`)Jt4l(gB!XaJ0>q4J>!3#ovadY~kosRsjef#Mb4m2M(;d0??TFMrs zwfy}b1T!CHb{%|xxG zwzl|tyPk8w_BSHuQ=j2A3rtEw(Os+3&7DU(ExMJ~&+HfpW)%_Yn7qyIo?%cEOh;Pp zQ@7Y?vz}_9zu&lXJ7Fn^rP7b{kR%!&LB6WmMeusDkk+Vrm(J_w!*ux!jPz)|*ECzy zoBmc+T8;5sKM191Bf5U;(bLv;aoV-ZhEfaqss^J3CBgCe!v#;ND2nHBTWH!A8HHcj zi1t)i);UVfVsAZveH^=pG~3TKEv&-%I(VZ5RB(U)z;rjv)R+-L!!@IFVEG1*$8yQ? z4k&Ct(GLDz@XX}?Q*BOmy_%I?dHs0_iH1Ajin`C$<*%PR?#drEJ|s@pzRHMasr)*2 zA*RBh7W@Xd{I%z|*I*EqqZ1J0y9UcJR2UArNbW8Oel3Jll$^#oAGVZ*O-g%CJw@8! z509dYXsHXq<;3&Tc8^6X#SeOEJ8N(`?}m-JxdCeaz1jkjGnXQy!?cPXu=fgZRe?7< za_UzwovDoM^jmS%?8ju+WnQB};@^RH3O~TSQTH|)%wOpPw=!1eMwN{-GV?lV22TPH zkC0v2+iD2&HT(tK47a?BP{aVwCBdL; zX6y(>vuspq-O^X$zwZ?^!;&dUp;6Dif*jzjq7vpC+*2PP>K&80Vr}~F8r(x7C!iU3 zBFBJ^e4Cf3ciWL{pk1b96p6~BqQY3VHTK)C6Amd-L>m~aodnPNy=*c2OEF>n{GBTb zLq;7Fl|{VR_F}@sPs8^(BK9%^_(Aft1iebqYPqRvj51Zdt{xZYqn8?8`oi0V>ry24 z$TYn$_%9<<5OZuBBZ^U#fHGma@{78%J7u5reN#B)WU?O;I;D8GEqrX4!ZyGV5fU;t zaPl4!pF(0D`(nW{2CuZl_lpEwhRS;RFZ<17HF)>kTmJ>??fjr87%%>;(6mIr}_hg1~~prDNkoVP&>Iw(60f z4VK0FJP*d+yTASM)Rq}qCPR*&EBxsJd-;2RK-!Kx+2r453CPyojV)CcR~=dZIJOMq zN2`@C*GvSb!vqdxyU7Q1pMH>=lX7m%zId|g{gB;DN?^jjdjr!m*wx+c>-oRTf1Ot;2SZff7ud{3hedNh6;V-xreB&o(Zeq|I_9D9=Ky3CR= zI@RpcRuW}`q@NeC$+CvKUz(hod6t-~UYQVO%28h&L&xB4n)p7V4NswxoMXJgowU8Z zs60PLQ-@I1aItPLjmqN(s0K=Eo-kc7m~|W6v;{i9p5=x6Qd(JZ75vRVRI2w0u6BX> zqMVKiGq+*$s$sk^>)eIeg53MDammCpG8%&cnabIYMxSZ?^3ET8PRz_JJ5UL(E6s!q=sKobFa< z@B=6|__tO;ca;{zf#-CN->=@Ec)yYsIN22kRxyD__96F56!>WEy#`=4&B>Y~ZTDk? zk4buUM}^qVvdAA>SumV7vCkLF+Ng8!1-Ovn`@1@z8{ayogxgcVaT>DmTzNhwhaa zFgs9=DAs=h`6lY_Qn;NdN8wz-UB;@4y-Eucst90Z)#knn$FwwSg!`r04VB?^C-!Pw zqK*Zu#&QG0Qee}PG=j|2eB;wO%Jfw)y;6|}RbdJ@ujK3C2BqHddD=`YFEXK_*uF22 zCbVbxshR}KIqBIKO6&OspO_Hkx9+tqY8mZv>u0L{9^{|=m0)yg0XHvQb2N-S8$icm z)95lmvqS9qBCW#hg{IO;==;{AF$_L>V66I05xB};ep~U4`s(L#l!{A5PCw;_mN7Jc z1QNx(&lWTFJUZPekN@orNxB%RqgDRk`sgKs!w^9iUPAtga<*r>q|13b3_Un-F6jK# z9bfr}&Z@TY&JtEb#Ye%N>5Crs2T1;G3YjtKN3o_9L8C)!+>>Ew!z6TNo}`K(wtct~ zK`Wo^SM2h*n;J-n9}K5)99aKpi;1Ey>gm7UW_1f&SG&O1Yt;)8{Lo2%8A@KuV{K;r zY|w$|SYr##o06!-yw^^4aq;fa>=Ypzo3s$4ri`>Jg@FaGMHO6vbMGW+6k-^PC$}x` ziDtZ!C=d>`8lD%J7YhndbFldvq1>*qE{tR#&BoI?clN8IxA9Jn3km17OpN4nG0_6l z&yWhC=d}EH{6D;}S}`nE2ya?|#BRz-f1IULrsVo>A1vcO(vsS5M}O7W4;IrvtQ7rP zyF>GtxwhClVhnSZB5cYP-Exx^J^WgKp)I7sP=mYs2!B_A@mcsz?77Z=4pjfza91i% zWC_4x+uo#-)#Zd~_GrgM2wBkSac@ z{>DS?!Bp&QgnT4}A;g~-Aoy*>&7v#5$5TxC12@nIz>pK0A z0(GK8l1f~~{C>IX$( zg8rv`L;9r=OlGcvheH$;xHfx);C4uA;w^ZysY(<UmY&YbL7ZO)6kK923 z8*U5iXNg7u;uvw!5O(BWC^ya<`Fh8i?B$0{9#5K|c&uGxziQUm&xK2A8LJETj=^n#*xio{Z%v zwcjdx+^jk%34NXW-o^rbe7*{bn{uw#XEca{oB2Ybr|u}Yy(QI3v_XPzI3I4DJ8%Nn zsq3eZ8VcU{sDRE|hLVC0Nt8>hz{`o?(c<3!E(j1t+KC@vE6a*+wJWXgx+hs2plX-n zIFlB7#j2jUreQ5#0^J{SnpF%C1Gvv#niQMc&cj}=BKLghUP&*RwL0;|-R={+X0 z66MscskORO9^bjuQqmNs<%3ilG%co2>AL+Z9fi>DJ3>Wi280%8$@fY{r5R;$zG*V5XCj0a|x^0N({}JLlxN&chmifY7-m3$x30xB#D{`4n2vEON?wk@n)3)XV{{g@PL7;ZjPH;iYJ}2E z*W-~}nfyR)3rKzt6UDt#7W3}(vjXbp`rb3d({#UwC+|~(B~B=qK&=hqve%ny5rDu) zZB04sp}f@L=v2O^EatsoIpcZi_!aufS>#1%jJspO$(T~PphEU7zFXx+oKnK_F zdWppcoz3P%=Z zcEK;X(=t{0qI4|@`L0N*mLE74E|PJyQESzoi{cp8;HWJhSoCw12gT`|K_}1%`Zou; z(->xY@l3h34u7~jG(T)lW#9!G9Kj@gO;;45W&@X*JbLDs z&(sV`VoA)4celwB#*%tq6wcG=Mhn;%2?e3;1ov?XGtL}0bH3lV^Ps$#8EETbBZiWu z={%Q&OI+6O-goEn>FXK`JB264EB1F*O#(8B6r}XVpb1$WqBUi-Cl>Qc(*HuK2%n|%hCR4L=*n)U4p}Wi)y&2hW3eEz4gs% zNHGZA=5?~Ames8xHEcZzdm8&NEPkE%fk{1)in9%R9aUyNUAkKGXn1#FbsiK4!;GyRa;7@EH_FX(HFEd^)6rRGqt^N@V~ zQ5CRA)0i)M?UppeYFx~xH?ty^$RrlrG(QyUKl~6fy}M9b*BotlzDqnM#pT#J?cF1^K5)2He?%mZ6o+wh>bpAlszXfIvB!oeIj9Xo)jGje9MGH4 zSyrYrEtg-c-ZiV#FYcE4G>pqYrb}_J+&^`3UDhPAwDdv?4Y7PK~rde`p7KhkgB$eSWuDPofLNu>Dnc}iqpVld8O z2>K|8EKt#e%ok?yITH5d)h&opfR$FGut1-c?jK@P{;S{`_8?4*UeUK)6m8}e78*7Wye}}8ZxX3+{U_a4s$z4ka`K3)2*341a&j_==xr>oRApA2IqHe{V39PM0yG4^y57)-v$zv$+Wnd`T6%{D1H z@hg@|4@luo${jrV^ovMya>MEW#oe2~L-ogh<9U16RASnZGFl{UNXRy$R9c8qAm=Rp%vKz%M<+HO}Sbqv}0ZwcnLU4|<-P z3tD+OXoDdP4xI`*TOxJF{-XQ#C4p(*@ zn`b0HY8ZsRNme%O-nadeJ_>ta_Wo*TMJDUdU)Aby(ckA=B^uDx{7iKRD8_aOkPU?Q zr5p^lFO+GXkHl$wu{?!pvKByN<7N?s9;I5=vM+w4eswBh&|xg{E_q`Uwag^rP6w+@ z=noptX`Z&mS?z_Szd_RNr zX)Nif>pcj@_*j?6)>*0gqnyBiO&1@W>Z#m;m2@fkx*)I4sRR@6x=gS#&!TP7%~AGq zcTR=Z9A(AhW^GSBDE~@6&Xg8c7+Suf?1@=`}$~$WIF(M|7 z!Qfu;QQ>HNb0Yluxeq9FN4|I# zb8TT{Q_Bt)>+MLWt@K@%!R$qH+jAT=;_}BSQUJl}R~x8$JB-L#e)<-cxO47LejU{R zbE9u9EZ3eL=u}pfW?B3w*l?B#6^Q+qcZp^bTCM&BN$!9Cm>dE0<=pALdsHDzkYvF`nqV4RufqO38`&Dv$ z{g*v?{|bVUuvZu`A-kx8t$B`78M-iy6+}$TTU6GzUwtgcZ{mG<0LZ6Vi1Sc(SqykN zGmM2AXEerA)e@Peq79VeKe1FQM`9b`xR9$sRKAUw{J!rE@4aagcemER`jqWprA~es ztMEigojcnzzbdjJpj7T6y+u%sxGSwyzJ1&}{TS-e6S7v6v=%Xa-eWl{oMf4`g1xYm zS$FqK%&sY7HLsi8wSWpN#cttCawVzZzgBfOJbQ1Uj36gK@`BObCw)ZH z#L+9CLWQXc*_D>zSD{AP+v5|@ofufjo0I=Bw4obnIbUhMHRxyu1D`J)hrU#?Z>GMk z;f!_73kiH1m-KD97pc+Tk6P@32<6st-7be66y(@u?ikqu-pP>zbD_FXgL-?u$ajp6 zST5iUj^%7Dz{N!58Ia8A*M5d;x|ej0*dg^(-iu&eV7<X8kq*aM#_{xdRb8P# z_H&@9LbY*VsQElBBQ;@n<^99J22(DgGQTymd`l~_Xu`Y<0iGv}q&ms<1vjC(m^}`0 ze--)a3)(s-W22r*y24^1rvRm@t_!2a7;R}Ns}!`369W)D^t07dqa}kQc_Tj}CW1`_ zparLVynHhUHbS_?r9v{&rwDgSa)!DD65OZ>!E>7JscgT|-JFSBdo<(l=-RgAU+7Ga zR{a;Z5l9pg5KcFmiE_$#!PPHn*E<&V^v7LDN&;jG@Tc*{dMuWiOc*jyALTL5KN*Nt zpk7M4!0aetB)->xct08;&WWXm9i04!A%rNQ?Eyv`|UunDIM zyK?ipR+`IgKG8^q;Ax`e+Nh(1S`&rbWl+v!KBiYvY3G?qU@ei}5wb=2+)D22K54+f zstO1gW=Gq#14mha@x^Bwt23)&MaBdW=RjLqEJFutndJ$t9Tca;_cO-Gr1iX_Ql;-U z6m3dX%gO~%IimCHsyu8@=iT^4DamToxQB6V8uzN#lg8u=*;zoOQ90|!tPrMykK`>< zPNmN44x(#0ajgzuS@hEv8mr;oxOrvc%yTLRk+XRn5l$CcJL03FJ$@Y?WnijT;=Gnaw~lMW-kKt*F?{h( zU|Dp3SN9cMz@O+cqyOua2ft*`&Z_0|7qgG-kF1a4-dn&p+;sUwJVzBqpM+DISHDMJ#^xMR@o96==A zH(K&OA0lx=hAe+0VD-VQipNeaD_e~uX2>v6nm{Q9}x2_8mHU?PFny%GSv!!wQv z6laa&3S8Q03N8$|b0wdjxxylJ<8VsO8u|Vy8G^yN(J%}m$Ut;tG;nS-J*nSlDsb7wy&)0 zssO&aikV|5Ipp1@Tlx?Bd4J!3p8QaT<49k-g7BLZe;vA@=iSN`HS3Jcy@kDFSXQDSPkdN7rlyYmQ%QQ^Mix$j@G zxaI(7V`$gWKiY~tQj0wEccK)OZx$F*wLg{nD~kJ@_&QjHTeZFbI?rwjsGGod^N`E* zClIyv^L9;7-FXxPMWe{o=@+@nXh}i%jD~ zP2eAGrzA@5WqePv+yLj0xRpx2go1(fY@T9tH!W>VtIx?veu@o!E@$ov|DG&YTk3HZ zfP-Iwx!3xg>-B5t2epEOEE~7xkpnZQPA+e! zep06PpTJ7${|k?jk`Tr7B;Plx{EzSj{O5nR64}&-4N_q_i@75y4*el9BFOt+mf>sH zou;sU(jx7Fctv-gkDSPj^sE)*PH+?_J)w zwrC1FlWBf5rQ^Z>lbha4021v#AVyl0jDCRNf_wNk;2#LPpt@{hVYk`5c(fq%ltN#HWN9nEH^NwepT0JIB?JlS?M#8OTk|BY zqj}4ODH(oL6{O&N?0$#!FVR!udXgu#5{>ABqsA!h!7E#d^V4uT1hc1Euk@7W>OGuA z;SClRwmGx^x%t>b&a+bP-m!YuizDy8A;Sy(y1#LxyedMFmc1+6tAN%TA8OrFTA>os zfn@B#NbvD>z=3(g`j)Fv*z!ihOsL4q#dnM{a8`IPfNP!oG{mRdBIOZX)_#-{lFg%Z zhwI^-;m)64xx>b>hO}peImV)2->S6z>XM7n@6~e%cQ=DgfP5MLi)YGc{8$yuqe^?+ zLg{<07OgJ?>D{~JIl1n;>)@KH&@yKKv4Op|zJ1g25lJsZr`DP)@bw(nvQ%3slSnU^ z{PR}UzWqJPeh*Oi3KUKu!FQZBk|>{p1i6JDIiU-M{$QEEaAYv@>epaew`;tlmnFIZ zkP=dUaA6>uoOq)Z6)`8%B+f&M3x0&PHD%XyHu+$Gbnek1V-_?#5EAYM3#~f*tY}?o zlq(jL++w`q$hH~NovQwK`Y82Ni%pdIeH#Mt`gY*ga`I)?Mx{d_gYsu4jz% zFS_?_=!Cex$l{@IQ-I<@OGR)|4LIaPvWC4OH+ej)^0#!Sx2=}pjkr?l7ec7=*5IY? zZ_drthjUxRpK$&f+}z!;@042tj~g)qPIsMeC~d($REO>}ICKs*4LL8S_#2+v9f+8gRv^lf^uN?08^I#2X3 z7{9_LwBow(DWZBo`L9Av;bVc!9c-fQsm;{mG-O-T1fgD%+}qWsbV_NgvHCkc1>1!m zOGvjH0%TToT&muj1MTk#$n`?o|Jh56t}5KcWBwFDd{=ai6gDA_ly6P+o`pxUq(>A6 z{~Y9dG!)xZk>~uxwQY8K;OD@$MEgYW-R&lXt7DTmxI+ZF&)Rpkd?RIgG!dPvMWHqP zY0RE892$v7MQNqb;c@j|^Ce5;76RLS!SV}?2Ih?L&Jx2$ z%G%zJ5CVl1tcFGIbw2XT+?yHWJ;LAoD{Y|fH*K*U;wG>0Y)IKZU>j~H*n*1#rxChp z!4X@<_o*EJa7$H*Cj7@q9%1~|pa$=oAN^U!Cq4yBt!KYew`frxVBaimKC%`M&A7wW z5G3{CPx4@X6-X)W=;?^14_l@hGb*V1V7+YepnnKBx!aXntc=0k)@Gyp7YezsePEC) zDGh+;I^zWe6^FIxhLd@=?P6%>#$LLD!ap~FUy^zBIvM{FaLQgjq`U=yvvb!1?~{C} zgt{6dYr{fm8gj;@i8v!}R=tlTdmbBUf8QC4a$AVklDn-}j9rx~hpM0^YTG1ZB+W9` z7cAY(^{Od%e)x^vGc1grLee9HeCxXZ`&C%yQzyt-1g@B?rN{UN@dvSL-KrJTYAd9P zSRNS;3#lB{0rQ}n0oyU&Xx}TR_UzJ`TU>$QTFyXc8i$Ytyq+=n%&ys0tUKNx=Ejao zTr{-NWewvjY2NRW`ntmkeIu9r>%gUlL$jz|`No(B#>he}O9FU7h0>&k@ zjGWiaV zsG_yEofiZaAHnT3ga=-j?nBzCPm2{P*}i*${A^?I3-3AW<@w+60kMxV0X#3Tf1u)|7>gBse1p?b)nT`)%w2F48We4VvS%61>#xpX0 zj5pTz>a<t0#E+$DiY=V@psqbsZJ4&2dn33 z_1t*#6MT(_8QN(tPx;Z<_!zTEXfuPj)3CJe#`#jr2M4IPxn$Qq)KbxH()70I*Se?Z zy)J(@Ir}-?;llg6n#^At7SF7Cj2dh+=i-N}lH7zf7!~}B>uR*SU&gPV{E#NoO?Q z_PVI@73hwEvL@q@VHL1%tNAA$`=)@nTHPXH`})c-ItT}QpKN?7>t<8thYsSr1%1H*Lt;CrJ5l+&%yWOJgqBw4hX{J}9vASqRYHsxT*-amnO^1X=U}X< zcZJ@nrR<8G631(0ToC&6q$b{+gggcgoZ9G09CcVPaNdYapNOmwAzJbSnc2Y709Q0sj-v*nt?@9;xnj8^( zuT}loyV3x&YT7S~vZCsyvD>F`UIgVErnCs*3vU}bq8@tCLt2tlwH{WZX4MNR(HO;d zDA?+5dc#i-+w)u^#i-bIx0LM(zpX=%E8s{EO9v^D+M3z#v=9e9wg}!M3SKT7ag;!x zBZ?@BH_Z)e#5^4{A zK+~$%+P>)T6s6@s4x%LHFmF;&lYja0uvt~atCZDOq8n4<+f;NEHU!>4(#u&)JZF0o zC6_l-+-_bK^NZ)t=cd$e5FN|qZU)M_g{AF5ArQ=&5vBSe zT}oG*`3}@hYjWlF8JHohzCEHlweO+fjMI9Nh@Pi_`xfLjNt zFKeMd248i78?H&iFYSbFE{pQ#La*m8QIm|0Wq5x@oprSQvEJ3tf^KU@jS^6C+Uw`_ zS$lxWa)FcUT0iug!N<>JUYRBCcW)bBwh5vjAG;X!R~ED#8cv?`DRin*|0z-<`zbC) z(Z@aTYkFd>c){nSA8>aO^~XG4n#i_vrqP>jMc`+@Ex%B``BQy&l+FQ-68<6u2UNtM*Xn zOTiw@2XM4pY+BQXens?cBesjw=w$(Q_|xOX8BjnCx%!4FzZr1Z3Hl1XHN9FzsWE4P zB{iN6U$wm-MK!3>*So{!J!dxK96JB)a;kT~SV?HDgfCgbQ(oD>Z`kXziV~eq5Lqoy7Mexv zSvER7e;y75cHb5LSq${4A*brt>^T!CQ?6k)4P~Ldh_%j{(>#h643RAG%R&=G0zBAv zFkU2*uiCh*?1DeRDu0+gMN(|8^@unbk}QnZ(tXcO%J^f(QUzADXVErXf(JOLeLA3l zSzpi{;ryjQ(*f#LCHxw__>Jse2}AwOLy%YCu+yf&XS> ztSiasCbzFHi44Xe6=jzZsq1)z%hwi))4)Yexs_7NZXo-p>$5EU{c#3PQjk>h>}3t^ z|M+#diS!Mx43_FMo5^@Y0?&3IU@EM^PV}NQd~!k-5BsrV`5Q`rYJS?H;VC*rZH$-u z0RIZ?A=Wfbkf>F^aINCwV!>7*;hkovU3RC3vpJ;}CZ|O`cn?sYB-C#T@mZH5*axQk z4smT*`6Sl9azY7zq8LCOn7iI}4>NQOQ(1P~XR^!QU6I?Y+5vt5nG~FhkZah8vm|@I zCkOnUPwdussCI#Fu?OP0l5dzODQ;-=(sQ?XSe*}7>F@_!TtfwtZ!w9;rZT&j zdtlqeo=Ts0-KAzK!lT@1?-uL6hvdpqJxMn6dHfB+-n_h^@tNvS#@RnxWbWR0;2WvO zK6Q3YXHHs5d`Aeal4>HYNlhY$H!W1kQ*#s%+%TtjaAqKm7bvPH0Mm^1k`=l>gHgW) z>{KrTh*^Ixmb}sjS-2D8IqF?bIZtzQ>EaSfg@Ul<<~l2F=SndkUE(MHMtPJJfnt!; zqnZV4p1K=iCs4$@KDJ97ryfGJv96zmFzE0ac1^a8T^ng7O0;V6Qb5f8Ds>RH9npi7 z!TTf9!46=e@s;I=6`co;_6fkCk)h^!cQad(I3C-3w z?9sQngHY**x{SJtz3(sM`Cx+?CLLbur~RBc*gMqD7ifEE)WE-=eZ`a};9GYzj@y)n ztB+W#Nn|9joL7*J^=rPu8{7lhob2tq41R6{WE{%AK7N=)3;cRYXz5iWF@Puj&BU-P z!3vEW_CktB9%06$4O~ff;xcPQ!jt+JOJtXLoL+eH-%a0-CG4_CMEq)MLlTS-UU>BS zUmw{ZMXuXIIwz?Ex2-!yt7C5Xng5ePJ#iu7C;B7)8tX9XSR86fdiq~CUz6A1bED00 z0kU0!Xe%ywpWsTH52U}=qRIk_;4owu_uZqJhgsuX-zHWCi-7U0PpVax2Y}3)D-P+l z@=DTI<{=lCRfIBrFZ351($rzIee$-1!=r^Q!sBbv!rvaASv0CEf&4~LXi+LTddj72 z@o_d`*kO?QzR}Wcyn4Fi%ii0Q(n9C~Z8fa()eo?i1WG=%q^{6kOLa}er;4|IwSxnL z?KkYF_z2c$e2Ey*;$kUF&(TIusLUr3q|Xj3(Q5B-D!v;WIQ#x0cSkD{w*t8FWI-eY zQY4;GreMkvQd?`wT@YL;f6~s}<~`$~Tv3y_oz%0Col{lP3ckJWn>Ugir*9Xp>vO<$ zT;E$`bXdKJ_Yr#>1)$2&XQrUxu*lQ_cqFIdrk(s0Px0vo7kjIf=;Jh(-!;=t zc^6VUf_xa(SxH?d?F3Ho6mL|-9MM7!dWddToAHJO*n4i~HO@O=DrA*1kE(aC8UxP2 z9`0L+Sx@HZ=C@31b(IT|F8EkrJMa{v_MNn1?|>g;R_=BMRjZMVSuYzK)>v2=j+DjGeT+(?5n`z1>VQMw#TUA zBkW_&6+mhfW`H-Ph5lwgTyUx$Z?z$ysMB=~1)Z5E0@(d$QD{_zSVf4k_-HqmV_vBd z4n=<)z)~$rQDY*EStYc66xmg zIF?bjYjX~U$p)2Yr0=^^c6U!Eshw#6vmT|TG!aX~73Bh*3QEdfRA_8s>L2YVV$WC} zot946F&lni4!)fiUB^8gngB8`h0bhSn<-wCB6THWt^p~)wsHQQpF!{*<(ge<9|}}E zy;-V^idw|}ookcI(dd!@`n_+L*=@^vqH#uPb$WHx6T@pn-b+#745!;NOUOYuENUl1 zJrR+M2nS54I}sMkIY;0obL>WOAD*KT$7899N{`zLFZE^r|Ke z>E^nRnYS(5iS*73(L`GHj=BRtDiW* z_?fzxt4e$$;K>e{;?CdbTaJoH6|}F+;%BiA7bvRj2sF252*Fg!Zks2z7kvI07^Lfy zBl?c@W56rwGV99=yExRc#3yT4)w7if6M6C@_7JfWa=olF1NJ20-rNKG_oo`3Ss=5w zgNgtJ{#T{E1b~x+7x9aYb^u5SV!()G0W%CSi3CQ=JX^oQQ*B+#}1;O)R7y| zdI|adFZpS2lcJOb{^}%wVa99mC1_aBNE5aEtg0z44`opY#l`TKOXR%H5R_)`MYv@G zRrG5_mf8Xt@HZUHKp3zRu*ZMX3oda-O>(2ra9$P=`fP2oU{e!SfbX*w3aPn&MlP{n zt}6q@Bti?k&a&U>UG9>`0s&3iHNY-CKdp0ctyOs#HMn>uvce|O9b?fj9j~xhDKZkxsTHGCZQD&#^&$v(WLb`MxI&yUD;j$Mn1yEJ*FJpSH z9-m;jF0Dnd1G?1S!maiImZa(7Hp*p~r-U*lM{$21D4RYmpj~jZ9b};HkwQPOPZA02 z1TBrr3yg&ml3HuR`=OtE6xI>+q(s(ITk2jL*D>To)o@`6y;D9`~Pu~^QRh~@f>@u$R~ z^1{sSj-#Yi}o(pQ@&B2O1BGkEW zckHPgiys~j9D_;hx+2wiqo%ObKaUK>sn9D*6Z7FwtLph24S9y&@UZRK`tlz+`LB6f zz`te#Siej}pDZ|iv1sAYA^GR12Y2pC4{9I3HQR}43#-@$IU4+?>{6hS)bmYoKa-G^4NQEiW+^`VBfLem~y z>bCaM^9#X(J>uNHr+P`E`V->The^PH6ZK%Zev;w>O-&xI3IDS6!b1&fQYEz%S&^=a zc`_JtKzw8Db%iwFvI~EXtX6Fn?6pv+(Q}p9TMBia)}~80pK1%91RwzZrsjRHXiP(S zC~)EqMY&fk8h^440VuitJ^Ii-fE>^A|D2?S%NZuS;%7TVfi_1gsM-UE?}orHKZmyP zLq)NA<24}**xfp?Ni1NA%gbDg_9ZKK_D^Q8Q>vtD7~c6=c-zoN?CYme2-!!45&#^( ze9w2Sy&rw#ZYl5!^JZF@;G{rMYeR@d5+(MdMd`kGXgtN@kjpns(rO*S?I?U{mSr=} zA(%R54TlWKg-KRE_!(&-wxb|gmVWnr3!ZMmM?Wc`8-IBrDKukQR(t4f17Ko2!6$?Ga_ylrfPZCs9i*t z7OX&jNtU>~8`Zua5#qs2PG<{bf*=kY;udwJB-LuCr#tj#p_?NXv#U1=)EI%j^)6Jq zOQn{QsUNR5>K$#`mhVd2ox5P18}UdJ)Ls$uF{!@a^Wz*F8`uSDv*5Zg9y*~UY%IY? zOf_9MvnBikit8G`u;MDzF^>bgdPXCq{YBMUVmjmp2e&@lxiLB1=r3aPH zA1dwMrG2$;?e`Qyd{Y^;QJ#Mdjv762H&QFi_m4-`3eI`6AJOTTkYKH$-tEEidDoz{ zL#XH_*|1);(+p48!4}chKGv^KE@ML**P?LcNZN5U-i>P|s(T9u)OG%`W<2%{%8{t+ zhYR<5{D%a;DvXspJp5OT_#f_jfP5|8qGp$`@|`x$vK7;}#7?RSyLPXQ$u2gIoORNm zkjs~(*MGWERL&x=aLLB6R^JqiKNnuEk;1T(1kYNAjrcJ)`8>+uN4MSua);=SS=s`7 zMKHgjYCrIfHq@}qoZK3D)#V%~NB{lwc~*&ax29KlK8JVm2rC6&S4H?m`Xr1DFLom! z*Z-Ep-^WCT@2bDtMxKtUR<7l}m37XMXRSIAj%yuNrQK{IjVFB?5%7sm`RpfXLbz62 z>8}Kbtplyo30{kqA8EUtJhq!HUfK z!r#DbwuSz&JZe7U0{^nm)oVemDe=47;M32r4{6)Z#l3(%7wEH$$3uLec0I6LLKDG1 z*igL2N$L`(ufly%`m1b_x0-pQyz4E=-OE9=MQi4JC!Pt7_%tdr5|HV#92S(Eqj8%b zMLoKtHyDB@%?|IT{jnL%Ztze4DxJaK;Bnm!em1Ovhq<$84VWmhai!x3={-JV)Vk>sqYwO$I>4#g}K@%;s(l1by zCYwBn$4MHrJYuP?!U|rkjdmYNf5J6hjPn1lTj!QN0sMnV&z;*>rBt&Q`(|kGV4iyP z4v!PpbBVUVNgARP{Sfn9*JPfRU=f(Mzb^V4+am3Et^Aq}?;!oRIU=o2X((r@8pij2 zH#V-R>U-fBVv6I2W`vB&oyA594y8d?ZE`fSyIP?OtqvpIm?Pk9s^^PF9!N&3MDJ5(uYdMIJqcuBW%w`TjYrRK-oZ=K?48;kJ6*d`;I0A1I3Y9J56ypoW3hE^F`p zLE}tcYz#<(=ChvA_gi#cgw&vl-&x()!hqzqIga&GC0^vZ#Xa?p->73{K#?A?) zVYQ#7tLw4H5u0bsh_Gat*6vVQwpvaaG!CkXPaZtv6JyTp7IpggF_k+cSx6B6R{cM3 zGL?=7%C0oTe1^7gc?&+H{Yog0cfalC^t<=4?{r>oU=)8Qbg7Bj3d-oR$uimlzifLy zK?pF}()3=O6I@jqz(B2raD#(;qve$k&B{}yS z;_amXqyuNz>QvXWd{QJ+G2piK37AZqT*>?yC8(EE& z2TXI?ZJ{%|S&|#hgMfX9#>x)LSlU7b=YPuo5=Ign@r_uyqu7I5LyVVX!m!+gHk>Wc z`Z=XPvF_9%io(Z%Ip4+>V6gnPF(y+#ce>m0ZXJHIlVJt+)AE?df#ut+!GuskI03*Q zYVfXaJ9i|N!Yn*@wLoVfl>-n`I_i6f`3`txmDd)5)x%PY*#^p|K@ASl1+m(Lb0p6l zYNXp}EB_9}uqs?{7;4ZEZRms$g5V$C9>&j=Tb`nL0YcNGRAJqe8pJ2gGe~$DR zNizGt&wxJZ792}xJ@T1s(=N9Ay&uRiM8tXWjxZjRmmn9hkOInk%Lqd*xdf226nKJcVI}=?*-HoQa~^p)ovFosGSv^zKMKES zEY{%3!Q;)?qwI=d{Ph)lEW|+`+ck{_4c13tsCgG&qvT=N>KDT zNkoqpY%Wi89LcLXuy-a1rqNv(09N#-oqI=6JNfXakSb_kX34Ft&z+$>|UEJ z%3b!VmD`G25p@@%a2NOBA2kN|AtFFnMSEPb<$DW6lTQ(yq(Yk*WaO((B9c9={7qzh zlHGA}(K-lLX5Ch&+m6Ww3OcZRSR)}{w}j?-e*b85X8i0nfjOd;aU`@E;^5cY0C!MR zc#Vr%N#sbcU%!K;4eo#4bPjW=6m^E3IaGB6*@xQ?TD+*UIn~B(@c!*`&oHmn``75f zc=a3nbK(2Zut1Bt8x9)6^S}nI>X_adR%IIU0cG{if_-V_z3IoV0P|&pC(PLG{tGOE zZjU&AGN}GPl=Tqh?(jcB2ha6mX(gA3{bZU1Rs!3GeuHnjD3^j@ENFu_*OlmC887I6 zdrF1c2C4N6O0?IXnR*QUw|(nBi{}GacdnN1LKqFB$bOf$rK1mX#yzMmI9?E{cyHOT zx_$xQWMH5gu&t<8VL-++Fb{o>$^)eXcIr03ZHcWBu~j%8JDTl1%P>8Ku)Q@WJq2;2 zy{gMWj#btpfX~nGMV4WIi9TmgVS$ZxX>J0mvuexj)6z7KkqyOQ45z%e{Ow~;etLB# z^Qe1OuJ|W8CU~^N%U=q%)IMoSd*vthw%;J7wZYPk*Sh-GU5i8t5?H-~@Aj7YifCy& z8ZvI`_>Cnos5$~j2aJtktl|Y&d5*pvv|jL`Mq+K#|y`?d3+ z>d12;U&>3`)jp7!L3fKovI_ElUJ8M~$C@Oaf94fzz@7}57oR+8t#|x)%t}TA0)99g zDw?lHM0cFsBM?~qgao5iDyUw$1@ErrV}24+X6XG@T;&mRPw-duG^hX-P&(jgkkz{1 z(Gm9LUZH0}T*Z}+mi>OS?Z3S$X}>!$$|})p)QwO= zF9SYM<8=pl8vBi`5B&d5pyKb4|GS+)pUovUmJ>z!jb?4~2O@yJg7hR(4Q*x@oA`ca ziNm`AgL81q51bU*@;7XG-e42JQ&uL3nwV_N=Q*^d!modbO`+|pG9m>?uH1q1%4pnWvBcN`B&i| z=FqwdpH~MN+o?|(qHC9J{)u=H;rwtb8HPrsajA!^aaJtIOjwO1x!X3!Sz*&eCSU(W zQaiOgiLJW&-O+SP-WWe!x@v)dHLpCa6zuHX3hsf$oL&bEn{pn&U*>xyC$+Q{IC#I} z5#_>~LUyK~6?Jawl{P3(nY`CKs?if=>YwY-yHcrbE~&K4F@~98$TtuN4es4ua*w9Y zBt|*6lF&Iy{v#D1FMG+hA)K1Mk;us9dhIA zfbmlNz$<$KTva^wWrQ$RvCP8K<-4pLgd#PMxH0*0LTK}ic8RymgN{Y=ou*c#=r{iB zxIhH6XNwtl$Wzel(=?*~w^3V80oE{+*ArdP-lU0{;Kh?^VR+LV@Cst|-6L!MxQv)# ziNCRWe>;nfn+cs;jep?{vs{U+CCza(x5>ZD4$VF83ILOc26ie}Yuj50-zZ2F|Im%mu&5A-`LUY6Yr#dv&G?qVzntQ z{z3C$vaYf2v-R_3ho^xjwMo;Zpxg*cqQ{t)$^Ui<6}d!pnaGTKsTBGGAX+8>SH_3^ ztw-gz?_zLZV~K4Wa`jcJz&H!r^=NE0+$gbPiX{)fJ-{~m32Uppntk=a3^c5UWHrPU8eU6=qK3lUqi^cdeAeQ?khP=Tixiv3Eg z0zUEsKVtXJf$tyjyQp$V4UJ7Ekl2@5%7)DoJwjwK<-A&N92o0>NAM03VdMvsxsY3i z6)wNUfqA)mi&OFPK+b`WZ2E0^cdF zd@;CUyDuV!PAU;(v1uIAcd%xZ+_zCnNn*sRDQ0kyBY25Xr#I4C{sbG5CGiFjn=|mA zq@@52?+q=MX+TbWBzV21ajL}!p94n7C1avWKwaZ!&%{z-5%L+>CUOybOVX{WkAALQ zym3F6Llx%vi6LGpOY$70A=5uA3j5a0{@cw#41@$o>+E8L$Y7bf(N@R1b+ zpt-CAh6kpwc49JVrfyVhGkdvrbpJlE=0NU*WSFBm`+2Ed=^fXy1K$UyOk$$>gG#TRLuCJzkpKs9}EN)xe)}az{YXwJnR+MEvfQ*b{zPe;T*Po zq#Uid6?_Uf3NlcTlr*m_#;2q zbmI{AOg&t#VqgCHB!(adD(>pS2Vqzzi{X5Bo30|omN@;GO-jyIi)-CJ$UJm_&n*`p z(uUS%3|0b%C}SwoIsGDe5K�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 z%0D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 RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/examples/TextureAtlasExample/Program.cs b/examples/TextureAtlasExample/Program.cs new file mode 100644 index 00000000..5961d9d9 --- /dev/null +++ b/examples/TextureAtlasExample/Program.cs @@ -0,0 +1,3 @@ + +using var game = new TextureAtlasExample.Game1(); +game.Run(); diff --git a/examples/TextureAtlasExample/TextureAtlasExample.csproj b/examples/TextureAtlasExample/TextureAtlasExample.csproj new file mode 100644 index 00000000..40822a25 --- /dev/null +++ b/examples/TextureAtlasExample/TextureAtlasExample.csproj @@ -0,0 +1,34 @@ + + + WinExe + net6.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/examples/TextureAtlasExample/app.manifest b/examples/TextureAtlasExample/app.manifest new file mode 100644 index 00000000..408105c2 --- /dev/null +++ b/examples/TextureAtlasExample/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + diff --git a/examples/TextureAtlasExample/character_robot.aseprite b/examples/TextureAtlasExample/character_robot.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..f235a0fef12b25d83f31e6c5f0baa430b795c284 GIT binary patch literal 156758 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�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 z%0D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 RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/examples/TilemapExample/Program.cs b/examples/TilemapExample/Program.cs new file mode 100644 index 00000000..551d8a93 --- /dev/null +++ b/examples/TilemapExample/Program.cs @@ -0,0 +1,3 @@ + +using var game = new TilemapExample.Game1(); +game.Run(); diff --git a/examples/TilemapExample/TilemapExample.csproj b/examples/TilemapExample/TilemapExample.csproj new file mode 100644 index 00000000..df0fd772 --- /dev/null +++ b/examples/TilemapExample/TilemapExample.csproj @@ -0,0 +1,34 @@ + + + WinExe + net6.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/examples/TilemapExample/app.manifest b/examples/TilemapExample/app.manifest new file mode 100644 index 00000000..14fbec29 --- /dev/null +++ b/examples/TilemapExample/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + diff --git a/examples/TilemapExample/townmap.aseprite b/examples/TilemapExample/townmap.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..a7d176b32ce105047c89ea19c098b4ec0751276e GIT binary patch literal 7355 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 Zva*%Q_$!HwCZ{ybC#Gj^{(rRYzX3)_^|b&1 literal 0 HcmV?d00001 diff --git a/examples/TilesetExample/.config/dotnet-tools.json b/examples/TilesetExample/.config/dotnet-tools.json new file mode 100644 index 00000000..efabe22e --- /dev/null +++ b/examples/TilesetExample/.config/dotnet-tools.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.1.303", + "commands": [ + "mgcb" + ] + }, + "dotnet-mgcb-editor": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor" + ] + }, + "dotnet-mgcb-editor-linux": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-linux" + ] + }, + "dotnet-mgcb-editor-windows": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-windows" + ] + }, + "dotnet-mgcb-editor-mac": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-mac" + ] + } + } +} \ No newline at end of file diff --git a/examples/TilesetExample/Content/Content.mgcb b/examples/TilesetExample/Content/Content.mgcb new file mode 100644 index 00000000..ddc4c367 --- /dev/null +++ b/examples/TilesetExample/Content/Content.mgcb @@ -0,0 +1,15 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + diff --git a/examples/TilesetExample/Game1.cs b/examples/TilesetExample/Game1.cs new file mode 100644 index 00000000..1da87e8a --- /dev/null +++ b/examples/TilesetExample/Game1.cs @@ -0,0 +1,82 @@ +using System.IO; +using AsepriteDotNet.Aseprite; +using AsepriteDotNet.IO; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using MonoGame.Aseprite; + +namespace TilesetExample; + +public class Game1 : Game +{ + private GraphicsDeviceManager _graphics; + private SpriteBatch _spriteBatch; + + private Tileset _tileset; + private TextureRegion _greenBushTile; + private TextureRegion _yellowBushTile; + private TextureRegion _mushroomsTile; + + + + public Game1() + { + _graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + IsMouseVisible = true; + } + + protected override void LoadContent() + { + _spriteBatch = new SpriteBatch(GraphicsDevice); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Load the file. In this example, we're not using the MGCB/Content Pipeline and have the Aseprite file set as + /// a file in our project that is copied the output directory. Because of this, we can use the + /// TitleContainer.OpenStream to get a stream to the file and use that to load it. + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + AsepriteFile aseFile; + using (Stream stream = TitleContainer.OpenStream("townmap.aseprite")) + { + aseFile = AsepriteFileLoader.FromStream("townmap", stream); + } + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Create a tileset from the file based on the index of the tileset + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _tileset = aseFile.CreateTileset(GraphicsDevice, 0); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Create texture regions from the tiles in the tileset. You just give it the index of the tile in the + /// tileset. You can use the GetTile() method of the this[] indexor method + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _yellowBushTile = _tileset.GetTile(28); + _greenBushTile = _tileset[29]; + _mushroomsTile = _tileset[30]; + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + _spriteBatch.Begin(samplerState: SamplerState.PointClamp); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Spritebatch extension are provided to draw the tiles + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _spriteBatch.Draw(_greenBushTile, new Vector2(10, 10), Color.White); + _spriteBatch.Draw(_yellowBushTile, new Vector2(10 + _tileset.TileWidth, 10), Color.White); + _spriteBatch.Draw(_mushroomsTile, new Vector2(10 + _tileset.TileWidth * 2, 10), Color.White); + + _spriteBatch.End(); + } +} diff --git a/examples/TilesetExample/Icon.bmp b/examples/TilesetExample/Icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b481653e241818d2894e4ef33234eaff9aad701 GIT binary patch literal 262282 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 RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/examples/TilesetExample/Program.cs b/examples/TilesetExample/Program.cs new file mode 100644 index 00000000..8a225c19 --- /dev/null +++ b/examples/TilesetExample/Program.cs @@ -0,0 +1,3 @@ + +using var game = new TilesetExample.Game1(); +game.Run(); diff --git a/examples/TilesetExample/TilesetExample.csproj b/examples/TilesetExample/TilesetExample.csproj new file mode 100644 index 00000000..df0fd772 --- /dev/null +++ b/examples/TilesetExample/TilesetExample.csproj @@ -0,0 +1,34 @@ + + + WinExe + net6.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/examples/TilesetExample/app.manifest b/examples/TilesetExample/app.manifest new file mode 100644 index 00000000..cba8c6d2 --- /dev/null +++ b/examples/TilesetExample/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + diff --git a/examples/TilesetExample/townmap.aseprite b/examples/TilesetExample/townmap.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..a7d176b32ce105047c89ea19c098b4ec0751276e GIT binary patch literal 7355 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 Zva*%Q_$!HwCZ{ybC#Gj^{(rRYzX3)_^|b&1 literal 0 HcmV?d00001 diff --git a/source/MonoGame.Aseprite.Content.Pipeline/AsepriteFileProcessResult.cs b/source/MonoGame.Aseprite.Content.Pipeline/AsepriteFileProcessResult.cs index 47cefe86..9d7d1fa9 100644 --- a/source/MonoGame.Aseprite.Content.Pipeline/AsepriteFileProcessResult.cs +++ b/source/MonoGame.Aseprite.Content.Pipeline/AsepriteFileProcessResult.cs @@ -24,4 +24,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE namespace MonoGame.Aseprite.Content.Pipeline; -internal record AsepriteFileProcessResult(string Name, byte[] Data); \ No newline at end of file +internal record AsepriteFileProcessResult(string Name, bool PremultiplyAlpha, byte[] Data); \ No newline at end of file diff --git a/source/MonoGame.Aseprite.Content.Pipeline/MonoGame.Aseprite.Content.Pipeline.csproj b/source/MonoGame.Aseprite.Content.Pipeline/MonoGame.Aseprite.Content.Pipeline.csproj index 14ec1e35..7e542576 100644 --- a/source/MonoGame.Aseprite.Content.Pipeline/MonoGame.Aseprite.Content.Pipeline.csproj +++ b/source/MonoGame.Aseprite.Content.Pipeline/MonoGame.Aseprite.Content.Pipeline.csproj @@ -27,6 +27,6 @@ - + \ No newline at end of file diff --git a/source/MonoGame.Aseprite.Content.Pipeline/Processors/AsepriteFileContentProcessor.cs b/source/MonoGame.Aseprite.Content.Pipeline/Processors/AsepriteFileContentProcessor.cs index a63537aa..b3277030 100644 --- a/source/MonoGame.Aseprite.Content.Pipeline/Processors/AsepriteFileContentProcessor.cs +++ b/source/MonoGame.Aseprite.Content.Pipeline/Processors/AsepriteFileContentProcessor.cs @@ -22,6 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- */ +using System.ComponentModel; using Microsoft.Xna.Framework.Content.Pipeline; namespace MonoGame.Aseprite.Content.Pipeline.Processors; @@ -29,11 +30,14 @@ namespace MonoGame.Aseprite.Content.Pipeline.Processors; [ContentProcessor(DisplayName = "Aseprite File Processor - MonoGame.Aseprite")] internal sealed class AsepriteFileContentProcessor : ContentProcessor { + [DisplayName("Premultiply Alpha")] + public bool PremultiplyAlpha { get; set; } = true; + public override AsepriteFileProcessResult Process(AsepriteFileImportResult content, ContentProcessorContext context) { string name = Path.GetFileNameWithoutExtension(content.FilePath); byte[] data = File.ReadAllBytes(content.FilePath); - AsepriteFileProcessResult result = new AsepriteFileProcessResult(name, data); + AsepriteFileProcessResult result = new AsepriteFileProcessResult(name, PremultiplyAlpha, data); return result; } } diff --git a/source/MonoGame.Aseprite.Content.Pipeline/Writers/AsepriteFileContentTypeWriter.cs b/source/MonoGame.Aseprite.Content.Pipeline/Writers/AsepriteFileContentTypeWriter.cs index c2024685..802753ee 100644 --- a/source/MonoGame.Aseprite.Content.Pipeline/Writers/AsepriteFileContentTypeWriter.cs +++ b/source/MonoGame.Aseprite.Content.Pipeline/Writers/AsepriteFileContentTypeWriter.cs @@ -33,6 +33,7 @@ internal sealed class AsepriteFileContentTypeWriter : ContentTypeWriter -/// Defines the contents of an imported aseprite file. -/// -public sealed class AsepriteFile -{ - private Color[] _palette = Array.Empty(); - private AsepriteFrame[] _frames; - private AsepriteLayer[] _layers; - private AsepriteTag[] _tags; - private AsepriteSlice[] _slices; - private AsepriteTileset[] _tilesets; - - ///

- /// if, when referencing frames by index, the first frame is index 0; otherwise - /// if the first frame is index 1. - /// - public bool ZeroIndexedFrames = true; - - /// - /// Gets a read-only span of all elements in this . - /// - /// - /// The ordering of elements is not affected by . - /// - public ReadOnlySpan Frames => _frames; - - /// - /// Gets the total number of elements in this . - /// - public int FrameCount => _frames.Length; - - /// - /// Gets a read-only span of all elements in this . - /// Order of elements if from bottom-to-top. - /// - public ReadOnlySpan Layers => _layers; - - /// - /// Gets the total number of elements in this . - /// - public int LayerCount => _layers.Length; - - /// - /// Gets a read-only span of all elements in this . - /// - public ReadOnlySpan Tags => _tags; - - /// - /// Gets the total number of elements in this . - /// - public int TagCount => _tags.Length; - - /// - /// Gets a read-only span of all elements in this . - /// - public ReadOnlySpan Slices => _slices; - - /// - /// Gets the total number of elements in this . - /// - public int SliceCount => _slices.Length; - - /// - /// Gets a read-only span of all elements in this . - /// - public ReadOnlySpan Tilesets => _tilesets; - - /// - /// Gets the total number of elements in this . - /// - public int TilesetCount => _tilesets.Length; - - /// - /// Gets a read-only span of the color values that represent the palette of this . - /// - public ReadOnlySpan Palette => _palette; - - /// - /// Gets the total number of color values in this palette of this . - /// - public int PaletteCount => _palette.Length; - - /// - /// Gets the name assigned to this . - /// - public string Name { get; } - - /// - /// Gets the width, in pixels, of the canvas. - /// - public int CanvasWidth { get; } - - /// - /// Gets the height, in pixels, of the canvas. - /// - public int CanvasHeight { get; } - - /// - /// Gets the that was set for the sprite element in aseprite. - /// - public AsepriteUserData UserData { get; } - - internal AsepriteFile(string name, int width, int height, Color[] palette, AsepriteFrame[] frames, AsepriteLayer[] layers, AsepriteTag[] tags, AsepriteSlice[] slices, AsepriteTileset[] tilesets, AsepriteUserData userData) - { - Name = name; - CanvasWidth = width; - CanvasHeight = height; - _palette = palette; - _frames = frames; - _layers = layers; - _tags = tags; - _slices = slices; - _tilesets = tilesets; - UserData = userData; - } - - /// - /// Gets the at the specified index in this . - /// - /// - /// The index of the to locate. - /// - /// - /// You can specify non-zero indexed frames using - /// - /// - /// - /// The located. - /// - /// - /// Thrown if the index specified is less than zero or is greater than or equal to the total number of - /// elements in this . - /// - public AsepriteFrame GetFrame(int frameIndex) - { - int index = ZeroIndexedFrames ? frameIndex : frameIndex - 1; - - if (index < 0 || index >= _frames.Length) - { - ArgumentOutOfRangeException ex; - if (ZeroIndexedFrames) - { - ex = new(nameof(frameIndex), $"{nameof(frameIndex)} cannot be less than zero or greater than or equal to the total number of frames in this aseprite file."); - } - else - { - ex = new(nameof(frameIndex), $"{nameof(frameIndex)} cannot be less than one or greater than the total number of frames in this aseprite file when '{nameof(ZeroIndexedFrames)}' is 'false'."); - } - ex.Data.Add("TotalFrames", _frames.Length); - ex.Data.Add("ZeroIndexed", ZeroIndexedFrames); - throw ex; - } - - return _frames[index]; - } - - /// - /// Gets the at the specified index from this . - /// - /// - /// The index of the to locate - /// - /// - /// When this method returns , contains the frame located; otherwise, - /// . - /// - /// - /// if the was located; otherwise, . - /// This method returns if this frame index specified is less than zero or is greater - /// than or equal to the total number of elements in this - /// . - /// - public bool TryGetFrame(int frameIndex, [NotNullWhen(true)] out AsepriteFrame? located) - { - int index = ZeroIndexedFrames ? frameIndex : frameIndex - 1; - located = default; - - if (index < 0 || index >= _frames.Length) - { - return false; - } - - located = _frames[index]; - return located is not null; - } - - /// - /// Gets the element at the specified index in this . - /// - /// - /// The index of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if the index specified is less than zero or is greater than or equal to the total number of - /// elements in this . - /// - public AsepriteLayer GetLayer(int layerIndex) - { - if (layerIndex < 0 || layerIndex >= LayerCount) - { - throw new ArgumentOutOfRangeException(); - } - - return _layers[layerIndex]; - } - - /// - /// Gets the element with the specified name from this . - /// - /// - /// The name of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if this does not contain an element with the - /// specified name. - /// - public AsepriteLayer GetLayer(string layerName) - { - List layersFound = new(); - - for (int i = 0; i < _layers.Length; i++) - { - AsepriteLayer aseLayer = _layers[i]; - layersFound.Add($"'{aseLayer.Name}'"); - - if (aseLayer.Name == layerName) - { - return aseLayer; - } - } - - InvalidOperationException ex = new($"No aseprite layer element found with the name '{layerName}' in this aseprite file."); - ex.Data.Add(nameof(layersFound), layersFound); - throw ex; - } - - /// - /// Gets the element at the specified index from this . - /// - /// - /// The index of the element to locate - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// if the element was located; otherwise, - /// . This method returns if this index specified is less than - /// zero or is greater than or equal to the total number of elements in this - /// . - /// - public bool TryGetLayer(int layerIndex, [NotNullWhen(true)] out AsepriteLayer? located) - { - located = default; - - if (layerIndex < 0 || layerIndex >= LayerCount) - { - return false; - } - - located = _layers[layerIndex]; - return located is not null; - } - - /// - /// Gets the element with the specified name from this . - /// - /// - /// The name of the element to locate. - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// - /// if the element was located; otherwise, - /// . This method returns if this - /// does not contain an element with the specified name. - /// - public bool TryGetLayer(string layerName, [NotNullWhen(true)] out AsepriteLayer? located) - { - located = default; - - for (int i = 0; i < _layers.Length; i++) - { - if (_layers[i].Name == layerName) - { - located = _layers[i]; - break; - } - } - - return located is not null; - } - - /// - /// Gets the element at the specified index in this . - /// - /// - /// The index of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if the index specified is less than zero or is greater than or equal to the total number of - /// elements in this . - /// - public AsepriteTag GetTag(int tagIndex) - { - if (tagIndex < 0 || tagIndex >= _tags.Length) - { - ArgumentOutOfRangeException ex = new(nameof(tagIndex), $"{nameof(tagIndex)} cannot be less than zero or greater than or equal to the total number of tags in this aseprite file."); - ex.Data.Add("TotalTags", _tags.Length); - throw ex; - } - - return _tags[tagIndex]; - } - - /// - /// Gets the element with the specified name from this . - /// - /// - /// The name of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if this does not contain an element with the - /// specified name. - /// - public AsepriteTag GetTag(string tagName) - { - List tagsFound = new(); - - for (int i = 0; i < _tags.Length; i++) - { - AsepriteTag aseTag = _tags[i]; - tagsFound.Add($"'{aseTag.Name}'"); - - if (aseTag.Name == tagName) - { - return aseTag; - } - } - - InvalidOperationException ex = new($"No aseprite tag element found with the name '{tagName}' in this aseprite file."); - ex.Data.Add(nameof(tagsFound), tagsFound); - throw ex; - } - - /// - /// Gets the element at the specified index from this . - /// - /// - /// The index of the element to locate - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// if the element was located; otherwise, - /// . This method returns if this index specified is less than - /// zero or is greater than or equal to the total number of elements in this - /// . - /// - public bool TryGetTag(int tagIndex, [NotNullWhen(true)] out AsepriteTag? located) - { - located = default; - - if (tagIndex < 0 || tagIndex >= _tags.Length) - { - return false; - } - - located = _tags[tagIndex]; - return located is not null; - } - - /// - /// Gets the element with the specified name from this . - /// - /// - /// The name of the element to locate. - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// - /// if the element was located; otherwise, - /// . This method returns if this - /// does not contain an element with the specified name. - /// - public bool TryGetTag(string tagName, [NotNullWhen(true)] out AsepriteTag? located) - { - located = default; - - for (int i = 0; i < _tags.Length; i++) - { - if (_tags[i].Name == tagName) - { - located = _tags[i]; - break; - } - } - - return located is not null; - } - - /// - /// Gets the element at the specified index in this . - /// - /// - /// The index of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if the index specified is less than zero or is greater than or equal to the total number of - /// elements in this . - /// - public AsepriteSlice GetSlice(int sliceIndex) - { - if (sliceIndex < 0 || sliceIndex >= _slices.Length) - { - ArgumentOutOfRangeException ex = new(nameof(sliceIndex), $"{nameof(sliceIndex)} cannot be less than zero or greater than or equal to the total number of slices in this aseprite file."); - ex.Data.Add(nameof(sliceIndex), sliceIndex); - ex.Data.Add(nameof(SliceCount), SliceCount); - throw ex; - } - - return _slices[sliceIndex]; - } - - /// - /// Gets the with the specified name from this . - /// - /// - /// The name of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if this does not contain a element with the - /// specified name. - /// - public AsepriteSlice GetSlice(string sliceName) - { - List slicesFound = new(); - - for (int i = 0; i < _slices.Length; i++) - { - AsepriteSlice aseSlice = _slices[i]; - slicesFound.Add($"'{aseSlice.Name}'"); - - if (aseSlice.Name == sliceName) - { - return aseSlice; - } - } - - InvalidOperationException ex = new($"This aseprite file does not contain an aseprite slice element with the name '{sliceName}'."); - ex.Data.Add(nameof(sliceName), sliceName); - ex.Data.Add(nameof(slicesFound), slicesFound); - throw ex; - } - - /// - /// Gets the element at the specified index from this . - /// - /// - /// The index of the element to locate. - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// - /// if the element was located; otherwise, - /// . This method returns if this index specified is less than - /// zero or is greater than or equal to the total number of elements in this - /// . - /// - public bool TryGetSlice(int sliceIndex, [NotNullWhen(true)] out AsepriteSlice? located) - { - located = default; - - if (sliceIndex < 0 || sliceIndex >= _slices.Length) - { - return false; - } - - located = _slices[sliceIndex]; - return located is not null; - } - - /// - /// Gets the element with the specified name from this . - /// - /// - /// The name of the element to locate. - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// - /// if the element was located; otherwise, - /// . This method returns if this - /// does not contain an element with the specified name. - /// - public bool TryGetSlice(string sliceName, [NotNullWhen(true)] out AsepriteSlice? located) - { - located = default; - - for (int i = 0; i < _slices.Length; i++) - { - if (_slices[i].Name == sliceName) - { - located = _slices[i]; - break; - } - } - - return located is not null; - } - - /// - /// Gets the element at the specified index in this . - /// - /// - /// The index of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if the index specified is less than zero or is greater than or equal to the total number of - /// elements in this . - /// - public AsepriteTileset GetTileset(int tilesetIndex) - { - if (tilesetIndex < 0 || tilesetIndex >= _tilesets.Length) - { - ArgumentOutOfRangeException ex = new(nameof(tilesetIndex), $"{nameof(tilesetIndex)} cannot be less than zero or greater than or equal to the total number of tilesets in this aseprite file."); - ex.Data.Add("TotalTilesets", _tilesets.Length); - throw ex; - } - - return _tilesets[tilesetIndex]; - } - - /// - /// Gets the element with the specified name from this . - /// - /// - /// The name of the element to locate. - /// - /// - /// The element located. - /// - /// - /// Thrown if this does not contain a element with the - /// specified name. - /// - public AsepriteTileset GetTileset(string tilesetName) - { - List tilesetsFound = new(); - - for (int i = 0; i < _tilesets.Length; i++) - { - AsepriteTileset aseTileset = _tilesets[i]; - tilesetsFound.Add($"'{aseTileset.Name}'"); - - if (aseTileset.Name == tilesetName) - { - return aseTileset; - } - } - - InvalidOperationException ex = new($"Unable to locate a tileset with the name '{tilesetName}' in this aseprite file."); - ex.Data.Add(nameof(tilesetsFound), tilesetsFound); - throw ex; - } - - /// - /// Gets the element at the specified index from this . - /// - /// - /// The index of the element to locate. - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// - /// if the element was located; otherwise, - /// . This method returns if this index specified is less than - /// zero or is greater than or equal to the total number of elements in this - /// . - /// - public bool TryGetTileset(int tilesetIndex, [NotNullWhen(true)] out AsepriteTileset? located) - { - located = default; - - if (tilesetIndex < 0 || tilesetIndex >= _tilesets.Length) - { - return false; - } - - located = _tilesets[tilesetIndex]; - return located is not null; - } - - /// - /// Gets the element with the specified name from this - /// . - /// - /// - /// The name of the element to locate. - /// - /// - /// When this method returns , contains the element located; - /// otherwise, . - /// - /// - /// if the element was located; otherwise, - /// . This method returns if this - /// does not contain a element with the specified name. - /// - public bool TryGetTileset(string tilesetName, [NotNullWhen(true)] out AsepriteTileset? located) - { - located = default; - - for (int i = 0; i < _tilesets.Length; i++) - { - if (_tilesets[i].Name == tilesetName) - { - located = _tilesets[i]; - break; - } - } - - return located is not null; - } - - /// - /// Loads the contents of the aseprite file at the specified path. The result is a new instance of the - /// class containing the contents of the file read. - /// - /// - /// The path and name of the aseprite file to load. - /// - /// - /// A new instance of the class create by this method. - /// - /// - /// Thrown if no file is located at the specified path. - /// - /// - /// Thrown if an error occurs during the reading of the . The exception message will - /// contain the cause of the exception. - /// - public static AsepriteFile Load(string path) => AsepriteFileReader.ReadFile(path); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteBlendMode.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteBlendMode.cs deleted file mode 100644 index b3014197..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteBlendMode.cs +++ /dev/null @@ -1,171 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines te blend mode values used by aseprite to determine the mode to use when blending two color values. -/// -public enum AsepriteBlendMode -{ - /// - /// Normal blend mode is the standard blend mode that takes the top layer alone without mixing any color from - /// the layer beneath it. - /// f(a,b) = b - /// - Normal = 0, - - /// - /// Multiply blend mode that takes the RGB component values of each pixel from the top layer and multiplies them - /// with the RGB component values of the corresponding pixel from the bottom layer. - /// f(a,b) = ab - /// - Multiply = 1, - - /// - /// Screen blend mode takes the RGB component values of each pixel from the top and bottom layer and inverts - /// them, then multiples the RGB component values of each pixel from the top layer with the RGB component values - /// of the corresponding pixel from the bottom layer, then the RGB component value of each resulting pixel is - /// inverted again. - /// f(a,b) = 1-(1-a)(1-b) - /// - Screen = 2, - - /// - /// Overlay blend combines the Multiply and Screen blend modes based on the tonal value of the bottom layer. If - /// the bottom layer is darker than 50% gray, then the tonal values are multiplied; otherwise, they get - /// screened. In both cases the resulting value is doubled after. - /// f(a,b) = 2ab when a less than 0.5 - /// f(a,b) = 1-2(1-a)(1-b) when a equal to or greater than 0.5 - /// - Overlay = 3, - - /// - /// Darken blend retains the smallest of each RGB component for each corresponding pixel from the top and bottom - /// layer. - /// f((r1,g1,b1), (r2,b2,g2)) = [min(r1,r2), min(g1,g2), min(b1,b2)] - /// - Darken = 4, - - /// - /// Lighten blend retains the largest of each RGB component for each corresponding pixel from the top and bottom - /// layer. - /// f((r1,g1,b1), (r2,b2,g2)) = [max(r1,r2), max(g1,g2), max(b1,b2)] - /// - Lighten = 5, - - /// - /// Color Dodge blend divides each pixel from the bottom layer with the corresponding inverted pixel from the - /// top layer. - /// f(a,b) = a/(1-b) - /// - ColorDodge = 6, - - /// - /// Color Burn blend divides each inverted pixel from the bottom layer with the corresponding pixel from the top - /// layer, then inverts the resulting value. - /// f(a,b) = 1-(1-a)/b - /// - ColorBurn = 7, - - /// - /// Hard Light blend combines the Multiply and Screen blend modes based on the tonal value of the top layer. - /// If the top layer is darker than 50% gray, then the tonal values are multiplied; otherwise, they get - /// screened. In both cases the resulting value is doubled after. - /// f(a,b) = 2ab when b less than 0.5 - /// f(a,b) = 1-2(1-a)(1-b) when b equal to or greater than 0.5 - /// - HardLight = 8, - - /// - /// Soft Light blend modulates the tonal values of the bottom layer by the tonal values of the top layer. - /// f(a,b) = (2b-1)(a-a^2)+a when b is less than 0.5 - /// f(a,b) = (2b-1)(sqrt(a)-a)+a when b is equal to or greater than 0.5 - /// - SoftLight = 9, - - /// - /// Difference blend returns the absolute value in the difference between RGB component value of each pixel in - /// the top layer from the RGB component value in the corresponding pixel in the bottom layer. - /// f(a,b) = |a-b| - /// - Difference = 10, - - /// - /// Exclusion blend mode takes the sum of the RGB component values of each pixel in the top layer with the RGB - /// component value of each corresponding pixel in the bottom layer, then subtracts the doubled product of top - /// and bottom layer. - /// f(a,b) = a+b-2ab - /// - Exclusion = 11, - - /// - /// Hue blend mode preserves the luma and chroma of each pixel in the bottom layer and adopts the hue of the - /// corresponding pixel in the top layer. - /// f((Ha,Sa,La),(Hb,Sb,Lb)) = (Hb, Sa, La) - /// - Hue = 12, - - /// - /// Saturation blend mode preserves the luma and hue of each pixel in the bottom layer and adopts the chroma of - /// the corresponding pixel in the top layer. - /// f((Ha,Sa,La),(Hb,Sb,Lb)) = (Ha, Sb, La) - /// - Saturation = 13, - - /// - /// The color blend mode preserves the luma of each pixel in the bottom layer and adopts the hue and chorma of - /// corresponding pixel in the top layer. - /// f((Ha,Sa,La),(Hb,Sb,Lb)) = (Hb, Sb, La) - /// - Color = 14, - - /// - /// Luminosity blend mode preserves the hue and chroma of each pixel in the bottom layer and adopts the luma of - /// the corresponding pixel in then top layer. - /// f((Ha,Sa,La),(Hb,Sb,Lb)) = (Ha, Sa, Lb) - /// - Luminosity = 15, - - /// - /// Addition blend mode adds the RGB component values of each pixel from the top layer with the RGB component - /// values of each corresponding pixel in the bottom layer. - /// f(a,b) = a + b - /// - Addition = 16, - - /// - /// Subtract blend mode subtracts the RGB component values of each pixel from the top layer from the RGB - /// component values of each corresponding pixel in the bottom layer. - /// f(a,b) = a - b - /// - Subtract = 17, - - /// - /// Divide blend mode divides the RGB component values of each pixel from the bottom layer by the RGB component - /// values of each corresponding pixel from the top layer. - /// f(a,b) = a/b - /// - Divide = 18 -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteCel.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteCel.cs deleted file mode 100644 index 4300df59..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteCel.cs +++ /dev/null @@ -1,79 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a single cel in an frame. -/// -public abstract class AsepriteCel -{ - /// - /// Gets a reference to the this is on. - /// - public AsepriteLayer Layer { get; } - - /// - /// Gets the x- and y-coordinate location of this relative to the bounds of the - /// it is in. - /// - public Point Position { get; } - - /// - /// Gets the opacity level of this . - /// - public int Opacity { get; } - - /// - /// Gets the custom that was set for this in aseprite. - /// - public AsepriteUserData UserData { get; } = new(); - - internal AsepriteCel(AsepriteLayer layer, Point position, int opacity) => - (Layer, Position, Opacity) = (layer, position, opacity); - - /// - /// Returns the this is on as the specified type. - /// - /// - /// The type to return as. - /// - /// - /// The this is on as the specified type. - /// - /// - /// Thrown if the this is on is not of the type specified. - /// - public T LayerAs() where T : AsepriteLayer - { - if (Layer is T asT) - { - return asT; - } - - throw new InvalidOperationException($"The layer of this cel is not of type '{typeof(T)}'. It is of type '{Layer.GetType()}'"); - } -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFileBuilder.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFileBuilder.cs deleted file mode 100644 index 42f88504..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFileBuilder.cs +++ /dev/null @@ -1,302 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using System.IO.Compression; -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -internal class AsepriteFileBuilder -{ - private Color[] _palette = Array.Empty(); - private byte _transparentIndex = new(); - private ushort _colorDepth; - private bool _layerOpacityValid; - private ushort _frameWidth; - private ushort _frameHeight; - private List _frames = new(); - private List _layers = new(); - private List _tags = new(); - private List _slices = new(); - private List _tilesets = new(); - private List _nextFrameCels = new(); - private string _name; - private AsepriteUserData _spriteUserData = new(); - - internal AsepriteFileBuilder(string name) => _name = name; - - internal void SetFrameWidth(ushort width) => _frameWidth = width; - internal void SetFrameHeight(ushort height) => _frameHeight = height; - internal void SetColorDepth(ushort depth) => _colorDepth = depth; - internal void SetTransparentIndex(byte index) - { - if (_colorDepth != 8) - { - // Non-zero transparent index is only valid when color depth is 8 (Indexed mode) - _transparentIndex = 0; - } - else - { - _transparentIndex = index; - } - } - internal void SetLayerOpacityValid(bool isValid) => _layerOpacityValid = isValid; - - internal void AddFrame(int duration) - { - AsepriteFrame frame = new($"{_name} {_frames.Count}", _frameWidth, _frameHeight, duration, _nextFrameCels.ToArray()); - _nextFrameCels.Clear(); - _frames.Add(frame); - } - - internal void AddLayer(AsepriteLayerFlags flags, ushort blend, byte opacity, string name) - { - if (!_layerOpacityValid) - { - opacity = 255; - } - - AsepriteLayer layer = new(flags, (AsepriteBlendMode)blend, opacity, name); - _layers.Add(layer); - } - - internal void AddTilemapLayer(uint tilesetIndex, AsepriteLayerFlags flags, ushort blend, byte opacity, string name) - { - AsepriteTileset tileset = _tilesets[(int)tilesetIndex]; - AsepriteTilemapLayer layer = new(tileset, /*(int)tilesetIndex,*/ flags, (AsepriteBlendMode)blend, opacity, name); - _layers.Add(layer); - } - - internal void AddRawImageCel(short x, short y, ushort width, ushort height, ushort layerIndex, byte opacity, ReadOnlySpan data) - { - Color[] pixels = new Color[width * height]; - ToColor(data, pixels); - AsepriteLayer layer = _layers[layerIndex]; - Point position = new(x, y); - AsepriteImageCel cel = new(width, height, pixels, layer, position, opacity); - _nextFrameCels.Add(cel); - } - - internal void AddLinkedCel(ushort frameIndex) - { - AsepriteFrame frame = _frames[frameIndex]; - // If the first cel is a linked cel, then we haven't added cels yet - // so the " - 1" will result in -1. So we only do so when the count is - // greater than 0 - AsepriteCel linkedCel = frame.Cels[_nextFrameCels.Count > 0 ? _nextFrameCels.Count - 1 : 0]; - _nextFrameCels.Add(linkedCel); - } - - internal void AddCompressedImageCel(short x, short y, ushort width, ushort height, ushort layerIndex, byte opacity, byte[] compressedData) - { - Color[] pixels = new Color[width * height]; - byte[] decompressedData = Decompress(compressedData); - AddRawImageCel(x, y, width, height, layerIndex, opacity, decompressedData); - } - - internal void AddCompressedTilemapCel(short x, short y, ushort columns, ushort rows, ushort layerIndex, byte opacity, byte[] compressedData, ushort bitsPerTile, uint idBitmask, uint xFlipBitmask, uint yFlipBitmask, uint dFlipBitmask) - { - Span decompressedData = Decompress(compressedData); - - int bytesPerTile = bitsPerTile / 8; - int tileCount = decompressedData.Length / bytesPerTile; - AsepriteTile[] tiles = new AsepriteTile[tileCount]; - - for (int i = 0, b = 0; i < tileCount; i++, b += bytesPerTile) - { - ReadOnlySpan dword = decompressedData.Slice(b, bytesPerTile); - uint value = BitConverter.ToUInt32(dword); - uint id = (value & idBitmask) >> 0; - bool xFlip = (value & xFlipBitmask) == xFlipBitmask; - bool yFlip = (value & yFlipBitmask) == yFlipBitmask; - bool dFlip = (value & dFlipBitmask) == dFlipBitmask; - AsepriteTile tile = new((int)id, xFlip, yFlip, dFlip); - tiles[i] = tile; - } - - AsepriteLayer layer = _layers[layerIndex]; - Point position = new(x, y); - AsepriteTilemapCel cel = new(columns, rows, tiles, layer, position, opacity); - _nextFrameCels.Add(cel); - } - - internal void AddTag(ushort from, ushort to, byte direction, ushort repeat, ReadOnlySpan rgb, string name) - { - Color color = Color.FromNonPremultiplied(rgb[0], rgb[1], rgb[2], (byte)255); - AsepriteTag tag = new(from, to, (AsepriteLoopDirection)direction, repeat, color, name); - _tags.Add(tag); - } - - internal void ResizePalette(uint newSize) - { - if (newSize > 0 && newSize > _palette.Length) - { - Color[] tmp = new Color[newSize]; - Array.Copy(_palette, tmp, _palette.Length); - _palette = tmp; - } - } - - internal void AddPaletteEntry(uint index, ReadOnlySpan rgba) - { - _palette[index] = Color.FromNonPremultiplied(rgba[0], rgba[1], rgba[2], rgba[3]); - } - - internal void AddSlice(string name, bool isNinePatch, bool hasPivot, AsepriteSliceKey[] keys) - { - AsepriteSlice slice = new(name, isNinePatch, hasPivot, keys); - _slices.Add(slice); - } - - internal void AddTileset(uint id, uint count, ushort tileWidth, ushort tileHeight, string name, byte[] compressedData) - { - byte[] decompressedData = Decompress(compressedData); - Color[] pixels = new Color[tileWidth * (tileHeight * count)]; - ToColor(decompressedData, pixels); - AsepriteTileset tileset = new((int)id, (int)count, tileWidth, tileHeight, name, pixels); - _tilesets.Add(tileset); - } - - internal void SetLastCelUserData(string? text, Color? color) - { - AsepriteCel cel = _nextFrameCels[_nextFrameCels.Count - 1]; - cel.UserData.Text = text; - cel.UserData.Color = color; - } - - internal void SetLastLayerUserData(string? text, Color? color) - { - AsepriteLayer layer = _layers[_layers.Count - 1]; - layer.UserData.Text = text; - layer.UserData.Color = color; - } - - internal void SetLastSliceUserData(string? text, Color? color) - { - AsepriteSlice slice = _slices[_slices.Count - 1]; - slice.UserData.Text = text; - slice.UserData.Color = color; - } - - internal void SetTagUserData(int index, string? text, Color? color) - { - AsepriteTag tag = _tags[index]; - tag.UserData.Text = text; - tag.UserData.Color = color; - } - - internal void SetSpriteUserData(string? text, Color? color) - { - _spriteUserData.Text = text; - _spriteUserData.Color = color; - } - - internal void SetTilesetUserData(string? text, Color? color) - { - AsepriteTileset tileset = _tilesets[_tilesets.Count - 1]; - tileset.UserData.Text = text; - tileset.UserData.Color = color; - } - - internal AsepriteFile Build() => - new(_name, _frameWidth, _frameHeight, _palette, _frames.ToArray(), _layers.ToArray(), _tags.ToArray(), _slices.ToArray(), _tilesets.ToArray(), _spriteUserData); - - private static byte[] Decompress(byte[] buffer) - { - using MemoryStream compressedStream = new(buffer); - - // First 2 bytes are the zlib header information, skip past them. - _ = compressedStream.ReadByte(); - _ = compressedStream.ReadByte(); - - using MemoryStream decompressedStream = new(); - using DeflateStream deflateStream = new(compressedStream, CompressionMode.Decompress); - deflateStream.CopyTo(decompressedStream); - return decompressedStream.ToArray(); - } - - private void ToColor(ReadOnlySpan source, Span dest) - { - const ushort INDEXED_COLOR_DEPTH = 8; - const ushort GRAYSCALE_COLOR_DEPTH = 16; - const ushort RGBA_COLOR_DEPTH = 32; - - int bytesPerPixel = _colorDepth / 8; - - switch (_colorDepth) - { - case INDEXED_COLOR_DEPTH: - IndexedToColor(source, dest); - break; - case GRAYSCALE_COLOR_DEPTH: - GrayscaleToColor(source, dest); - break; - case RGBA_COLOR_DEPTH: - RgbaToColor(source, dest); - break; - default: - throw new InvalidOperationException($"Invalid Color Depth '{_colorDepth}'"); - } - } - - private void IndexedToColor(ReadOnlySpan source, Span dest) - { - for (int i = 0; i < source.Length; i++) - { - int paletteIndex = source[i]; - - if (paletteIndex == _transparentIndex) - { - dest[i] = Color.FromNonPremultiplied(0, 0, 0, 0); - } - else - { - dest[i] = _palette[paletteIndex]; - } - } - } - - private void GrayscaleToColor(ReadOnlySpan source, Span dest) - { - for (int i = 0, b = 0; i < dest.Length; i++, b += 2) - { - byte rgb = source[b]; - byte a = source[b + 1]; - dest[i] = Color.FromNonPremultiplied(rgb, rgb, rgb, a); - } - } - - private void RgbaToColor(ReadOnlySpan source, Span dest) - { - for (int i = 0, b = 0; i < dest.Length; i++, b += 4) - { - byte red = source[b]; - byte green = source[b + 1]; - byte blue = source[b + 2]; - byte alpha = source[b + 3]; - dest[i] = Color.FromNonPremultiplied(red, green, blue, alpha); - } - } -} - diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFrame.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFrame.cs deleted file mode 100644 index d1697a83..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteFrame.cs +++ /dev/null @@ -1,170 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.Utilities; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a in an aseprite image. -/// -public sealed class AsepriteFrame -{ - private AsepriteCel[] _cels; - - /// - /// Gets a read-only span of the elements in this . - /// - public ReadOnlySpan Cels => _cels; - - /// - /// Gets the name assigned this . - /// - public string Name { get; } - - /// - /// Gets the width, in pixels, of this . - /// - public int Width { get; } - - /// - /// Gets the height, in pixels, of this . - /// - public int Height { get; } - - /// - /// Gets the duration, in milliseconds, of this . - /// - public int DurationInMilliseconds { get; } - - internal AsepriteFrame(string name, int width, int height, int duration, AsepriteCel[] cels) => - (Name, Width, Height, DurationInMilliseconds, _cels) = (name, width, height, duration, cels); - - /// - /// Flattens this by combining all elements into a single - /// image representation. - /// - /// - /// Indicates whether only elements on visible elements - /// should be included. - /// - /// - /// Indicates whether elements are on a marked as a - /// background layer should be included. - /// - /// - /// Indicates whether elements are on - /// elements should be included. - /// - /// - /// A new of color values that represent the image of this . - /// - public Color[] FlattenFrame(bool onlyVisibleLayers = true, bool includeBackgroundLayer = false, bool includeTilemapCel = true) - { - Color[] result = new Color[Width * Height]; - - for (int c = 0; c < _cels.Length; c++) - { - AsepriteCel cel = _cels[c]; - - // Are we only processing cels on visible layers? - if (onlyVisibleLayers && !cel.Layer.IsVisible) { continue; } - - // Are we processing cels on background layers? - if (cel.Layer.IsBackground && !includeBackgroundLayer) { continue; } - - if (cel is AsepriteImageCel imageCel) - { - BlendCel(backdrop: result, - source: imageCel.Pixels, - blendMode: imageCel.Layer.BlendMode, - celX: imageCel.Position.X, - celY: imageCel.Position.Y, - celWidth: imageCel.Width, - celOpacity: imageCel.Opacity, - layerOpacity: imageCel.Layer.Opacity); - } - else if (includeTilemapCel && cel is AsepriteTilemapCel tilemapCel) - { - BlendTilemapCel(backdrop: result, - cel: tilemapCel); - } - } - - return result; - } - - private void BlendTilemapCel(Span backdrop, AsepriteTilemapCel cel) - { - // Premultiply the opacity of the cel and the opacity of the layer - byte opacity = BlendFunctions.MUL_UN8(cel.Opacity, cel.Layer.Opacity); - - AsepriteTileset tileset = cel.Tileset; - int width = cel.Columns * tileset.TileWidth; - int height = cel.Rows * tileset.TileHeight; - int x = cel.Position.X; - int y = cel.Position.Y; - - Span pixels = new Color[width * height]; - ReadOnlySpan tiles = cel.Tiles; - for (int i = 0; i < tiles.Length; i++) - { - AsepriteTile tile = tiles[i]; - int column = i % cel.Columns; - int row = i / cel.Columns; - ReadOnlySpan tilePixels = tileset[tile.TilesetTileID]; - - for (int j = 0; j < tilePixels.Length; j++) - { - int px = (j % tileset.TileWidth) + (column * tileset.TileHeight); - int py = (j / tileset.TileWidth) + (row * tileset.TileHeight); - int index = py * width + px; - pixels[index] = tilePixels[j]; - } - } - - BlendCel(backdrop, pixels, cel.Layer.BlendMode, x, y, width, cel.Opacity, cel.Layer.Opacity); - } - - private void BlendCel(Span backdrop, ReadOnlySpan source, AsepriteBlendMode blendMode, int celX, int celY, int celWidth, int celOpacity, int layerOpacity) - { - for (int i = 0; i < source.Length; i++) - { - int x = (i % celWidth) + celX; - int y = (i / celWidth) + celY; - int index = y * Width + x; - - // Sometimes a cel can have a negative x and/or y value. This is caused by selecting an area in within - // Aseprite and then moving a portion of the selected pixels outside the canvas. We don't care about these - // pixels, so if the index is outside the range of the array to store them in, then we'll just ignore them. - if (index < 0 || index >= backdrop.Length) { continue; } - - Color b = backdrop[index]; - Color s = source[i]; - byte opacity = BlendFunctions.MUL_UN8(celOpacity, layerOpacity); - backdrop[index] = BlendFunctions.Blend(blendMode, b, s, opacity); - } - } -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteImageCel.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteImageCel.cs deleted file mode 100644 index ffefe5df..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteImageCel.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a cel in an that contains pixel data. -/// -public sealed class AsepriteImageCel : AsepriteCel -{ - private Color[] _pixels { get; } - - /// - /// Gets a read-only span of the pixel data for this . Pixel order is from - /// top-to-bottom, read left-to-right. - /// - public ReadOnlySpan Pixels => _pixels; - - /// - /// Gets the width, in pixels, of this - /// - public int Width { get; } - - /// - /// Gets the height, in pixels, of this . - /// - public int Height { get; } - - internal AsepriteImageCel(int width, int height, Color[] pixels, AsepriteLayer layer, Point position, int opacity) - : base(layer, position, opacity) => (Width, Height, _pixels) = (width, height, pixels); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayer.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayer.cs deleted file mode 100644 index 11eb6730..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayer.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a of an aseprite image. -/// -public class AsepriteLayer -{ - // Used for serialization when writing to file with AsepriteFileWriter - internal int SerializationID { get; set; } - - /// - /// Gets the flags set for this . - /// - public AsepriteLayerFlags Flags { get; } - - /// - /// Gets a value that indicates whether this is visible. - /// - public bool IsVisible => Flags.HasFlag(AsepriteLayerFlags.Visible); - - /// - /// Gets a value that indicates whether this was set as the background - /// layer in aseprite. - /// - public bool IsBackground => Flags.HasFlag(AsepriteLayerFlags.Background); - - /// - /// Gets a value that indicates whether this is a reference layer. - /// - public bool IsReference => Flags.HasFlag(AsepriteLayerFlags.ReferenceLayer); - - /// - /// Gets a the used by this . - /// - public AsepriteBlendMode BlendMode { get; } - - /// - /// Gets the opacity level of this . - /// - public int Opacity { get; } - - /// - /// Gets the name assigned to this . - /// - public string Name { get; } - - /// - /// Gets the that was set for this in aseprite. - /// - public AsepriteUserData UserData { get; } = new(); - - internal AsepriteLayer(AsepriteLayerFlags flags, AsepriteBlendMode blendMode, int opacity, string name) => - (Flags, BlendMode, Opacity, Name) = (flags, blendMode, opacity, name); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayerFlags.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayerFlags.cs deleted file mode 100644 index 8ac6aa47..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLayerFlags.cs +++ /dev/null @@ -1,71 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines the flag values for a . -/// -public enum AsepriteLayerFlags : ushort -{ - /// - /// Defines that no flags are set - /// - None = 0, - - /// - /// Defines that the is visible. - /// - Visible = 1, - - /// - /// Defines that the is editable in the Aseprite application. - /// - Editable = 2, - - /// - /// Defines that the movement is locked in the Aseprite application. - /// - LockMovement = 4, - - /// - /// Defines that the was set as the background layer. - /// - Background = 8, - - /// - /// Defines that the layer prefers linked cels. - /// - PreferLinkedCels = 16, - - /// - /// Defines that the should be displayed collapsed in the Aseprite application. - /// - DisplayedCollapsed = 32, - - /// - /// Defines that the is a reference layer. - /// - ReferenceLayer = 64 -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLoopDirection.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLoopDirection.cs deleted file mode 100644 index 69772d43..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteLoopDirection.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines the direction for an animation defined by a . -/// -public enum AsepriteLoopDirection : byte -{ - /// - /// Defines that the animation for the is played in a forward direction from the first - /// frame of animation to the last. - /// - Forward = 0, - - /// - /// Defines that the animation for the is played in reversed from the last frame of - /// animation to the first. - /// - Reverse = 1, - - /// - /// Defines that the animation for the ping-pongs by first going from the first frame - /// of animation to the last then playing in reverse from the last frame of animation to the first. - /// - PingPong = 2, - - /// - /// Defines that the animation for the ping-pongs by first going in reverse from the - /// last frame of animation to the first then playing forward from the first frame of animation to the last. - /// - PingPongReverse = 3 -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSlice.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSlice.cs deleted file mode 100644 index 614a3738..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSlice.cs +++ /dev/null @@ -1,68 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a named slice region with keys in aseprite. -/// -public sealed class AsepriteSlice -{ - private AsepriteSliceKey[] _keys; - - /// - /// Gets a read-only span of the for this slice. - /// - public ReadOnlySpan Keys => _keys; - - /// - /// Gets a value that indicates if this , and its , - /// elements represent a nine-patch region. - /// - public bool IsNinePatch { get; } - - /// - /// Gets a value that indicates if this , and its , - /// contain pivot values. - /// - public bool HasPivot { get; } - - /// - /// Gets the name assigned to this . - /// - public string Name { get; } - - /// - /// Gets the total number of elements in this . - /// - public int KeyCount => _keys.Length; - - /// - /// Gets the set for this in aseprite. - /// - public AsepriteUserData UserData { get; } = new(); - - internal AsepriteSlice(string name, bool isNine, bool hasPivot, AsepriteSliceKey[] keys) => - (Name, IsNinePatch, HasPivot, _keys) = (name, isNine, hasPivot, keys); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSliceKey.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSliceKey.cs deleted file mode 100644 index 261c32c2..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteSliceKey.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using System.Diagnostics.CodeAnalysis; -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines the values of a key for a . -/// -public sealed class AsepriteSliceKey -{ - /// - /// Gets the index of the this is valid starting on. - /// - public int FrameIndex { get; } - - /// - /// Gets the rectangular bounds of the during this . - /// - public Rectangle Bounds { get; } - - /// - /// Gets the rectangular bounds of the center rectangle of the , relative to the - /// , during this , if the is a - /// nine-patch slice, otherwise, . - /// - public Rectangle? CenterBounds { get; } - - /// - /// Gets the x- and y-coordinate location of the pivot point of the , relative to the - /// , during this , if the contains - /// pivot values; otherwise, . - /// - public Point? Pivot { get; } - - /// - /// Gets a value that indicates if this is for a nine-patch - /// . When , guarantees that the - /// value is not . - /// - [MemberNotNullWhen(true, nameof(CenterBounds))] - public bool IsNinePatch => CenterBounds is not null; - - /// - /// Gets a value that indicates if this contains pivot values. When - /// , guarantees that the value is not . - /// - [MemberNotNullWhen(true, nameof(Pivot))] - public bool HasPivot => Pivot is not null; - - internal AsepriteSliceKey(int frameIndex, Rectangle bounds, Rectangle? centerBounds, Point? pivot) => - (FrameIndex, Bounds, CenterBounds, Pivot) = (frameIndex, bounds, centerBounds, pivot); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTag.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTag.cs deleted file mode 100644 index 8dd09ff8..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTag.cs +++ /dev/null @@ -1,99 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines an animation tag in aseprite. -/// -public sealed class AsepriteTag -{ - internal Color _tagColor; - - /// - /// Gets the index of the first of animation defined by this - /// . - /// - public int From { get; } - - /// - /// Gets the index of the last see cref="AsepriteFrame"/> of animation defined by this - /// . - /// - public int To { get; } - - /// - /// Gets the of the animation defined by this . - /// - public AsepriteLoopDirection Direction { get; } - - /// - /// Gets the repeat count of the animation defined by this - /// - /// - /// - /// - /// Value - /// Meaning - /// - /// - /// 0 - /// Infinite - /// - /// - /// 1 - /// Plays once (for ping-pong, it plays just in one direction) - /// - /// - /// 2 - /// Plays twice (for ping-pong, it plays once in one direction, and once in reverse) - /// - /// - /// N - /// Plays N times - /// - /// - /// - public int Repeat { get; } - - /// - /// Gets the name assigned to this . - /// - public string Name { get; } - - /// - /// Gets the set for this . - /// - public AsepriteUserData UserData { get; } = new(); - - /// - /// Gets the color assigned to this . - /// - public Color Color => UserData.Color ?? _tagColor; - - internal AsepriteTag(ushort from, ushort to, AsepriteLoopDirection direction, ushort repeat, Color color, string name) => - (From, To, Direction, Repeat, _tagColor, Name) = (from, to, direction, repeat, color, name); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTile.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTile.cs deleted file mode 100644 index 202504ab..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTile.cs +++ /dev/null @@ -1,75 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a tile in a -/// -public sealed class AsepriteTile : IEquatable -{ - /// - /// Gets the id of the source tile in the that contains the source image data for - /// this . - /// - public int TilesetTileID { get; } - - /// - /// Gets a value that indicates if this is - /// flipped on the x-axis. - /// - public bool XFlip { get; } - - /// - /// Gets a value that indicates if this is - /// flipped on the y-axis. - /// - public bool YFlip { get; } - - /// - /// Gets a value that indicates if this is - /// flipped on its diagonal-axis. - /// - public bool DFlip { get; } - - internal AsepriteTile(int tilesetTileId, bool xFlip, bool yFlip, bool dFlip) => - (TilesetTileID, XFlip, YFlip, DFlip) = (tilesetTileId, xFlip, yFlip, dFlip); - - /// - /// Returns a value that indicates whether the specified . is equal to this - /// .. - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the specified is equal to this - /// ; otherwise, . - /// - public bool Equals(AsepriteTile? other) => other is not null && - XFlip == other.XFlip && - YFlip == other.YFlip && - DFlip == other.DFlip && - TilesetTileID == other.TilesetTileID; -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapCel.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapCel.cs deleted file mode 100644 index b06de39b..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapCel.cs +++ /dev/null @@ -1,64 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a cel in an that contains tile data for a tilemap. -/// -public sealed class AsepriteTilemapCel : AsepriteCel -{ - private AsepriteTile[] _tiles; - - /// - /// Gets a read-only span of the data for this . - /// - public ReadOnlySpan Tiles => _tiles; - - /// - /// Gets the total number of columns in this . - /// - public int Columns { get; } - - /// - /// Gets the total number of rows in this . - /// - public int Rows { get; } - - /// - /// Gets the total number of tiles in this . - /// - public int TileCount => _tiles.Length; - - /// - /// Gets a reference to the used by this tiles in this - /// . - /// - public AsepriteTileset Tileset => LayerAs().Tileset; - - internal AsepriteTilemapCel(int columns, int rows, AsepriteTile[] tiles, AsepriteLayer layer, Point position, int opacity) - : base(layer, position, opacity) => (Columns, Rows, _tiles) = (columns, rows, tiles); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapLayer.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapLayer.cs deleted file mode 100644 index 67f8f7ef..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTilemapLayer.cs +++ /dev/null @@ -1,40 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a layer that elements are on. -/// -public sealed class AsepriteTilemapLayer : AsepriteLayer -{ - /// - /// Gets a reference to the used by the - /// elements on this tilemap layer. - /// - public AsepriteTileset Tileset { get; } - - internal AsepriteTilemapLayer(AsepriteTileset tileset, /*int tilesetID,*/ AsepriteLayerFlags flags, AsepriteBlendMode blend, byte opacity, string name) - : base(flags, blend, opacity, name) => (Tileset/*, TilesetID*/) = (tileset/*, tilesetID*/); -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTileset.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTileset.cs deleted file mode 100644 index e8a76e2e..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteTileset.cs +++ /dev/null @@ -1,132 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Defines a tileset in an aseprite file. -/// -public sealed class AsepriteTileset -{ - private Color[] _pixels; - - /// - /// Gets a read-only span of the pixel data for this . Pixel order is from - /// top-to-bottom, read left-to-right. - /// - public ReadOnlySpan Pixels => _pixels; - - /// - /// Gets the id assigned to this . - /// - public int ID { get; } - - /// - /// Gets the total number of tiles in this . - /// - public int TileCount { get; } - - /// - /// Gets the width, in pixels, of each tile in this . - /// - public int TileWidth { get; } - - /// - /// Gets the height, in pixels, of each tile in this . - /// - public int TileHeight { get; } - - /// - /// Gets the name assigned to this . - /// - public string Name { get; } - - /// - /// Gets the width, in pixels, of the source image for this . - /// - public int Width { get; } - - /// - /// Gets the height, in pixels, of the source image for this . - /// - public int Height { get; } - - /// - /// Gets the set for this in aseprite. - /// - /// - /// User Data for tilesets was added in Aseprite 1.3-rc1. It currently doesn't appear that you can set user - /// data for a tileset within the Aseprite UI itself, but can set it through the LUA Scripting API. - /// - public AsepriteUserData UserData { get; } = new(); - - /// - /// Gets a read-only span of the color values that represent the pixel data for a the tile at the specified - /// index in this . Pixel order is from top-to-bottom, read left-to-right. - /// - /// - /// The index of the tile in this to get the pixel data for. - /// - /// - /// Thrown if the specified index is less than zero or is greater than or equal to the total number of - /// tiles in this . - /// - public ReadOnlySpan this[int tileIndex] => GetTile(tileIndex); - - internal AsepriteTileset(int id, int count, int tileWidth, int tileHeight, string name, Color[] pixels) - { - ID = id; - TileCount = count; - TileWidth = tileWidth; - TileHeight = tileHeight; - Name = name; - _pixels = pixels; - Width = tileWidth; - Height = tileHeight * TileCount; - } - - /// - /// Gets a read-only span of the color values that represent the pixel data for a the tile at the specified - /// index in this . Pixel order is from top-to-bottom, read left-to-right. - /// - /// - /// The index of the tile in this to get the pixel data for. - /// - /// - /// Thrown if the specified index is less than zero or is greater than or equal to the total number of - /// tiles in this . - /// - public ReadOnlySpan GetTile(int tileIndex) - { - if (tileIndex < 0 || tileIndex >= TileCount) - { - throw new ArgumentOutOfRangeException(nameof(tileIndex)); - } - - int len = TileWidth * TileHeight; - return Pixels.Slice(tileIndex * len, len); - } -} diff --git a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteUserData.cs b/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteUserData.cs deleted file mode 100644 index 269895c5..00000000 --- a/source/MonoGame.Aseprite.Shared/AsepriteTypes/AsepriteUserData.cs +++ /dev/null @@ -1,64 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using System.Diagnostics.CodeAnalysis; -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.AsepriteTypes; - -/// -/// Represents the custom userdata that can be set for a , , -/// , , or element in aseprite. -/// -public sealed class AsepriteUserData -{ - /// - /// Gets a value that indicates if this contains a text value. When this is - /// , guarantees that the value is not . - /// - [MemberNotNullWhen(true, nameof(Text))] - public bool HasText => Text is not null; - - /// - /// Gets the custom text that was set for this , if any was set in aseprite; - /// otherwise, . - /// - public string? Text { get; internal set; } = default; - - /// - /// Gets a value that indicates whether this contains a color value. When - /// , guarantees that the value is not - /// . - /// - [MemberNotNullWhen(true, nameof(Color))] - public bool HasColor => Color is not null; - - /// - /// Gets the custom color that was set for this , if any was set in aseprite; - /// otherwise, . - /// - public Color? Color { get; internal set; } = default; - - internal AsepriteUserData() { } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/BinaryReaderExtensions.cs b/source/MonoGame.Aseprite.Shared/Content/BinaryReaderExtensions.cs deleted file mode 100644 index 17910c1e..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/BinaryReaderExtensions.cs +++ /dev/null @@ -1,277 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content; - -internal static class BinaryReaderExtensions -{ - internal static void ReadMagic(this BinaryReader reader) - { - byte m = reader.ReadByte(); // [M]onoGame - byte a = reader.ReadByte(); // [A]seprite - byte c = reader.ReadByte(); // [C]ontent - - - if (m != 'M' || a != 'A' || c != 'C') - { - // Dispose of reader so stream is closed in case the caller has a try-catch that handles this exception. - reader.Dispose(); - throw new InvalidOperationException($"File contains invalid magic number. Was this processed using the MonoGame.Aseprite library?"); - } - } - - internal static Rectangle ReadRectangle(this BinaryReader reader) - { - Rectangle result = new(); - result.Location = ReadPoint(reader); - result.Size = ReadPoint(reader); - return result; - } - - internal static Point ReadPoint(this BinaryReader reader) - { - Point result = new(); - result.X = reader.ReadInt32(); - result.Y = reader.ReadInt32(); - return result; - } - - internal static Vector2 ReadVector2(this BinaryReader reader) - { - Vector2 result = new(); - result.X = reader.ReadSingle(); - result.Y = reader.ReadSingle(); - return result; - } - - internal static Color ReadColor(this BinaryReader reader) - { - Color result = new(); - result.R = reader.ReadByte(); - result.G = reader.ReadByte(); - result.B = reader.ReadByte(); - result.A = reader.ReadByte(); - return result; - } - - internal static RawTexture ReadRawTexture(this BinaryReader reader) - { - string name = reader.ReadString(); - int width = reader.ReadInt32(); - int height = reader.ReadInt32(); - - Color[] pixels = reader.ReadColors(); - - return new(name, pixels, width, height); - } - - internal static Color[] ReadColors(this BinaryReader reader) - { - int count = reader.ReadInt32(); - Color[] pixels = new Color[count]; - for (int i = 0; i < count; i++) - { - pixels[i] = reader.ReadColor(); - } - return pixels; - } - - internal static RawSlice ReadRawSlice(this BinaryReader reader) - { - string name = reader.ReadString(); - Rectangle bounds = reader.ReadRectangle(); - Vector2 origin = reader.ReadVector2(); - Color color = reader.ReadColor(); - - bool isNine = reader.ReadBoolean(); - - if (isNine) - { - Rectangle centerBounds = reader.ReadRectangle(); - return new RawNinePatchSlice(name, bounds, centerBounds, origin, color); - } - - return new RawSlice(name, bounds, origin, color); - } - - internal static RawAnimationTag[] ReadRawAnimationTags(this BinaryReader reader) - { - int count = reader.ReadInt32(); - RawAnimationTag[] tags = new RawAnimationTag[count]; - for (int i = 0; i < count; i++) - { - tags[i] = reader.ReadRawAnimationTag(); - } - return tags; - } - - internal static RawAnimationTag ReadRawAnimationTag(this BinaryReader reader) - { - string name = reader.ReadString(); - int loopCount = reader.ReadInt32(); - bool isReversed = reader.ReadBoolean(); - bool isPingPong = reader.ReadBoolean(); - RawAnimationFrame[] frames = reader.ReadRawAnimationFrames(); - return new(name, frames, loopCount, isReversed, isPingPong); - } - - internal static RawAnimationFrame[] ReadRawAnimationFrames(this BinaryReader reader) - { - int count = reader.ReadInt32(); - RawAnimationFrame[] frames = new RawAnimationFrame[count]; - for (int i = 0; i < count; i++) - { - frames[i] = reader.ReadRawAnimationFrame(); - } - return frames; - } - - internal static RawAnimationFrame ReadRawAnimationFrame(this BinaryReader reader) - { - int index = reader.ReadInt32(); - int duration = reader.ReadInt32(); - return new(index, duration); - } - - internal static RawTextureAtlas ReadRawTextureAtlas(this BinaryReader reader) - { - string name = reader.ReadString(); - RawTexture texture = reader.ReadRawTexture(); - RawTextureRegion[] regions = reader.ReadRawTextureRegions(); - return new(name, texture, regions); - } - - internal static RawTextureRegion[] ReadRawTextureRegions(this BinaryReader reader) - { - int count = reader.ReadInt32(); - RawTextureRegion[] regions = new RawTextureRegion[count]; - - for (int i = 0; i < count; i++) - { - regions[i] = reader.ReadRawTextureRegion(); - } - - return regions; - } - - internal static RawTextureRegion ReadRawTextureRegion(this BinaryReader reader) - { - string name = reader.ReadString(); - Rectangle bounds = reader.ReadRectangle(); - RawSlice[] slices = reader.ReadRawSlices(); - return new(name, bounds, slices); - } - - internal static RawSlice[] ReadRawSlices(this BinaryReader reader) - { - int count = reader.ReadInt32(); - RawSlice[] slices = new RawSlice[count]; - - for (int i = 0; i < count; i++) - { - slices[i] = reader.ReadRawSlice(); - } - - return slices; - } - - internal static RawTileset ReadRawTileset(this BinaryReader reader) - { - int id = reader.ReadInt32(); - string name = reader.ReadString(); - RawTexture texture = reader.ReadRawTexture(); - int tileWidth = reader.ReadInt32(); - int tileHeight = reader.ReadInt32(); - - return new(id, name, texture, tileWidth, tileHeight); - } - - internal static RawTilemapLayer[] ReadRawTilemapLayers(this BinaryReader reader) - { - int count = reader.ReadInt32(); - RawTilemapLayer[] layers = new RawTilemapLayer[count]; - for (int i = 0; i < count; i++) - { - layers[i] = reader.ReadRawTilemapLayer(); - } - return layers; - } - - internal static RawTilemapLayer ReadRawTilemapLayer(this BinaryReader reader) - { - string name = reader.ReadString(); - int tilesetID = reader.ReadInt32(); - int columns = reader.ReadInt32(); - int rows = reader.ReadInt32(); - Point offset = reader.ReadPoint(); - RawTilemapTile[] tiles = reader.ReadRawTilemapTiles(); - return new(name, tilesetID, columns, rows, tiles, offset); - } - - internal static RawTilemapTile[] ReadRawTilemapTiles(this BinaryReader reader) - { - int count = reader.ReadInt32(); - RawTilemapTile[] rawTilemapTiles = new RawTilemapTile[count]; - - for (int i = 0; i < count; i++) - { - rawTilemapTiles[i] = reader.ReadRawTilemapTile(); - } - - return rawTilemapTiles; - } - - internal static RawTilemapTile ReadRawTilemapTile(this BinaryReader reader) - { - int tilesetTileID = reader.ReadInt32(); - bool flipHorizontally = reader.ReadBoolean(); - bool flipVertically = reader.ReadBoolean(); - bool flipDiagonally = reader.ReadBoolean(); - - return new RawTilemapTile(tilesetTileID, flipHorizontally, flipVertically, flipDiagonally); - } - - internal static RawTilemapFrame[] ReadRawTilemapFrames(this BinaryReader reader) - { - int count = reader.ReadInt32(); - RawTilemapFrame[] rawTilemapFrames = new RawTilemapFrame[count]; - - for (int i = 0; i < count; i++) - { - rawTilemapFrames[i] = reader.ReadRawTilemapFrame(); - } - - return rawTilemapFrames; - } - - internal static RawTilemapFrame ReadRawTilemapFrame(this BinaryReader reader) - { - int duration = reader.ReadInt32(); - RawTilemapLayer[] layers = reader.ReadRawTilemapLayers(); - return new(duration, layers); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/BinaryWriterExtensions.cs b/source/MonoGame.Aseprite.Shared/Content/BinaryWriterExtensions.cs deleted file mode 100644 index 74d3878d..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/BinaryWriterExtensions.cs +++ /dev/null @@ -1,224 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content; - -internal static class BinaryWriterExtensions -{ - internal static void WriteMagic(this BinaryWriter writer) - { - writer.Write((byte)'M'); // [M]onoGame - writer.Write((byte)'A'); // [A]seprite - writer.Write((byte)'C'); // [C]ontent - } - - internal static void Write(this BinaryWriter writer, Rectangle value) - { - writer.Write(value.Location); - writer.Write(value.Size); - } - - internal static void Write(this BinaryWriter writer, Point value) - { - writer.Write(value.X); - writer.Write(value.Y); - } - - internal static void Write(this BinaryWriter writer, Vector2 value) - { - writer.Write(value.X); - writer.Write(value.Y); - } - - internal static void Write(this BinaryWriter writer, Color value) - { - writer.Write(value.R); - writer.Write(value.G); - writer.Write(value.B); - writer.Write(value.A); - } - - internal static void Write(this BinaryWriter writer, RawTexture value) - { - writer.Write(value.Name); - writer.Write(value.Width); - writer.Write(value.Height); - writer.Write(value.Pixels); - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, RawSlice value) - { - writer.Write(value.Name); - writer.Write(value.Bounds); - writer.Write(value.Origin); - writer.Write(value.Color); - - if (value is RawNinePatchSlice ninePatch) - { - writer.Write(true); - writer.Write(ninePatch.CenterBounds); - } - else - { - writer.Write(false); - } - } - - internal static void Write(this BinaryWriter writer, RawTextureAtlas value) - { - writer.Write(value.Name); - writer.Write(value.RawTexture); - writer.Write(value.RawTextureRegions); - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, RawTextureRegion value) - { - writer.Write(value.Name); - writer.Write(value.Bounds); - writer.Write(value.Slices); - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, RawAnimationTag value) - { - writer.Write(value.Name); - writer.Write(value.LoopCount); - writer.Write(value.IsReversed); - writer.Write(value.IsPingPong); - writer.Write(value.RawAnimationFrames); - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, RawAnimationFrame value) - { - writer.Write(value.FrameIndex); - writer.Write(value.DurationInMilliseconds); - } - - internal static void Write(this BinaryWriter writer, RawTileset value) - { - writer.Write(value.ID); - writer.Write(value.Name); - writer.Write(value.RawTexture); - writer.Write(value.TileWidth); - writer.Write(value.TileHeight); - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, RawTilemapLayer value) - { - writer.Write(value.Name); - writer.Write(value.TilesetID); - writer.Write(value.Columns); - writer.Write(value.Rows); - writer.Write(value.Offset); - writer.Write(value.RawTilemapTiles); - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, RawTilemapTile value) - { - writer.Write(value.TilesetTileID); - writer.Write(value.FlipHorizontally); - writer.Write(value.FlipVertically); - writer.Write(value.FlipDiagonally); - } - - internal static void Write(this BinaryWriter writer, ReadOnlySpan value) - { - writer.Write(value.Length); - for (int i = 0; i < value.Length; i++) - { - writer.Write(value[i]); - } - } - - internal static void Write(this BinaryWriter writer, RawTilemapFrame value) - { - writer.Write(value.DurationInMilliseconds); - writer.Write(value.RawTilemapLayers); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Processors/AnimatedTilemapProcessor.cs b/source/MonoGame.Aseprite.Shared/Content/Processors/AnimatedTilemapProcessor.cs deleted file mode 100644 index f9f96a9b..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Processors/AnimatedTilemapProcessor.cs +++ /dev/null @@ -1,118 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.AsepriteTypes; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Processors; - -/// -public static partial class AnimatedTilemapProcessor -{ - /// - /// Processes a from the given . - /// - /// - /// The to processes the from. - /// - /// - /// Indicates if only elements that are visible should be processed. - /// - /// - /// The created by this method. - /// - /// - /// Thrown if elements are found in the with duplicate - /// names. Tilemaps must contain layers with unique names even though Aseprite does not enforce unique names - /// for layers. - /// - public static RawAnimatedTilemap ProcessRaw(AsepriteFile aseFile, bool onlyVisibleLayers = true) - { - List rawTilesets = new(); - RawTilemapFrame[] rawFrames = new RawTilemapFrame[aseFile.Frames.Length]; - HashSet tilesetIDCheck = new(); - - for (int f = 0; f < aseFile.Frames.Length; f++) - { - AsepriteFrame aseFrame = aseFile.Frames[f]; - List rawLayers = new(); - HashSet layerNameCheck = new(); - - for (int c = 0; c < aseFrame.Cels.Length; c++) - { - // Only care about tilemap cels. - if (aseFrame.Cels[c] is not AsepriteTilemapCel tilemapCel) - { - continue; - } - - // Only continue if layer is visible or if explicitly told to include non-visible layers. - if (!tilemapCel.Layer.IsVisible && onlyVisibleLayers) - { - continue; - } - - // Need to perform a check that we don't have duplicate layer names. This is because aseprite allows - // duplicate layer names, but we require unique names from this point on. - AsepriteTilemapLayer aseTilemapLayer = tilemapCel.LayerAs(); - string layerName = aseTilemapLayer.Name; - - if (!layerNameCheck.Add(layerName)) - { - throw new InvalidOperationException($"Duplicate layer name '{tilemapCel.Layer.Name}' found. Layer names must be unique for tilemaps"); - } - - int tilesetID = aseTilemapLayer.Tileset.ID; - - if (tilesetIDCheck.Add(tilesetID)) - { - RawTileset rawTileset = TilesetProcessor.ProcessRaw(aseTilemapLayer.Tileset); - rawTilesets.Add(rawTileset); - } - - RawTilemapTile[] tiles = new RawTilemapTile[tilemapCel.Tiles.Length]; - - for (int t = 0; t < tilemapCel.Tiles.Length; t++) - { - AsepriteTile aseTile = tilemapCel.Tiles[t]; - tiles[t] = new RawTilemapTile(aseTile.TilesetTileID, aseTile.YFlip, aseTile.XFlip, aseTile.DFlip); - } - - int columns = tilemapCel.Columns; - int rows = tilemapCel.Rows; - Point offset = tilemapCel.Position; - - RawTilemapLayer rawLayer = new(layerName, tilesetID, columns, rows, tiles, offset); - rawLayers.Add(rawLayer); - - } - - rawFrames[f] = new(aseFrame.DurationInMilliseconds, rawLayers.ToArray()); - } - - return new(aseFile.Name, rawTilesets.ToArray(), rawFrames); - - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Processors/SpriteProcessor.cs b/source/MonoGame.Aseprite.Shared/Content/Processors/SpriteProcessor.cs deleted file mode 100644 index 414a380e..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Processors/SpriteProcessor.cs +++ /dev/null @@ -1,124 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.AsepriteTypes; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Processors; - -/// -public static partial class SpriteProcessor -{ - /// - /// Processes a from the at the specified index in the - /// given . - /// - /// - /// The that contains the to processes. - /// - /// - /// The index of the in the to process. - /// - /// - /// Indicates if only elements on visible elements should - /// be included. - /// - /// - /// Indicates if elements on an marked as the background - /// layer should be included. - /// - /// - /// Indicates if elements on a should be included. - /// - /// - /// The created by this method. - /// - /// - /// Thrown if the specified index is less than zero or is greater than or equal to - /// the total number of elements in the given . - /// - public static RawSprite ProcessRaw(AsepriteFile aseFile, int aseFrameIndex, bool onlyVisibleLayers = true, bool includeBackgroundLayer = false, bool includeTilemapLayers = true) - { - AsepriteFrame aseFrame = aseFile.GetFrame(aseFrameIndex); - - Color[] pixels = aseFrame.FlattenFrame(onlyVisibleLayers, includeBackgroundLayer, includeTilemapLayers); - RawTexture rawTexture = new(aseFrame.Name, pixels, aseFrame.Width, aseFrame.Height); - - RawSlice[] slices = ProcessSlices(aseFrameIndex, aseFile.Slices); - - return new(aseFrame.Name, rawTexture, slices); - } - - private static RawSlice[] ProcessSlices(int frameIndex, ReadOnlySpan slices) - { - List result = new(); - HashSet sliceNameCheck = new(); - - for (int s = 0; s < slices.Length; s++) - { - AsepriteSlice slice = slices[s]; - ReadOnlySpan keys = slice.Keys; - - // Traverse keys backwards until we find a match for the frame index - for (int k = keys.Length - 1; k >= 0; k--) - { - AsepriteSliceKey key = keys[k]; - - if (key.FrameIndex > frameIndex) - { - continue; - } - - string name = slice.Name; - - if (sliceNameCheck.Contains(name)) - { - throw new InvalidOperationException($"Duplicate slice name '{name}' found. Slices must have unique names"); - } - - Rectangle bounds = key.Bounds; - Color color = slice.UserData.Color.GetValueOrDefault(); - Vector2 origin = key.Pivot.GetValueOrDefault().ToVector2(); - - RawSlice rawSlice; - - if (key.IsNinePatch) - { - rawSlice = new RawNinePatchSlice(name, bounds, key.CenterBounds.GetValueOrDefault(), origin, color); - } - else - { - rawSlice = new RawSlice(name, bounds, origin, color); - } - - result.Add(rawSlice); - sliceNameCheck.Add(name); - break; - } - } - - return result.ToArray(); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Processors/SpriteSheetProcessor.cs b/source/MonoGame.Aseprite.Shared/Content/Processors/SpriteSheetProcessor.cs deleted file mode 100644 index e07ef265..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Processors/SpriteSheetProcessor.cs +++ /dev/null @@ -1,114 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.AsepriteTypes; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Processors; - -/// -public static partial class SpriteSheetProcessor -{ - /// - /// Processes a from the given . - /// - /// - /// The to process the from. - /// - /// - /// Indicates if only elements on visible elements should - /// be included. - /// - /// - /// Indicates if elements on the marked as the background - /// layer should be included. - /// - /// - /// Indicates if elements on a should be included. - /// - /// - /// Indicates if duplicate elements should be merged into one. - /// - /// - /// The amount of transparent pixels to add between the edge of the generated image - /// - /// - /// The amount of transparent pixels to add between each texture region in the generated image. - /// - /// - /// The amount of transparent pixels to add around the edge of each texture region in the generated image. - /// - /// - /// The created by this method. - /// - /// - /// Thrown if elements are found in the with duplicate - /// names. Spritesheets must contain elements with unique names even though aseprite - /// does not enforce unique names for elements. - /// - public static RawSpriteSheet ProcessRaw(AsepriteFile aseFile, bool onlyVisibleLayers = true, bool includeBackgroundLayer = false, bool includeTilemapLayers = true, bool mergeDuplicates = true, int borderPadding = 0, int spacing = 0, int innerPadding = 0) - { - RawTextureAtlas rawAtlas = TextureAtlasProcessor.ProcessRaw(aseFile, onlyVisibleLayers, includeBackgroundLayer, includeTilemapLayers, mergeDuplicates, borderPadding, spacing, innerPadding); - - RawAnimationTag[] rawTags = new RawAnimationTag[aseFile.Tags.Length]; - HashSet tagNameCheck = new(); - - for (int i = 0; i < aseFile.Tags.Length; i++) - { - AsepriteTag aseTag = aseFile.GetTag(i); - - if (!tagNameCheck.Add(aseTag.Name)) - { - throw new InvalidOperationException($"Duplicate tag name '{aseTag.Name}' found. Tags must have unique names for a spritesheet."); - } - - rawTags[i] = ProcessRawTag(aseTag, aseFile.Frames); - } - - return new(aseFile.Name, rawAtlas, rawTags); - - } - - private static RawAnimationTag ProcessRawTag(AsepriteTag aseTag, ReadOnlySpan aseFrames) - { - int frameCount = aseTag.To - aseTag.From + 1; - RawAnimationFrame[] rawAnimationFrames = new RawAnimationFrame[frameCount]; - int[] frames = new int[frameCount]; - int[] durations = new int[frameCount]; - - for (int i = 0; i < frameCount; i++) - { - int index = aseTag.From + i; - rawAnimationFrames[i] = new(index, aseFrames[index].DurationInMilliseconds); - } - - // In aseprite, all tags are looping - int loopCount = aseTag.Repeat; - bool isReversed = aseTag.Direction == AsepriteLoopDirection.Reverse || aseTag.Direction == AsepriteLoopDirection.PingPongReverse; - bool isPingPong = aseTag.Direction == AsepriteLoopDirection.PingPong || aseTag.Direction == AsepriteLoopDirection.PingPongReverse; - - return new(aseTag.Name, rawAnimationFrames, loopCount, isReversed, isPingPong); - } -} - diff --git a/source/MonoGame.Aseprite.Shared/Content/Processors/TextureAtlasProcessor.cs b/source/MonoGame.Aseprite.Shared/Content/Processors/TextureAtlasProcessor.cs deleted file mode 100644 index ca48f312..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Processors/TextureAtlasProcessor.cs +++ /dev/null @@ -1,211 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.AsepriteTypes; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Processors; - -/// -public static partial class TextureAtlasProcessor -{ - /// - /// Processes a from the given . - /// - /// - /// The to process the from. - /// - /// - /// Indicates if only elements on visible elements should - /// be included. - /// - /// - /// Indicates if elements on the marked as the background - /// layer should be included. - /// - /// - /// Indicates if elements on a should be included. - /// - /// - /// Indicates if duplicate elements should be merged into one. - /// - /// - /// The amount of transparent pixels to add between the edge of the generated image - /// - /// - /// The amount of transparent pixels to add between each texture region in the generated image. - /// - /// - /// The amount of transparent pixels to add around the edge of each texture region in the generated image. - /// - /// The created by this method. - public static RawTextureAtlas ProcessRaw(AsepriteFile aseFile, bool onlyVisibleLayers = true, bool includeBackgroundLayer = false, bool includeTilemapLayers = true, bool mergeDuplicates = true, int borderPadding = 0, int spacing = 0, int innerPadding = 0) - { - int frameWidth = aseFile.CanvasWidth; - int frameHeight = aseFile.CanvasHeight; - int frameCount = aseFile.Frames.Length; - - Color[][] flattenedFrames = new Color[frameCount][]; - - for (int i = 0; i < frameCount; i++) - { - flattenedFrames[i] = aseFile.Frames[i].FlattenFrame(onlyVisibleLayers, includeBackgroundLayer, includeTilemapLayers); - } - - Dictionary duplicateMap = new(); - Dictionary originalToDuplicateLookup = new(); - - for (int i = 0; i < flattenedFrames.GetLength(0); i++) - { - for (int d = 0; d < i; d++) - { - if (flattenedFrames[i].SequenceEqual(flattenedFrames[d])) - { - duplicateMap.Add(i, d); - break; - } - } - } - - if (mergeDuplicates) - { - frameCount -= duplicateMap.Count; - } - - double sqrt = Math.Sqrt(frameCount); - int columns = (int)Math.Ceiling(sqrt); - int rows = (frameCount + columns - 1) / columns; - - int imageWidth = (columns * frameWidth) - + (borderPadding * 2) - + (spacing * (columns - 1)) - + (innerPadding * 2 * columns); - - int imageHeight = (rows * frameHeight) - + (borderPadding * 2) - + (spacing * (rows - 1)) - + (innerPadding * 2 * rows); - - Color[] imagePixels = new Color[imageWidth * imageHeight]; - RawTextureRegion[] regions = new RawTextureRegion[aseFile.Frames.Length]; - - int offset = 0; - - for (int i = 0; i < flattenedFrames.GetLength(0); i++) - { - if (mergeDuplicates && duplicateMap.ContainsKey(i)) - { - RawTextureRegion original = originalToDuplicateLookup[duplicateMap[i]]; - RawTextureRegion duplicate = new($"{aseFile.Name} {i}", original.Bounds, GetSlicesForFrame(i, aseFile.Slices)); - regions[i] = duplicate; - offset++; - continue; - } - - int column = (i - offset) % columns; - int row = (i - offset) / columns; - Color[] frame = flattenedFrames[i]; - - int x = (column * frameWidth) - + borderPadding - + (spacing * column) - + (innerPadding * (column + column + 1)); - - int y = (row * frameHeight) - + borderPadding - + (spacing * row) - + (innerPadding * (row + row + 1)); - - for (int p = 0; p < frame.Length; p++) - { - int px = (p % frameWidth) + x; - int py = (p / frameWidth) + y; - - int index = py * imageWidth + px; - imagePixels[index] = frame[p]; - - } - - Rectangle bounds = new(x, y, frameWidth, frameHeight); - RawTextureRegion rawTextureRegion = new($"{aseFile.Name} {i}", bounds, GetSlicesForFrame(i, aseFile.Slices)); - regions[i] = rawTextureRegion; - originalToDuplicateLookup.Add(i, rawTextureRegion); - } - - RawTexture rawTexture = new(aseFile.Name, imagePixels, imageWidth, imageHeight); - return new(aseFile.Name, rawTexture, regions); - } - - private static RawSlice[] GetSlicesForFrame(int frameIndex, ReadOnlySpan slices) - { - List result = new(); - HashSet sliceNameCheck = new(); - - for (int s = 0; s < slices.Length; s++) - { - AsepriteSlice slice = slices[s]; - ReadOnlySpan keys = slice.Keys; - - // Traverse keys backwards until we find a match for the frame index - for (int k = keys.Length - 1; k >= 0; k--) - { - AsepriteSliceKey key = keys[k]; - - if (key.FrameIndex > frameIndex) - { - continue; - } - - string name = slice.Name; - - if (sliceNameCheck.Contains(name)) - { - throw new InvalidOperationException($"Duplicate slice name '{name}' found. Slices must have unique names"); - } - - Rectangle bounds = key.Bounds; - Color color = slice.UserData.Color.GetValueOrDefault(); - Vector2 origin = key.Pivot.GetValueOrDefault().ToVector2(); - - RawSlice rawSlice; - - if (key.IsNinePatch) - { - rawSlice = new RawNinePatchSlice(name, bounds, key.CenterBounds.GetValueOrDefault(), origin, color); - } - else - { - rawSlice = new RawSlice(name, bounds, origin, color); - } - - result.Add(rawSlice); - sliceNameCheck.Add(name); - break; - } - } - - return result.ToArray(); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Processors/TilemapProcessor.cs b/source/MonoGame.Aseprite.Shared/Content/Processors/TilemapProcessor.cs deleted file mode 100644 index 3f4216a2..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Processors/TilemapProcessor.cs +++ /dev/null @@ -1,118 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.AsepriteTypes; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Processors; - -/// -public static partial class TilemapProcessor -{ - /// - /// Processes a from the elements as the specified index - /// in the given . - /// - /// - /// The to processes the from. - /// - /// - /// The index of the element in the to processes. - /// - /// - /// Indicates if only elements that are visible should be processed. - /// - /// - /// The created by this method. - /// - /// - /// Thrown if the index specified is less than zero or is greater than or equal to the total number of - /// elements in the given . - /// - /// - /// Thrown if elements are found in the with duplicate - /// names. Tilemaps must contain layers with unique names even though aseprite does not enforce unique names - /// for elements. - /// - public static RawTilemap ProcessRaw(AsepriteFile aseFile, int frameIndex, bool onlyVisibleLayers = true) - { - AsepriteFrame aseFrame = aseFile.GetFrame(frameIndex); - - List rawTilesets = new(); - List rawLayers = new(); - HashSet layerNameCheck = new(); - HashSet tilesetIDCheck = new(); - - for (int c = 0; c < aseFrame.Cels.Length; c++) - { - // Only care about tilemap cels. - if (aseFrame.Cels[c] is not AsepriteTilemapCel tilemapCel) - { - continue; - } - - // Only continue if layer is visible or if explicitly told to include non-visible elements. - if (!tilemapCel.Layer.IsVisible && onlyVisibleLayers) - { - continue; - } - - // Need to perform a check that we don't have duplicate layer names. This is because aseprite allows - // duplicate layer names, but we require unique names from this point on. - AsepriteTilemapLayer aseTilemapLayer = tilemapCel.LayerAs(); - string layerName = aseTilemapLayer.Name; - - if (!layerNameCheck.Add(layerName)) - { - throw new InvalidOperationException($"Duplicate layer name '{tilemapCel.Layer.Name}' found. Layer names must be unique for tilemaps"); - } - - int tilesetID = aseTilemapLayer.Tileset.ID; - - if (tilesetIDCheck.Add(tilesetID)) - { - RawTileset rawTileset = TilesetProcessor.ProcessRaw(aseTilemapLayer.Tileset); - rawTilesets.Add(rawTileset); - } - - RawTilemapTile[] tiles = new RawTilemapTile[tilemapCel.Tiles.Length]; - - for (int t = 0; t < tilemapCel.Tiles.Length; t++) - { - AsepriteTile aseTile = tilemapCel.Tiles[t]; - tiles[t] = new RawTilemapTile(aseTile.TilesetTileID, aseTile.YFlip, aseTile.XFlip, aseTile.DFlip); - } - - int columns = tilemapCel.Columns; - int rows = tilemapCel.Rows; - Point offset = tilemapCel.Position; - - RawTilemapLayer rawLayer = new(layerName, tilesetID, columns, rows, tiles, offset); - rawLayers.Add(rawLayer); - } - - return new(aseFile.Name, rawLayers.ToArray(), rawTilesets.ToArray()); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Processors/TilesetProcessor.cs b/source/MonoGame.Aseprite.Shared/Content/Processors/TilesetProcessor.cs deleted file mode 100644 index 349637c8..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Processors/TilesetProcessor.cs +++ /dev/null @@ -1,93 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.AsepriteTypes; -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Processors; - -/// -public static partial class TilesetProcessor -{ - /// - /// Processes a from the at the specified index in the - /// given . - /// - /// - /// The that contains the to process. - /// - /// - /// The index of the in the to process. - /// - /// - /// The created by this method. - /// - /// - /// Thrown if the index specified is less than zero or is greater than or equal to - /// the total number of elements in the given . - /// - public static RawTileset ProcessRaw(AsepriteFile aseFile, int tilesetIndex) - { - AsepriteTileset aseTileset = aseFile.GetTileset(tilesetIndex); - return ProcessRaw(aseTileset); - } - - /// - /// Processes a from the with the specified name in the - /// given . - /// - /// - /// The that contains the to process. - /// - /// - /// The name of the in the to process. - /// - /// - /// The created by this method. - /// - /// - /// Thrown if the given does not contain an element - /// with the specified name. - /// - public static RawTileset ProcessRaw(AsepriteFile aseFile, string tilesetName) - { - AsepriteTileset aseTileset = aseFile.GetTileset(tilesetName); - return ProcessRaw(aseTileset); - } - - /// - /// Processes a from the given . - /// - /// - /// The to process. - /// - /// - /// The created by this method. - /// - public static RawTileset ProcessRaw(AsepriteTileset aseTileset) - { - RawTexture texture = new(aseTileset.Name, aseTileset.Pixels.ToArray(), aseTileset.Width, aseTileset.Height); - return new(aseTileset.ID, aseTileset.Name, texture, aseTileset.TileWidth, aseTileset.TileHeight); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Readers/AsepriteFileReader.cs b/source/MonoGame.Aseprite.Shared/Content/Readers/AsepriteFileReader.cs deleted file mode 100644 index 460de24f..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Readers/AsepriteFileReader.cs +++ /dev/null @@ -1,598 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using System.Diagnostics.CodeAnalysis; -using System.Text; -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.AsepriteTypes; - -namespace MonoGame.Aseprite.Content.Readers; - -/// -/// Defines a reader that reads an . -/// -public static class AsepriteFileReader -{ - const ushort CHUNK_TYPE_OLD_PALETTE_1 = 0x0004; - const ushort CHUNK_TYPE_OLD_PALETTE_2 = 0x0011; - const ushort CHUNK_TYPE_LAYER = 0x2004; - const ushort CHUNK_TYPE_CEL = 0x2005; - const ushort CHUNK_TYPE_CEL_EXTRA = 0x2006; - const ushort CHUNK_TYPE_COLOR_PROFILE = 0x2007; - const ushort CHUNK_TYPE_EXTERNAL_FILES = 0x2008; - const ushort CHUNK_TYPE_MASK = 0x2016; - const ushort CHUNK_TYPE_PATH = 0x2017; - const ushort CHUNK_TYPE_TAGS = 0x2018; - const ushort CHUNK_TYPE_PALETTE = 0x2019; - const ushort CHUNK_TYPE_USER_DATA = 0x2020; - const ushort CHUNK_TYPE_SLICE = 0x2022; - const ushort CHUNK_TYPE_TILESET = 0x2023; - - /// - /// Reads the at the given path. - /// - /// - /// The path and name of the aseprite file to read. - /// - /// - /// The created by this method. - /// - /// - /// Thrown if no file is located at the specified path. - /// - /// - /// Thrown if an error occurs during the reading of the aseprite file. The exception message will contain the - /// cause of the exception. - /// - public static AsepriteFile ReadFile(string path) - { - if (!File.Exists(path)) - { - throw new FileNotFoundException($"Unable to locate a file at the path '{path}'"); - } - - using Stream stream = File.OpenRead(path); - using BinaryReader reader = new(stream); - - string name = Path.GetFileNameWithoutExtension(path); - return Read(name, reader); - } - - /// - /// Reads the using the provided . - ///
- /// Use this method with to load raw .aseprite files on Android - /// or other platforms. - ///
- /// - /// The name of the Aseprite file. - /// - /// - /// A file stream, preferably instantiated from calling . - /// - /// - /// The created by this method. - /// - /// - /// Thrown if no file is located at the specified path. - /// - /// - /// Thrown if an error occurs during the reading of the aseprite file. The exception message will contain the - /// cause of the exception. - /// - public static AsepriteFile ReadStream(string name, [NotNull] Stream fileStream) - { - using BinaryReader reader = new(fileStream); - return Read(name, reader); - } - - internal static AsepriteFile Read(string name, BinaryReader reader) - { - AsepriteFileBuilder fileBuilder = new(name); - - ReadFileHeader(reader, fileBuilder, out ushort nFrames); - ReadFrames(reader, fileBuilder, nFrames); - - AsepriteFile file = fileBuilder.Build(); - - return file; - } - - private static void ReadFileHeader(BinaryReader reader, AsepriteFileBuilder builder, out ushort nFrames) - { - const uint LAYER_OPACITY_VALID_FLAG = 1; - - IgnoreDword(reader); - ushort magic = ReadWord(reader); - - if (magic != 0xA5E0) - { - throw new InvalidOperationException($"Invalid header magic number (0x{magic:X4})."); - } - - nFrames = ReadWord(reader); - ushort frameWidth = ReadWord(reader); - ushort frameHeight = ReadWord(reader); - - ushort colorDepth = ReadWord(reader); - uint flags = ReadDword(reader); - - bool layerOpacityValid = (flags & LAYER_OPACITY_VALID_FLAG) != 0; - - IgnoreWord(reader); - IgnoreDword(reader); - IgnoreDword(reader); - - byte transparentIndex = ReadByte(reader); - IgnoreBytes(reader, 3); - ushort nColors = ReadWord(reader); - - reader.BaseStream.Position = 128; - - builder.SetFrameWidth(frameWidth); - builder.SetFrameHeight(frameHeight); - builder.SetColorDepth(colorDepth); - builder.SetTransparentIndex(transparentIndex); - builder.SetLayerOpacityValid(layerOpacityValid); - } - - private static void ReadFrames(BinaryReader reader, AsepriteFileBuilder builder, ushort nFrames) - { - for (int frameNum = 0; frameNum < nFrames; frameNum++) - { - IgnoreDword(reader); - ushort magic = ReadWord(reader); - - if (magic != 0xF1FA) - { - throw new InvalidOperationException($"Invalid frame magic in frame number {frameNum}"); - } - - ushort nChunksA = ReadWord(reader); - ushort duration = ReadWord(reader); - IgnoreBytes(reader, 2); - uint nChunksB = ReadDword(reader); - - uint nChunks = nChunksA == 0xFFFF && nChunksA < nChunksB ? - nChunksB : - nChunksA; - - - // Start iterator at -1 so after tags chunk is read, it'll - // increment to 0 to kick off the user data read. - int tagIterator = -1; - ushort lastChunkType = default; - - List cels = new(); - - for (uint chunkNum = 0; chunkNum < nChunks; chunkNum++) - { - lastChunkType = ReadChunk(reader, builder, lastChunkType, tagIterator, cels); - if (lastChunkType == CHUNK_TYPE_TAGS) - { - tagIterator++; - } - } - - builder.AddFrame(duration); - } - - } - - private static ushort ReadChunk(BinaryReader reader, AsepriteFileBuilder builder, ushort lastChunkType, int tagIterator, List cels) - { - long start = reader.BaseStream.Position; - - uint len = ReadDword(reader); - ushort type = ReadWord(reader); - - long end = start + len; - - switch (type) - { - case CHUNK_TYPE_LAYER: - ReadLayerChunk(reader, builder); - break; - case CHUNK_TYPE_CEL: - ReadCelChunk(reader, builder, end); - break; - case CHUNK_TYPE_TAGS: - ReadTagsChunk(reader, builder); - break; - case CHUNK_TYPE_PALETTE: - ReadPaletteChunk(reader, builder); - break; - case CHUNK_TYPE_SLICE: - ReadSliceChunk(reader, builder); - break; - case CHUNK_TYPE_TILESET: - ReadTilesetChunk(reader, builder); - break; - case CHUNK_TYPE_USER_DATA: - ReadUserDataChunk(reader, builder, lastChunkType, tagIterator); - break; - case CHUNK_TYPE_OLD_PALETTE_1: - ReadOldPalette1Chunk(reader, builder); - break; - case CHUNK_TYPE_OLD_PALETTE_2: - case CHUNK_TYPE_CEL_EXTRA: - case CHUNK_TYPE_COLOR_PROFILE: - case CHUNK_TYPE_EXTERNAL_FILES: - case CHUNK_TYPE_MASK: - case CHUNK_TYPE_PATH: - reader.BaseStream.Position = end; - break; - default: - throw new InvalidOperationException($"Unknown chunk type (0x{type:X4})"); - } - - if (type == CHUNK_TYPE_USER_DATA) - { - return lastChunkType; - } - - return type; - } - - private static void ReadLayerChunk(BinaryReader reader, AsepriteFileBuilder builder) - { - const int NORMAL_LAYER_TYPE = 0; - const int GROUP_LAYER_TYPE = 1; - const int TILEMAP_LAYER_TYPE = 2; - - ushort flagsValue = ReadWord(reader); - ushort type = ReadWord(reader); - IgnoreWord(reader); - IgnoreWord(reader); - IgnoreWord(reader); - ushort blend = ReadWord(reader); - byte opacity = ReadByte(reader); - IgnoreBytes(reader, 3); - string name = ReadString(reader); - - AsepriteLayerFlags flags = (AsepriteLayerFlags)flagsValue; - - switch (type) - { - case NORMAL_LAYER_TYPE: - case GROUP_LAYER_TYPE: - builder.AddLayer(flags, blend, opacity, name); - break; - case TILEMAP_LAYER_TYPE: - ReadTilemapLayerChunk(reader, builder, flags, blend, opacity, name); - break; - default: - throw new InvalidOperationException($"Unknown layer type '{type}'"); - } - } - - private static void ReadTilemapLayerChunk(BinaryReader reader, AsepriteFileBuilder builder, AsepriteLayerFlags flags, ushort blend, byte opacity, string name) - { - uint index = ReadDword(reader); - builder.AddTilemapLayer(index, flags, blend, opacity, name); - } - - private static void ReadCelChunk(BinaryReader reader, AsepriteFileBuilder builder, long chunkEnd) - { - const ushort RAW_IMAGE_TYPE = 0; - const ushort LINKED_CEL_TYPE = 1; - const ushort COMPRESSED_IMAGE_TYPE = 2; - const ushort COMPRESSED_TILEMAP_TYPE = 3; - - ushort layerIndex = ReadWord(reader); - short x = ReadShort(reader); - short y = ReadShort(reader); - byte opacity = ReadByte(reader); - ushort type = ReadWord(reader); - IgnoreBytes(reader, 7); - - Point position = new(x, y); - - switch (type) - { - case RAW_IMAGE_TYPE: - ReadRawImageCel(reader, builder, x, y, layerIndex, opacity, chunkEnd); - break; - case LINKED_CEL_TYPE: - ReadLinkedCel(reader, builder); - break; - case COMPRESSED_IMAGE_TYPE: - ReadCompressedImageCel(reader, builder, x, y, layerIndex, opacity, chunkEnd); - break; - case COMPRESSED_TILEMAP_TYPE: - ReadCompressedTilemapCel(reader, builder, x, y, layerIndex, opacity, chunkEnd); - break; - default: - throw new InvalidOperationException($"Unknown cel type '{type}'"); - } - } - - private static void ReadRawImageCel(BinaryReader reader, AsepriteFileBuilder builder, short x, short y, ushort layerIndex, byte opacity, long chunkEnd) - { - ushort width = ReadWord(reader); - ushort height = ReadWord(reader); - - int len = (int)(chunkEnd - reader.BaseStream.Position); - byte[] data = ReadBytes(reader, len); - - builder.AddRawImageCel(x, y, width, height, layerIndex, opacity, data); - } - - private static void ReadLinkedCel(BinaryReader reader, AsepriteFileBuilder builder) - { - ushort frameIndex = ReadWord(reader); - builder.AddLinkedCel(frameIndex); - } - - private static void ReadCompressedImageCel(BinaryReader reader, AsepriteFileBuilder builder, short x, short y, ushort layerIndex, byte opacity, long chunkEnd) - { - ushort width = ReadWord(reader); - ushort height = ReadWord(reader); - - int len = (int)(chunkEnd - reader.BaseStream.Position); - byte[] compressedData = ReadBytes(reader, len); - builder.AddCompressedImageCel(x, y, width, height, layerIndex, opacity, compressedData); - } - - private static void ReadCompressedTilemapCel(BinaryReader reader, AsepriteFileBuilder builder, short x, short y, ushort layerIndex, byte opacity, long chunkEnd) - { - ushort columns = ReadWord(reader); - ushort rows = ReadWord(reader); - ushort bitsPerTile = ReadWord(reader); - uint idBitmask = ReadDword(reader); - uint xFlipBitmask = ReadDword(reader); - uint yFlipBitmask = ReadDword(reader); - uint dFlipBitmask = ReadDword(reader); - IgnoreBytes(reader, 10); - - int len = (int)(chunkEnd - reader.BaseStream.Position); - byte[] compressedData = ReadBytes(reader, len); - builder.AddCompressedTilemapCel(x, y, columns, rows, layerIndex, opacity, compressedData, bitsPerTile, idBitmask, xFlipBitmask, yFlipBitmask, dFlipBitmask); - } - - private static void ReadTagsChunk(BinaryReader reader, AsepriteFileBuilder builder) - { - ushort count = ReadWord(reader); - IgnoreBytes(reader, 8); - - for (int tagNum = 0; tagNum < count; tagNum++) - { - ushort from = ReadWord(reader); - ushort to = ReadWord(reader); - byte direction = ReadByte(reader); - ushort repeat = ReadWord(reader); - IgnoreBytes(reader, 6); - ReadOnlySpan rgb = ReadBytes(reader, 3); - IgnoreByte(reader); - string name = ReadString(reader); - - builder.AddTag(from, to, direction, repeat, rgb, name); - } - } - - private static void ReadOldPalette1Chunk(BinaryReader reader, AsepriteFileBuilder builder) - { - ushort packets = ReadWord(reader); - int skip = 0; - int size = 0; - Span rgb = stackalloc byte[4]; - - for(int i = 0; i < packets; i++) - { - skip += ReadByte(reader); - size = ReadByte(reader); - - if(size == 0) - { - size = 256; - } - - builder.ResizePalette((uint)size); - - for(int c = skip; c < skip + size; c++) - { - rgb.Clear(); - rgb[0] = ReadByte(reader); - rgb[1] = ReadByte(reader); - rgb[2] = ReadByte(reader); - rgb[3] = 255; - builder.AddPaletteEntry((uint)c, rgb); - } - } - } - - private static void ReadPaletteChunk(BinaryReader reader, AsepriteFileBuilder builder) - { - const ushort HAS_NAME_FLAG = 1; - - uint newSize = ReadDword(reader); - uint from = ReadDword(reader); - uint to = ReadDword(reader); - IgnoreBytes(reader, 8); - - builder.ResizePalette(newSize); - - - for (uint entry = from; entry <= to; entry++) - { - ushort flags = ReadWord(reader); - ReadOnlySpan rgba = ReadBytes(reader, 4); - - if ((flags & HAS_NAME_FLAG) != 0) - { - IgnoreString(reader); - } - - builder.AddPaletteEntry(entry, rgba); - } - } - - private static void ReadSliceChunk(BinaryReader reader, AsepriteFileBuilder builder) - { - const uint NINE_PATCH_FLAG = 1; - const uint HAS_PIVOT_FLAG = 2; - - uint count = ReadDword(reader); - uint flags = ReadDword(reader); - IgnoreDword(reader); - string name = ReadString(reader); - - bool isNinePatch = (flags & NINE_PATCH_FLAG) != 0; - bool hasPivot = (flags & HAS_PIVOT_FLAG) != 0; - - AsepriteSliceKey[] keys = new AsepriteSliceKey[count]; - - for (uint keyNum = 0; keyNum < count; keyNum++) - { - uint start = ReadDword(reader); - int x = ReadLong(reader); - int y = ReadLong(reader); - uint width = ReadDword(reader); - uint height = ReadDword(reader); - - Rectangle bounds = new(x, y, (int)width, (int)height); - Rectangle? center = default; - Point? pivot = default; - - if (isNinePatch) - { - int cx = ReadLong(reader); - int cy = ReadLong(reader); - uint cw = ReadDword(reader); - uint ch = ReadDword(reader); - - center = new(cx, cy, (int)cw, (int)ch); - } - - if (hasPivot) - { - int px = ReadLong(reader); - int py = ReadLong(reader); - - pivot = new(px, py); - } - - AsepriteSliceKey key = new((int)start, bounds, center, pivot); - keys[keyNum] = key; - } - - builder.AddSlice(name, isNinePatch, hasPivot, keys); - } - - private static void ReadTilesetChunk(BinaryReader reader, AsepriteFileBuilder builder) - { - const uint EXTERNAL_FILE_FLAG = 1; - const uint EMBEDDED_FLAG = 2; - - uint id = ReadDword(reader); - uint flags = ReadDword(reader); - uint count = ReadDword(reader); - ushort tileWidth = ReadWord(reader); - ushort tileHeight = ReadWord(reader); - IgnoreShort(reader); - IgnoreBytes(reader, 14); - string name = ReadString(reader); - - if ((flags & EXTERNAL_FILE_FLAG) != 0) - { - throw new InvalidOperationException($"Tileset '{name}' includes tileset in external file. This is not supported at this time"); - } - - if ((flags & EMBEDDED_FLAG) == 0) - { - throw new InvalidOperationException($"Tileset '{name}' does not include tileset image in file"); - } - - uint len = ReadDword(reader); - byte[] compressedData = ReadBytes(reader, (int)len); - - builder.AddTileset(id, count, tileWidth, tileHeight, name, compressedData); - } - - private static void ReadUserDataChunk(BinaryReader reader, AsepriteFileBuilder builder, ushort lastChunkType, int tagIterator) - { - const uint HAS_TEXT_FLAG = 1; - const uint HAS_COLOR_FLAG = 2; - uint flags = ReadDword(reader); - - string? text = default; - Color? color = default; - - if ((flags & HAS_TEXT_FLAG) != 0) - { - text = ReadString(reader); - } - - if ((flags & HAS_COLOR_FLAG) != 0) - { - ReadOnlySpan rgba = ReadBytes(reader, 4); - color = new Color(rgba[0], rgba[1], rgba[2], rgba[3]); - } - - switch (lastChunkType) - { - case CHUNK_TYPE_CEL: - builder.SetLastCelUserData(text, color); - break; - case CHUNK_TYPE_LAYER: - builder.SetLastLayerUserData(text, color); - break; - case CHUNK_TYPE_SLICE: - builder.SetLastSliceUserData(text, color); - break; - case CHUNK_TYPE_TAGS: - builder.SetTagUserData(tagIterator, text, color); - break; - case CHUNK_TYPE_OLD_PALETTE_1: - // Starting in Aseprite 1.3-beta21, after the first palette chunk in the first frame, if user data is - // detected, then that is user data for the "sprite" itself - builder.SetSpriteUserData(text, color); - break; - case CHUNK_TYPE_TILESET: - // Starting in Aseprite 1.3-rc1, Tilesets can have user data, though it appears it's not settable in - // the Aseprite UI, and only settable through the LUA Scripting API within Aseprite. Regardless, - // we have to handle it - builder.SetTilesetUserData(text, color); - break; - default: - throw new InvalidOperationException($"Invalid chunk type (0x{lastChunkType:X4}) for user data"); - } - } - - private static byte ReadByte(BinaryReader reader) => reader.ReadByte(); - private static byte[] ReadBytes(BinaryReader reader, int len) => reader.ReadBytes(len); - private static ushort ReadWord(BinaryReader reader) => reader.ReadUInt16(); - private static short ReadShort(BinaryReader reader) => reader.ReadInt16(); - private static uint ReadDword(BinaryReader reader) => reader.ReadUInt32(); - private static int ReadLong(BinaryReader reader) => reader.ReadInt32(); - private static string ReadString(BinaryReader reader) => Encoding.UTF8.GetString(ReadBytes(reader, ReadWord(reader))); - - private static void IgnoreBytes(BinaryReader reader, int len) => reader.BaseStream.Position += len; - private static void IgnoreByte(BinaryReader reader) => IgnoreBytes(reader, 1); - private static void IgnoreWord(BinaryReader reader) => IgnoreBytes(reader, 2); - private static void IgnoreShort(BinaryReader reader) => IgnoreBytes(reader, 2); - private static void IgnoreDword(BinaryReader reader) => IgnoreBytes(reader, 4); - private static void IgnoreLong(BinaryReader reader) => IgnoreBytes(reader, 4); - private static void IgnoreString(BinaryReader reader) => IgnoreBytes(reader, ReadWord(reader)); -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Readers/RawAnimatedTilemapReader.cs b/source/MonoGame.Aseprite.Shared/Content/Readers/RawAnimatedTilemapReader.cs deleted file mode 100644 index 487f196a..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Readers/RawAnimatedTilemapReader.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Readers; - -/// -/// Defines a reader that reads a from a file. -/// -public static class RawAnimatedTilemapReader -{ - /// - /// Reads the from the file at the specified path. - /// - /// - /// The path and name of the file that contains the to read. - /// - /// - /// The that was read. - /// - public static RawAnimatedTilemap Read(string path) - { - using Stream stream = File.OpenRead(path); - using BinaryReader reader = new(stream); - return Read(reader); - } - - internal static RawAnimatedTilemap Read(BinaryReader reader) - { - reader.ReadMagic(); - string name = reader.ReadString(); - int tilesetCount = reader.ReadInt32(); - - RawTileset[] tilesets = new RawTileset[tilesetCount]; - - for (int i = 0; i < tilesetCount; i++) - { - tilesets[i] = reader.ReadRawTileset(); - } - - int frameCount = reader.ReadInt32(); - - RawTilemapFrame[] frames = new RawTilemapFrame[frameCount]; - - for (int i = 0; i < frameCount; i++) - { - int duration = reader.ReadInt32(); - int layerCount = reader.ReadInt32(); - - RawTilemapLayer[] layers = new RawTilemapLayer[layerCount]; - - for (int j = 0; j < layerCount; j++) - { - layers[j] = reader.ReadRawTilemapLayer(); - } - - frames[i] = new(duration, layers); - } - - return new(name, tilesets, frames); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteReader.cs b/source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteReader.cs deleted file mode 100644 index 87fba6c1..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteReader.cs +++ /dev/null @@ -1,66 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Readers; - -/// -/// Defines a reader that reads a from a file. -/// -public static class RawSpriteReader -{ - /// - /// Reads the from the file at the specified path. - /// - /// - /// The path and name of the file that contains the to read. - /// - /// - /// The that was read. - /// - public static RawSprite Read(string path) - { - using Stream stream = File.OpenRead(path); - using BinaryReader reader = new(stream); - return Read(reader); - } - - internal static RawSprite Read(BinaryReader reader) - { - reader.ReadMagic(); - - string name = reader.ReadString(); - RawTexture rawTexture = reader.ReadRawTexture(); - int count = reader.ReadInt32(); - RawSlice[] slices = new RawSlice[count]; - - for (int i = 0; i < count; i++) - { - slices[i] = reader.ReadRawSlice(); - } - - return new(name, rawTexture, slices); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteSheetReader.cs b/source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteSheetReader.cs deleted file mode 100644 index 4e7a9588..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Readers/RawSpriteSheetReader.cs +++ /dev/null @@ -1,81 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Readers; - -/// -/// Defines a reader that reads a from a file. -/// -public static class RawSpriteSheetReader -{ - /// - /// Reads the from the file at the specified path. - /// - /// - /// The path and name of the file that contains the to read. - /// - /// - /// The that was read. - /// - public static RawSpriteSheet Read(string path) - { - using Stream stream = File.OpenRead(path); - using BinaryReader reader = new(stream); - return Read(reader); - } - - internal static RawSpriteSheet Read(BinaryReader reader) - { - reader.ReadMagic(); - string name = reader.ReadString(); - RawTextureAtlas atlas = reader.ReadRawTextureAtlas(); - int tagCount = reader.ReadInt32(); - - RawAnimationTag[] tags = new RawAnimationTag[tagCount]; - - for (int i = 0; i < tagCount; i++) - { - string tagName = reader.ReadString(); - int loopCount = reader.ReadInt32(); - bool isReversed = reader.ReadBoolean(); - bool isPingPong = reader.ReadBoolean(); - int frameCount = reader.ReadInt32(); - - RawAnimationFrame[] frames = new RawAnimationFrame[frameCount]; - - for (int j = 0; j < frameCount; j++) - { - int index = reader.ReadInt32(); - int duration = reader.ReadInt32(); - frames[j] = new(index, duration); - } - - tags[i] = new(tagName, frames, loopCount, isReversed, isPingPong); - } - - return new(name, atlas, tags); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Readers/RawTextureAtlasReader.cs b/source/MonoGame.Aseprite.Shared/Content/Readers/RawTextureAtlasReader.cs deleted file mode 100644 index 2860a9dc..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Readers/RawTextureAtlasReader.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Readers; - -/// -/// Defines a reader that reads a from a file. -/// -public static class RawTextureAtlasReader -{ - /// - /// Reads the from the file at the specified path. - /// - /// - /// The path and name of the file that contains the to read. - /// - /// - /// The that was read. - /// - public static RawTextureAtlas Read(string path) - { - using Stream stream = File.OpenRead(path); - using BinaryReader reader = new(stream); - return Read(reader); - } - - internal static RawTextureAtlas Read(BinaryReader reader) - { - reader.ReadMagic(); - return reader.ReadRawTextureAtlas(); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Readers/RawTilemapReader.cs b/source/MonoGame.Aseprite.Shared/Content/Readers/RawTilemapReader.cs deleted file mode 100644 index 0fec02d2..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Readers/RawTilemapReader.cs +++ /dev/null @@ -1,74 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Readers; - -/// -/// Defines a reader that reads a from a file. -/// -public static class RawTilemapReader -{ - /// - /// Reads the from the file at the specified path. - /// - /// - /// The path and name of the file that contains the to read. - /// - /// - /// The that was read. - /// - public static RawTilemap Read(string path) - { - using Stream stream = File.OpenRead(path); - using BinaryReader reader = new(stream); - return Read(reader); - } - - internal static RawTilemap Read(BinaryReader reader) - { - reader.ReadMagic(); - string name = reader.ReadString(); - int tilesetCount = reader.ReadInt32(); - - RawTileset[] tilesets = new RawTileset[tilesetCount]; - - for (int i = 0; i < tilesetCount; i++) - { - tilesets[i] = reader.ReadRawTileset(); - } - - int layerCount = reader.ReadInt32(); - - RawTilemapLayer[] layers = new RawTilemapLayer[layerCount]; - - for (int i = 0; i < layerCount; i++) - { - layers[i] = reader.ReadRawTilemapLayer(); - } - - return new(name, layers, tilesets); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Readers/RawTilesetReader.cs b/source/MonoGame.Aseprite.Shared/Content/Readers/RawTilesetReader.cs deleted file mode 100644 index ec7f1e37..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Readers/RawTilesetReader.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Readers; - -/// -/// Defines a reader that reads a from a file. -/// -public static class RawTilesetReader -{ - /// - /// Reads the from the file at the specified path. - /// - /// - /// The path and name of the file that contains the to read. - /// - /// - /// The that was read. - /// - public static RawTileset Read(string path) - { - using Stream stream = File.OpenRead(path); - using BinaryReader reader = new(stream); - return Read(reader); - } - - internal static RawTileset Read(BinaryReader reader) - { - reader.ReadMagic(); - return reader.ReadRawTileset(); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Writers/RawAnimatedTilemapWriter.cs b/source/MonoGame.Aseprite.Shared/Content/Writers/RawAnimatedTilemapWriter.cs deleted file mode 100644 index 7582fc6d..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Writers/RawAnimatedTilemapWriter.cs +++ /dev/null @@ -1,74 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Writers; - -/// -/// Defines a writer that writes the contents of an to a file. -/// -public static class RawAnimatedTilemapWriter -{ - /// - /// Writes the contents of the given to the file at the path specified. - /// - /// - /// The path and name of the file to write the contents of the to. If no - /// file exists at this path, one will be created. If a file already exists, it will be overwritten. - /// - /// The to write. - public static void Write(string path, RawAnimatedTilemap rawAnimatedTilemap) - { - using Stream stream = File.Create(path); - using BinaryWriter writer = new(stream); - Write(writer, rawAnimatedTilemap); - } - - internal static void Write(BinaryWriter writer, RawAnimatedTilemap rawAnimatedTilemap) - { - writer.WriteMagic(); - writer.Write(rawAnimatedTilemap.Name); - writer.Write(rawAnimatedTilemap.RawTilesets.Length); - - for (int i = 0; i < rawAnimatedTilemap.RawTilesets.Length; i++) - { - writer.Write(rawAnimatedTilemap.RawTilesets[i]); - } - - writer.Write(rawAnimatedTilemap.RawTilemapFrames.Length); - - for (int i = 0; i < rawAnimatedTilemap.RawTilemapFrames.Length; i++) - { - RawTilemapFrame rawTilemapFrame = rawAnimatedTilemap.RawTilemapFrames[i]; - writer.Write(rawTilemapFrame.DurationInMilliseconds); - writer.Write(rawTilemapFrame.RawTilemapLayers.Length); - - for (int j = 0; j < rawTilemapFrame.RawTilemapLayers.Length; j++) - { - writer.Write(rawTilemapFrame.RawTilemapLayers[j]); - } - } - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteSheetWriter.cs b/source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteSheetWriter.cs deleted file mode 100644 index c635d21b..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteSheetWriter.cs +++ /dev/null @@ -1,73 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Writers; - -/// -/// Defines a writer that writes the contents of a to a file. -/// -public static class RawSpriteSheetWriter -{ - /// - /// Writes the contents of the given to the file at the path specified. - /// - /// - /// The path and name of the file to write the contents of the to. If no file - /// exists at this path, one will be created. If a file already exists, it will be overwritten. - /// - /// The to write. - public static void Write(string path, RawSpriteSheet rawSpriteSheet) - { - using Stream stream = File.Create(path); - using BinaryWriter writer = new(stream); - Write(writer, rawSpriteSheet); - } - - internal static void Write(BinaryWriter writer, RawSpriteSheet rawSpriteSheet) - { - writer.WriteMagic(); - writer.Write(rawSpriteSheet.Name); - writer.Write(rawSpriteSheet.RawTextureAtlas); - writer.Write(rawSpriteSheet.RawAnimationTags.Length); - - for (int i = 0; i < rawSpriteSheet.RawAnimationTags.Length; i++) - { - RawAnimationTag rawAnimationTag = rawSpriteSheet.RawAnimationTags[i]; - - writer.Write(rawAnimationTag.Name); - writer.Write(rawAnimationTag.LoopCount); - writer.Write(rawAnimationTag.IsReversed); - writer.Write(rawAnimationTag.IsPingPong); - writer.Write(rawAnimationTag.RawAnimationFrames.Length); - - for (int j = 0; j < rawAnimationTag.RawAnimationFrames.Length; j++) - { - writer.Write(rawAnimationTag.RawAnimationFrames[j].FrameIndex); - writer.Write(rawAnimationTag.RawAnimationFrames[j].DurationInMilliseconds); - } - } - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteWriter.cs b/source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteWriter.cs deleted file mode 100644 index 22c285e2..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Writers/RawSpriteWriter.cs +++ /dev/null @@ -1,61 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Writers; - -/// -/// Defines a writer that writes the contents of a to a file. -/// -public static class RawSpriteWriter -{ - /// - /// Writes the contents of the given to the file at the path specified. - /// - /// - /// The path and name of the file to write the contents of the to. If no file exists at - /// this path, one will be created. If a file already exists, it will be overwritten. - /// - /// The to write. - public static void Write(string path, RawSprite rawSprite) - { - using Stream stream = File.Create(path); - using BinaryWriter writer = new(stream); - Write(writer, rawSprite); - } - - internal static void Write(BinaryWriter writer, RawSprite rawSprite) - { - writer.WriteMagic(); - writer.Write(rawSprite.Name); - writer.Write(rawSprite.RawTexture); - writer.Write(rawSprite.Slices.Length); - - for (int i = 0; i < rawSprite.Slices.Length; i++) - { - writer.Write(rawSprite.Slices[i]); - } - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Writers/RawTextureAtlasWriter.cs b/source/MonoGame.Aseprite.Shared/Content/Writers/RawTextureAtlasWriter.cs deleted file mode 100644 index ea7382e7..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Writers/RawTextureAtlasWriter.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Writers; - -/// -/// Defines a writer that writes the contents of a to a file. -/// -public static class RawTextureAtlasWriter -{ - /// - /// Writes the contents of the given to the file at the path specified. - /// - /// - /// The path and name of the file to write the contents of the to. If no file - /// exists at this path, one will be created. If a file already exists, it will be overwritten. - /// - /// The to write. - public static void Write(string path, RawTextureAtlas rawTextureAtlas) - { - using Stream stream = File.Create(path); - using BinaryWriter writer = new(stream); - Write(writer, rawTextureAtlas); - } - - internal static void Write(BinaryWriter writer, RawTextureAtlas rawTextureAtlas) - { - writer.WriteMagic(); - writer.Write(rawTextureAtlas); - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Writers/RawTilemapWriter.cs b/source/MonoGame.Aseprite.Shared/Content/Writers/RawTilemapWriter.cs deleted file mode 100644 index eea84aa2..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Writers/RawTilemapWriter.cs +++ /dev/null @@ -1,67 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Writers; - -/// -/// Defines a writer that writes the contents of a to a file. -/// -public static class RawTilemapWriter -{ - /// - /// Writes the contents of the given to the file at the path specified. - /// - /// - /// The path and name of the file to write the contents of the to. If no file exists - /// at this path, one will be created. If a file already exists, it will be overwritten. - /// - /// The to write. - public static void Write(string path, RawTilemap rawTilemap) - { - using Stream stream = File.Create(path); - using BinaryWriter writer = new(stream); - Write(writer, rawTilemap); - } - - internal static void Write(BinaryWriter writer, RawTilemap rawTilemap) - { - writer.WriteMagic(); - writer.Write(rawTilemap.Name); - writer.Write(rawTilemap.RawTilesets.Length); - - for (int i = 0; i < rawTilemap.RawTilesets.Length; i++) - { - writer.Write(rawTilemap.RawTilesets[i]); - } - - writer.Write(rawTilemap.RawLayers.Length); - - for (int i = 0; i < rawTilemap.RawLayers.Length; i++) - { - writer.Write(rawTilemap.RawLayers[i]); - } - } -} diff --git a/source/MonoGame.Aseprite.Shared/Content/Writers/RawTilesetWriter.cs b/source/MonoGame.Aseprite.Shared/Content/Writers/RawTilesetWriter.cs deleted file mode 100644 index 26951a54..00000000 --- a/source/MonoGame.Aseprite.Shared/Content/Writers/RawTilesetWriter.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using MonoGame.Aseprite.RawTypes; - -namespace MonoGame.Aseprite.Content.Writers; - -/// -/// Defines a writer that writes the contents of a to a file. -/// -public static class RawTilesetWriter -{ - /// - /// Writes the contents of the given to the file at the path specified. - /// - /// - /// The path and name of the file to write the contents of the to. If no file exists - /// at this path, one will be created. If a file already exists, it will be overwritten. - /// - /// The to write. - public static void Write(string path, RawTileset rawTileset) - { - using Stream stream = File.Create(path); - using BinaryWriter writer = new(stream); - Write(writer, rawTileset); - } - - internal static void Write(BinaryWriter writer, RawTileset rawTileset) - { - writer.WriteMagic(); - writer.Write(rawTileset); - } -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimatedTilemap.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimatedTilemap.cs deleted file mode 100644 index 3d098188..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimatedTilemap.cs +++ /dev/null @@ -1,68 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines the raw data for an animated tilemap. -/// -public sealed class RawAnimatedTilemap : IEquatable -{ - private readonly RawTileset[] _rawTilesets; - private readonly RawTilemapFrame[] _rawTilemapFrames; - - /// - /// Gets the name assigned to the animated tilemap. - /// - public string Name { get; } - - /// - /// Gets a read-only span of the data for the tilesets used by the layers of the - /// animated tilemap. - /// - public ReadOnlySpan RawTilesets => _rawTilesets; - - /// - /// Gets a read-only span of the data for animated tilemap. - /// - public ReadOnlySpan RawTilemapFrames => _rawTilemapFrames; - - internal RawAnimatedTilemap(string name, RawTileset[] rawTilesets, RawTilemapFrame[] rawTilemapFrames) => - (Name, _rawTilesets, _rawTilemapFrames) = (name, rawTilesets, rawTilemapFrames); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawAnimatedTilemap? other) => other is not null - && Name == other.Name - && RawTilesets.SequenceEqual(other.RawTilesets); -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationFrame.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationFrame.cs deleted file mode 100644 index 900856f1..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationFrame.cs +++ /dev/null @@ -1,59 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of an animation frame. -/// -public sealed class RawAnimationFrame : IEquatable -{ - /// - /// Gets the index of the source frame for the animation frame. - /// - public int FrameIndex { get; } - - /// - /// Gets the duration, in milliseconds, of the animation frame. - /// - public int DurationInMilliseconds { get; } - - internal RawAnimationFrame(int frameIndex, int durationInMilliseconds) => - (FrameIndex, DurationInMilliseconds) = (frameIndex, durationInMilliseconds); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawAnimationFrame? other) => other is not null - && FrameIndex == other.FrameIndex - && DurationInMilliseconds == other.DurationInMilliseconds; -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationTag.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationTag.cs deleted file mode 100644 index 7994895b..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawAnimationTag.cs +++ /dev/null @@ -1,89 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of an animation tag. -/// -public sealed class RawAnimationTag : IEquatable -{ - private RawAnimationFrame[] _rawAnimationFrames; - - /// - /// Gets the name assigned to the animation tag. - /// - public string Name { get; } - - /// - /// Gets a read-only span of the elements that represent the frames of animation - /// for the animation tag. - /// - public ReadOnlySpan RawAnimationFrames => _rawAnimationFrames; - - /// - /// Gets a value that indicates the total number of loops/cycles of this animation that should play. - /// - /// - /// - /// 0 = infinite looping - /// - /// - /// If the animation is ping-pong, each direction of the ping-pong will count as a loop. - /// - /// - public int LoopCount { get; } - - /// - /// Gets a value that indicates whether the animation defined by the animation tag should play in reverse. - /// - public bool IsReversed { get; } - - /// - /// Gets a value that indicates whether the animation defined by the animation tag should ping-pong once - /// reaching the last frame of animation. - /// - public bool IsPingPong { get; } - - internal RawAnimationTag(string name, RawAnimationFrame[] rawAnimationFrames, int loopCount, bool isReversed, bool isPingPong) => - (Name, _rawAnimationFrames, LoopCount, IsReversed, IsPingPong) = (name, rawAnimationFrames, loopCount, isReversed, isPingPong); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawAnimationTag? other) => other is not null - && Name == other.Name - && RawAnimationFrames.SequenceEqual(other.RawAnimationFrames) - && LoopCount == other.LoopCount - && IsReversed == other.IsReversed - && IsPingPong == other.IsPingPong; -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawNinePatchSlice.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawNinePatchSlice.cs deleted file mode 100644 index 4205e266..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawNinePatchSlice.cs +++ /dev/null @@ -1,60 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a nine-patch slice. -/// -public sealed class RawNinePatchSlice : RawSlice, IEquatable -{ - - /// - /// Gets the rectangular bounds of the center of the nine-patch slice. - /// - public Rectangle CenterBounds { get; } - - internal RawNinePatchSlice(string name, Rectangle bounds, Rectangle centerBounds, Vector2 origin, Color color) - : base(name, bounds, origin, color) => CenterBounds = centerBounds; - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawNinePatchSlice? other) => other is not null - && CenterBounds == other.CenterBounds - && Name == other.Name - && Bounds == other.Bounds - && Origin == other.Origin - && Color == other.Color; -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawSlice.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawSlice.cs deleted file mode 100644 index 89e65686..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawSlice.cs +++ /dev/null @@ -1,73 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a slice. -/// -public class RawSlice : IEquatable -{ - /// - /// Gets the name assigned to the slice. - /// - public string Name { get; } - - /// - /// Gets the rectangular bounds of the slice. - /// - public Rectangle Bounds { get; } - - /// - /// Gets the x- and y-coordinate point of the slice. - /// - public Vector2 Origin { get; } - - /// - /// Gets the color of the slice. - /// - public Color Color { get; } - - internal RawSlice(string name, Rectangle bounds, Vector2 origin, Color color) => - (Name, Bounds, Origin, Color) = (name, bounds, origin, color); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawSlice? other) => other is not null - && Name == other.Name - && Bounds == other.Bounds - && Origin == other.Origin - && Color == other.Color; -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawSprite.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawSprite.cs deleted file mode 100644 index 62472652..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawSprite.cs +++ /dev/null @@ -1,67 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a sprite. -/// -public sealed class RawSprite : IEquatable -{ - private RawSlice[] _slices; - - /// - /// Gets the name assigned to the sprite. - /// - public string Name { get; } - - /// - /// Gets the raw texture that represents the source texture for the sprite. - /// - public RawTexture RawTexture { get; } - - /// - /// Gets a read-only span of the raw slice values the texture region that will be generated for the sprite. - /// - public ReadOnlySpan Slices => _slices; - - internal RawSprite(string name, RawTexture rawTexture, RawSlice[] slices) => - (Name, RawTexture, _slices) = (name, rawTexture, slices); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawSprite? other) => other is not null - && Name == other.Name - && RawTexture.Equals(other.RawTexture) - && Slices.SequenceEqual(other.Slices); -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawSpriteSheet.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawSpriteSheet.cs deleted file mode 100644 index b3678fd8..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawSpriteSheet.cs +++ /dev/null @@ -1,67 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a spritesheet. -/// -public sealed class RawSpriteSheet : IEquatable -{ - private RawAnimationTag[] _rawAnimationTags; - - /// - /// Gets the name assigned to the spritesheet. - /// - public string Name { get; } - - /// - /// Gets raw texture atlas that represents the source texture atlas for the spritesheet. - /// - public RawTextureAtlas RawTextureAtlas { get; } - - /// - /// Gets a read-only span of the raw animation tags that represent the animations tags for the spritesheet. - /// - public ReadOnlySpan RawAnimationTags => _rawAnimationTags; - - internal RawSpriteSheet(string name, RawTextureAtlas rawAtlas, RawAnimationTag[] rawAnimationTags) => - (Name, RawTextureAtlas, _rawAnimationTags) = (name, rawAtlas, rawAnimationTags); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawSpriteSheet? other) => other is not null - && Name == other.Name - && RawTextureAtlas.Equals(other.RawTextureAtlas) - && RawAnimationTags.SequenceEqual(other.RawAnimationTags); -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTexture.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTexture.cs deleted file mode 100644 index faf46866..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTexture.cs +++ /dev/null @@ -1,75 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a texture. -/// -public sealed class RawTexture : IEquatable -{ - private Color[] _pixels; - - /// - /// Get the name assigned to the texture. - /// - public string Name { get; } - - /// - /// Gets a read-only span of the color values that represent the pixel data for the texture. - /// - public ReadOnlySpan Pixels => _pixels; - - /// - /// Gets the width, in pixels of the texture. - /// - public int Width { get; } - - /// - /// Gets the height, in pixels of the texture. - /// - public int Height { get; } - - internal RawTexture(string name, Color[] pixels, int width, int height) => - (Name, _pixels, Width, Height) = (name, pixels, width, height); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawTexture? other) => other is not null - && Name == other.Name - && Pixels.SequenceEqual(other.Pixels) - && Width == other.Width - && Height == other.Height; -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTextureAtlas.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTextureAtlas.cs deleted file mode 100644 index e78205b7..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTextureAtlas.cs +++ /dev/null @@ -1,67 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a texture atlas. -/// -public sealed class RawTextureAtlas : IEquatable -{ - private RawTextureRegion[] _rawTextureRegions; - - /// - /// Gets the name assigned to the texture atlas. - /// - public string Name { get; } - - /// - /// Gets the raw texture that represents the source texture of the texture atlas. - /// - public RawTexture RawTexture { get; } - - /// - /// Gets a read-only span of the raw texture regions that represent the texture regions for the texture atlas. - /// - public ReadOnlySpan RawTextureRegions => _rawTextureRegions; - - internal RawTextureAtlas(string name, RawTexture rawTexture, RawTextureRegion[] rawRegions) => - (Name, RawTexture, _rawTextureRegions) = (name, rawTexture, rawRegions); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawTextureAtlas? other) => other is not null - && Name == other.Name - && RawTexture.Equals(other.RawTexture) - && RawTextureRegions.SequenceEqual(other.RawTextureRegions); -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTextureRegion.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTextureRegion.cs deleted file mode 100644 index 2c36e13c..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTextureRegion.cs +++ /dev/null @@ -1,69 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a texture region. -/// -public sealed class RawTextureRegion : IEquatable -{ - private RawSlice[] _slices; - - /// - /// Gets the name assigned to the texture region. - /// - public string Name { get; } - - /// - /// Gets the rectangular bounds of the texture region. - /// - public Rectangle Bounds { get; } - - /// - /// Gets a read-only span of the slices for the texture region. - /// - public ReadOnlySpan Slices => _slices; - - internal RawTextureRegion(string name, Rectangle bounds, RawSlice[] slices) => - (Name, Bounds, _slices) = (name, bounds, slices); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawTextureRegion? other) => other is not null - && Name == other.Name - && Bounds == other.Bounds - && Slices.SequenceEqual(other.Slices); -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemap.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemap.cs deleted file mode 100644 index 9f840ae8..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemap.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a tilemap. -/// -public sealed class RawTilemap : IEquatable -{ - private RawTileset[] _rawTilesets; - private RawTilemapLayer[] _rawLayers; - - /// - /// Gets the name assigned to the tilemap. - /// - public string Name { get; } - - /// - /// Gets a read-only span of the elements that represent the tilesets used by the - /// tilemap layers in the tilemap. - /// - public ReadOnlySpan RawTilesets => _rawTilesets; - - /// - /// Gets a read-only span of the that represent the tilemap layers for the - /// tilemap. - /// - public ReadOnlySpan RawLayers => _rawLayers; - - internal RawTilemap(string name, RawTilemapLayer[] rawLayers, RawTileset[] rawTilesets) => - (Name, _rawTilesets, _rawLayers) = (name, rawTilesets, rawLayers); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawTilemap? other) => other is not null - && Name == other.Name - && RawTilesets.SequenceEqual(other.RawTilesets) - && RawLayers.SequenceEqual(other.RawLayers); -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapFrame.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapFrame.cs deleted file mode 100644 index d1f6d3f7..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapFrame.cs +++ /dev/null @@ -1,62 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a tilemap frame. -/// -public sealed class RawTilemapFrame : IEquatable -{ - private RawTilemapLayer[] _rawTilemapLayers; - - /// - /// Gets the duration, in milliseconds, of the tilemap frame. - /// - public int DurationInMilliseconds { get; } - - /// - /// Gets a read-only span of the that represent the tilemap layers for the - /// tilemap frame. - /// - public ReadOnlySpan RawTilemapLayers => _rawTilemapLayers; - - internal RawTilemapFrame(int durationInMilliseconds, RawTilemapLayer[] rawLayers) => - (DurationInMilliseconds, _rawTilemapLayers) = (durationInMilliseconds, rawLayers); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawTilemapFrame? other) => other is not null - && DurationInMilliseconds == other.DurationInMilliseconds - && RawTilemapLayers.SequenceEqual(other.RawTilemapLayers); -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapLayer.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapLayer.cs deleted file mode 100644 index bdf748cd..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapLayer.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -using Microsoft.Xna.Framework; - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a tilemap layer. -/// -public sealed class RawTilemapLayer : IEquatable -{ - private RawTilemapTile[] _rawTilemapTiles; - - /// - /// Gets the name assigned to the tilemap layer. - /// - public string Name { get; } - - /// - /// Gets the id of the source tileset used by the tilemap layer. - /// - public int TilesetID { get; } - - /// - /// Gets the total number of columns in tilemap layer. - /// - public int Columns { get; } - - /// - /// Gets the total number of rows in tilemap layer. - /// - public int Rows { get; } - - /// - /// Gets a read-only span of the elements that represent the tiles for the tilemap - /// layer. - /// - public ReadOnlySpan RawTilemapTiles => _rawTilemapTiles; - - /// - /// Gets the offset of the tilemap layer. - /// - public Point Offset { get; } - - internal RawTilemapLayer(string name, int tilesetID, int columns, int rows, RawTilemapTile[] rawTilemapTiles, Point offset) => - (Name, TilesetID, Columns, Rows, _rawTilemapTiles, Offset) = (name, tilesetID, columns, rows, rawTilemapTiles, offset); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawTilemapLayer? other) => other is not null - && Name == other.Name - && TilesetID == other.TilesetID - && Columns == other.Columns - && Rows == other.Rows - && RawTilemapTiles.SequenceEqual(other.RawTilemapTiles) - && Offset == other.Offset; -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapTile.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapTile.cs deleted file mode 100644 index 2a52ebc4..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTilemapTile.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a tilemap tile. -/// -public sealed class RawTilemapTile : IEquatable -{ - /// - /// Gets the ID of the source tile in the tileset that represents the texture region used by the tilemap tile. - /// - public int TilesetTileID { get; } - - /// - /// Gets a value that indicates if the tilemap tile should be flipped horizontally. - /// - public bool FlipHorizontally { get; } - - /// - /// Gets a value that indicates if the tilemap tile should be flipped vertically. - /// - public bool FlipVertically { get; } - - /// - /// Gets a value that indicates if the tilemap tile should be flipped diagonally. - /// - public bool FlipDiagonally { get; } - - internal RawTilemapTile(int tilesetTileID, bool flipHorizontally, bool flipVertically, bool flipDiagonally) => - (TilesetTileID, FlipHorizontally, FlipVertically, FlipDiagonally) = (tilesetTileID, flipHorizontally, flipVertically, flipDiagonally); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this - /// ; otherwise, . - /// - public bool Equals(RawTilemapTile? other) => other is not null - && TilesetTileID == other.TilesetTileID - && FlipHorizontally == other.FlipHorizontally - && FlipVertically == other.FlipVertically; -} diff --git a/source/MonoGame.Aseprite.Shared/RawTypes/RawTileset.cs b/source/MonoGame.Aseprite.Shared/RawTypes/RawTileset.cs deleted file mode 100644 index cbc7ff4a..00000000 --- a/source/MonoGame.Aseprite.Shared/RawTypes/RawTileset.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -namespace MonoGame.Aseprite.RawTypes; - -/// -/// Defines a class that represents the raw values of a tileset. -/// -public sealed class RawTileset : IEquatable -{ - /// - /// Gets the unique ID assigned to the tileset. - /// - public int ID { get; } - - /// - /// Gets the name assigned to the tileset. - /// - public string Name { get; } - - /// - /// Gets the that represents the source texture of the tileset. - /// - public RawTexture RawTexture { get; } - - /// - /// Gets the width, in pixels, of each tile in the tileset. - /// - public int TileWidth { get; } - - /// - /// Gets the height, in pixels, of each tile in the tileset. - /// - public int TileHeight { get; } - - internal RawTileset(int id, string name, RawTexture rawTexture, int tileWidth, int tileHeight) => - (ID, Name, RawTexture, TileWidth, TileHeight) = (id, name, rawTexture, tileWidth, tileHeight); - - /// - /// Returns a value that indicates if the given is equal to this - /// . - /// - /// - /// The other to check for equality with this . - /// - /// - /// if the given is equal to this ; - /// otherwise, . - /// - public bool Equals(RawTileset? other) => other is not null - && Name == other.Name - && RawTexture.Equals(other.RawTexture) - && TileWidth == other.TileWidth - && TileHeight == other.TileHeight; -} diff --git a/source/MonoGame.Aseprite.Shared/Utilities/BlendFunctions.cs b/source/MonoGame.Aseprite.Shared/Utilities/BlendFunctions.cs deleted file mode 100644 index a1207685..00000000 --- a/source/MonoGame.Aseprite.Shared/Utilities/BlendFunctions.cs +++ /dev/null @@ -1,555 +0,0 @@ -/* ---------------------------------------------------------------------------- -MIT License - -Copyright (c) 2018-2023 Christopher Whitley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ----------------------------------------------------------------------------- */ - -// ============================================================================= -// Blend Functions are ported from C++ to C# from Aseprite source code. -// Aseprite licensed is as follows -// -// Copyright (c) 2018-2022 Igara Studio S.A. -// Copyright (c) 2001-2018 David Capello - -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// ============================================================================= - -using Microsoft.Xna.Framework; -using MonoGame.Aseprite.AsepriteTypes; - -namespace MonoGame.Aseprite.Utilities; - -internal static class BlendFunctions -{ - private const byte RGBA_R_SHIFT = 0; - private const byte RGBA_G_SHIFT = 8; - private const byte RGBA_B_SHIFT = 16; - private const byte RGBA_A_SHIFT = 24; - private const uint RGBA_R_MASK = 0x000000ff; - private const uint RGBA_G_MASK = 0x0000ff00; - private const uint RGBA_B_MASK = 0x00ff0000; - private const uint RGBA_RGB_MASK = 0x00ffffff; - private const uint RGBA_A_MASK = 0xff000000; - - internal static Color Blend(AsepriteBlendMode mode, Color backdrop, Color source, int opacity) - { - if (backdrop.A == 0 && source.A == 0) - { - return Color.Transparent; - } - else if (backdrop.A == 0) - { - return source; - } - else if (source.A == 0) - { - return backdrop; - } - - uint b = RGBA(backdrop.R, backdrop.G, backdrop.B, backdrop.A); - uint s = RGBA(source.R, source.G, source.B, source.A); - - uint blended = mode switch - { - AsepriteBlendMode.Normal => Normal(b, s, opacity), - AsepriteBlendMode.Multiply => Multiply(b, s, opacity), - AsepriteBlendMode.Screen => Screen(b, s, opacity), - AsepriteBlendMode.Overlay => Overlay(b, s, opacity), - AsepriteBlendMode.Darken => Darken(b, s, opacity), - AsepriteBlendMode.Lighten => Lighten(b, s, opacity), - AsepriteBlendMode.ColorDodge => ColorDodge(b, s, opacity), - AsepriteBlendMode.ColorBurn => ColorBurn(b, s, opacity), - AsepriteBlendMode.HardLight => HardLight(b, s, opacity), - AsepriteBlendMode.SoftLight => SoftLight(b, s, opacity), - AsepriteBlendMode.Difference => Difference(b, s, opacity), - AsepriteBlendMode.Exclusion => Exclusion(b, s, opacity), - AsepriteBlendMode.Hue => HslHue(b, s, opacity), - AsepriteBlendMode.Saturation => HslSaturation(b, s, opacity), - AsepriteBlendMode.Color => HslColor(b, s, opacity), - AsepriteBlendMode.Luminosity => HslLuminosity(b, s, opacity), - AsepriteBlendMode.Addition => Addition(b, s, opacity), - AsepriteBlendMode.Subtract => Subtract(b, s, opacity), - AsepriteBlendMode.Divide => Divide(b, s, opacity), - _ => throw new InvalidOperationException($"Unknown blend mode '{mode}'") - }; - - byte red = GetR(blended); - byte green = GetG(blended); - byte blue = GetB(blended); - byte alpha = GetA(blended); - - return new Color(red, green, blue, alpha); - } - - private static uint RGBA(int r, int g, int b, int a) => (uint)r << RGBA_R_SHIFT | - (uint)g << RGBA_G_SHIFT | - (uint)b << RGBA_B_SHIFT | - (uint)a << RGBA_A_SHIFT; - - private static byte GetR(uint value) => (byte)((value >> RGBA_R_SHIFT) & 0xFF); - private static byte GetG(uint value) => (byte)((value >> RGBA_G_SHIFT) & 0xFF); - private static byte GetB(uint value) => (byte)((value >> RGBA_B_SHIFT) & 0xFF); - private static byte GetA(uint value) => (byte)((value >> RGBA_A_SHIFT) & 0xFF); - - private static double Sat(double r, double g, double b) => Math.Max(r, Math.Max(g, b)) - Math.Min(r, Math.Min(g, b)); - - private static double Lum(double r, double g, double b) => 0.3 * r + 0.59 * g + 0.11 * b; - - private static void SetSat(ref double r, ref double g, ref double b, double s) - { - ref double MIN(ref double x, ref double y) => ref (x < y ? ref x : ref y); - ref double MAX(ref double x, ref double y) => ref (x > y ? ref x : ref y); - ref double MID(ref double x, ref double y, ref double z) => - ref (x > y ? ref (y > z ? ref y : ref (x > z ? ref z : ref x)) : ref (y > z ? ref (z > x ? ref z : ref x) : ref y)); - - ref double min = ref MIN(ref r, ref MIN(ref g, ref b)); - ref double mid = ref MID(ref r, ref g, ref b); - ref double max = ref MAX(ref r, ref MAX(ref g, ref b)); - - if (max > min) - { - mid = ((mid - min) * s) / (max - min); - max = s; - } - else - { - mid = max = 0; - } - - min = 0; - } - - private static void SetLum(ref double r, ref double g, ref double b, double l) - { - double d = l - Lum(r, g, b); - r += d; - g += d; - b += d; - ClipColor(ref r, ref g, ref b); - } - - private static void ClipColor(ref double r, ref double g, ref double b) - { - double l = Lum(r, g, b); - double n = Math.Min(r, Math.Min(g, b)); - double x = Math.Max(r, Math.Max(g, b)); - - if (n < 0) - { - r = l + (((r - l) * l) / (l - n)); - g = l + (((g - l) * l) / (l - n)); - b = l + (((b - l) * l) / (l - n)); - } - - if (x > 1) - { - r = l + (((r - l) * (1 - l)) / (x - l)); - g = l + (((g - l) * (1 - l)) / (x - l)); - b = l + (((b - l) * (1 - l)) / (x - l)); - } - } - - internal static byte MUL_UN8(int a, int b) - { - int t = (a * b) + 0x80; - return (byte)(((t >> 8) + t) >> 8); - } - - internal static byte DIV_UN8(int a, int b) - { - return (byte)(((ushort)a * 0xFF + (b / 2)) / b); - } - - private static uint Normal(uint backdrop, uint src, int opacity) - { - if ((backdrop & RGBA_A_MASK) == 0) - { - int a = GetA(src); - a = MUL_UN8(a, opacity); - a <<= RGBA_A_SHIFT; - return (uint)((src & RGBA_RGB_MASK) | (uint)a); - } - else if ((src & RGBA_A_MASK) == 0) - { - return backdrop; - } - - int Br = GetR(backdrop); - int Bg = GetG(backdrop); - int Bb = GetB(backdrop); - int Ba = GetA(backdrop); - - int Sr = GetR(src); - int Sg = GetG(src); - int Sb = GetB(src); - int Sa = GetA(src); - Sa = MUL_UN8(Sa, opacity); - - - int Ra = Sa + Ba - MUL_UN8(Ba, Sa); - - int Rr = Br + (Sr - Br) * Sa / Ra; - int Rg = Bg + (Sg - Bg) * Sa / Ra; - int Rb = Bb + (Sb - Bb) * Sa / Ra; - - return RGBA(Rr, Rg, Rb, Ra); - } - - private static uint Multiply(uint backdrop, uint source, int opacity) - { - int r = MUL_UN8(GetR(backdrop), GetR(source)); - int g = MUL_UN8(GetG(backdrop), GetG(source)); - int b = MUL_UN8(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Screen(uint backdrop, uint source, int opacity) - { - int r = GetR(backdrop) + GetR(source) - MUL_UN8(GetR(backdrop), GetR(source)); - int g = GetG(backdrop) + GetG(source) - MUL_UN8(GetG(backdrop), GetG(source)); - int b = GetB(backdrop) + GetB(source) - MUL_UN8(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Overlay(uint backdrop, uint source, int opacity) - { - int overlay(int b, int s) - { - if (b < 128) - { - b <<= 1; - return MUL_UN8(s, b); - } - else - { - b = (b << 1) - 255; - return s + b - MUL_UN8(s, b); - } - } - - int r = overlay(GetR(backdrop), GetR(source)); - int g = overlay(GetG(backdrop), GetG(source)); - int b = overlay(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Darken(uint backdrop, uint source, int opacity) - { - int blend(int b, int s) => Math.Min(b, s); - - int r = blend(GetR(backdrop), GetR(source)); - int g = blend(GetG(backdrop), GetG(source)); - int b = blend(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Lighten(uint backdrop, uint source, int opacity) - { - int lighten(int b, int s) => Math.Max(b, s); - - int r = lighten(GetR(backdrop), GetR(source)); - int g = lighten(GetG(backdrop), GetG(source)); - int b = lighten(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint ColorDodge(uint backdrop, uint source, int opacity) - { - int dodge(int b, int s) - { - if (b == 0) - { - return 0; - } - - s = 255 - s; - - if (b >= s) - { - return 255; - } - else - { - return DIV_UN8(b, s); - } - } - - int r = dodge(GetR(backdrop), GetR(source)); - int g = dodge(GetG(backdrop), GetG(source)); - int b = dodge(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint ColorBurn(uint backdrop, uint source, int opacity) - { - int burn(int b, int s) - { - if (b == 255) - { - return 255; - } - - b = (255 - b); - - if (b >= s) - { - return 0; - } - else - { - return 255 - DIV_UN8(b, s); - } - } - - int r = burn(GetR(backdrop), GetR(source)); - int g = burn(GetG(backdrop), GetG(source)); - int b = burn(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - // Not working - private static uint HardLight(uint backdrop, uint source, int opacity) - { - int hardlight(int b, int s) - { - if (s < 128) - { - s <<= 1; - return MUL_UN8(b, s); - } - else - { - s = (s << 1) - 255; - return b + s - MUL_UN8(b, s); - } - } - - int r = hardlight(GetR(backdrop), GetR(source)); - int g = hardlight(GetG(backdrop), GetG(source)); - int b = hardlight(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint SoftLight(uint backdrop, uint source, int opacity) - { - int softlight(int _b, int _s) - { - double b = _b / 255.0; - double s = _s / 255.0; - double r, d; - - if (b <= 0.25) - { - d = ((16 * b - 12) * b + 4) * b; - } - else - { - d = Math.Sqrt(b); - } - - if (s <= 0.5) - { - r = b - (1.0 - 2.0 * s) * b * (1.0 - b); - } - else - { - r = b + (2.0 * s - 1.0) * (d - b); - } - - return (int)(r * 255 + 0.5); - } - - int r = softlight(GetR(backdrop), GetR(source)); - int g = softlight(GetG(backdrop), GetG(source)); - int b = softlight(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Difference(uint backdrop, uint source, int opacity) - { - int difference(int b, int s) - { - return Math.Abs(b - s); - } - - int r = difference(GetR(backdrop), GetR(source)); - int g = difference(GetG(backdrop), GetG(source)); - int b = difference(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Exclusion(uint backdrop, uint source, int opacity) - { - int exclusion(int b, int s) - { - return b + s - 2 * MUL_UN8(b, s); - } - - int r = exclusion(GetR(backdrop), GetR(source)); - int g = exclusion(GetG(backdrop), GetG(source)); - int b = exclusion(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint HslHue(uint backdrop, uint source, int opacity) - { - double r = GetR(backdrop) / 255.0; - double g = GetG(backdrop) / 255.0; - double b = GetB(backdrop) / 255.0; - double s = Sat(r, g, b); - double l = Lum(r, g, b); - - r = GetR(source) / 255.0; - g = GetG(source) / 255.0; - b = GetB(source) / 255.0; - - SetSat(ref r, ref g, ref b, s); - SetLum(ref r, ref g, ref b, l); - - uint src = RGBA((int)(255.0 * r), (int)(255.0 * g), (int)(255.0 * b), 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint HslSaturation(uint backdrop, uint source, int opacity) - { - double r = GetR(source) / 255.0; - double g = GetG(source) / 255.0; - double b = GetB(source) / 255.0; - double s = Sat(r, g, b); - - r = GetR(backdrop) / 255.0; - g = GetG(backdrop) / 255.0; - b = GetB(backdrop) / 255.0; - double l = Lum(r, g, b); - - SetSat(ref r, ref g, ref b, s); - SetLum(ref r, ref g, ref b, l); - - uint src = RGBA((int)(255.0 * r), (int)(255.0 * g), (int)(255.0 * b), 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint HslColor(uint backdrop, uint source, int opacity) - { - double r = GetR(backdrop) / 255.0; - double g = GetG(backdrop) / 255.0; - double b = GetB(backdrop) / 255.0; - double l = Lum(r, g, b); - - r = GetR(source) / 255.0; - g = GetG(source) / 255.0; - b = GetB(source) / 255.0; - - SetLum(ref r, ref g, ref b, l); - - uint src = RGBA((int)(255.0 * r), (int)(255.0 * g), (int)(255.0 * b), 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint HslLuminosity(uint backdrop, uint source, int opacity) - { - double r = GetR(source) / 255.0; - double g = GetG(source) / 255.0; - double b = GetB(source) / 255.0; - double l = Lum(r, g, b); - - r = GetR(backdrop) / 255.0; - g = GetG(backdrop) / 255.0; - b = GetB(backdrop) / 255.0; - - SetLum(ref r, ref g, ref b, l); - - uint src = RGBA((int)(255.0 * r), (int)(255.0 * g), (int)(255.0 * b), 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Addition(uint backdrop, uint source, int opacity) - { - int r = GetR(backdrop) + GetR(source); - int g = GetG(backdrop) + GetG(source); - int b = GetB(backdrop) + GetB(source); - uint src = RGBA(Math.Min(r, 255), - Math.Min(g, 255), - Math.Min(b, 255), 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Subtract(uint backdrop, uint source, int opacity) - { - int r = GetR(backdrop) - GetR(source); - int g = GetG(backdrop) - GetG(source); - int b = GetB(backdrop) - GetB(source); - uint src = RGBA(Math.Max(r, 0), Math.Max(g, 0), Math.Max(b, 0), 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } - - private static uint Divide(uint backdrop, uint source, int opacity) - { - int divide(int b, int s) - { - if (b == 0) - { - return 0; - } - else if (b >= s) - { - return 255; - } - else - { - return DIV_UN8(b, s); - } - } - int r = divide(GetR(backdrop), GetR(source)); - int g = divide(GetG(backdrop), GetG(source)); - int b = divide(GetB(backdrop), GetB(source)); - uint src = RGBA(r, g, b, 0) | (source & RGBA_A_MASK); - return Normal(backdrop, src, opacity); - } -} diff --git a/source/MonoGame.Aseprite/AsepriteFileExtensions.cs b/source/MonoGame.Aseprite/AsepriteFileExtensions.cs index a41c514e..1c33943b 100644 --- a/source/MonoGame.Aseprite/AsepriteFileExtensions.cs +++ b/source/MonoGame.Aseprite/AsepriteFileExtensions.cs @@ -44,7 +44,7 @@ public static class AsepriteFileExtensions /// Thrown if is less than zero or greater than or equal to the total number of /// frames in the aseprite file. /// - public static Sprite CreateSprite(this AsepriteFile aseFile, GraphicsDevice device, int frameIndex, ProcessorOptions options) + public static Sprite CreateSprite(this AsepriteFile aseFile, GraphicsDevice device, int frameIndex, ProcessorOptions? options = null) { ArgumentNullException.ThrowIfNull(aseFile); ArgumentNullException.ThrowIfNull(device); @@ -54,10 +54,10 @@ public static Sprite CreateSprite(this AsepriteFile aseFile, GraphicsDevice devi Texture2D texture = aseSprite.Texture.ToTexture2D(device); TextureRegion region = new TextureRegion(texture.Name, texture, texture.Bounds); - Parallel.For(0, aseSprite.Slices.Length, new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, i => + for (int i = 0; i < aseSprite.Slices.Length; i++) { AddSliceToRegion(region, aseSprite.Slices[i]); - }); + } return new Sprite(aseSprite.Name, region); } @@ -76,7 +76,7 @@ public static Sprite CreateSprite(this AsepriteFile aseFile, GraphicsDevice devi /// /// Thrown if the parameter is . /// - public static TextureAtlas CreateTextureAtlas(this AsepriteFile aseFile, GraphicsDevice device, ProcessorOptions options) + public static TextureAtlas CreateTextureAtlas(this AsepriteFile aseFile, GraphicsDevice device, ProcessorOptions? options = null) { ArgumentNullException.ThrowIfNull(aseFile); ArgumentNullException.ThrowIfNull(device); @@ -103,7 +103,7 @@ public static TextureAtlas CreateTextureAtlas(this AsepriteFile aseFile, Graphic /// /// Thrown if the parameter is . /// - public static SpriteSheet CreateSpriteSheet(this AsepriteFile aseFile, GraphicsDevice device, ProcessorOptions options) + public static SpriteSheet CreateSpriteSheet(this AsepriteFile aseFile, GraphicsDevice device, ProcessorOptions? options = null) { ArgumentNullException.ThrowIfNull(aseFile); ArgumentNullException.ThrowIfNull(device); @@ -115,7 +115,7 @@ public static SpriteSheet CreateSpriteSheet(this AsepriteFile aseFile, GraphicsD GenerateRegions(atlas, aseSheet.TextureAtlas); SpriteSheet sheet = new SpriteSheet(atlas.Name, atlas); - Parallel.For(0, aseSheet.Tags.Length, new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, i => + for (int i = 0; i < aseSheet.Tags.Length; i++) { AseTag aseTag = aseSheet.Tags[i]; sheet.CreateAnimationTag(aseTag.Name, builder => @@ -124,13 +124,14 @@ public static SpriteSheet CreateSpriteSheet(this AsepriteFile aseFile, GraphicsD .IsReversed(aseTag.IsReversed) .IsPingPong(aseTag.IsPingPong); - Parallel.For(0, aseTag.Frames.Length, new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, j => + for (int j = 0; j < aseTag.Frames.Length; j++) { AseAnimationFrame aseAnimationFrame = aseTag.Frames[j]; builder.AddFrame(aseAnimationFrame.FrameIndex, aseAnimationFrame.Duration); - }); + } }); - }); + } + return sheet; } @@ -229,7 +230,7 @@ public static Tileset CreateTileset(this AseTileset aseTileset, GraphicsDevice d /// /// throw if is . /// - public static Tilemap CreateTilemap(this AsepriteFile aseFile, GraphicsDevice device, int frameIndex, ProcessorOptions options) + public static Tilemap CreateTilemap(this AsepriteFile aseFile, GraphicsDevice device, int frameIndex, ProcessorOptions? options = null) { ArgumentNullException.ThrowIfNull(aseFile); ArgumentNullException.ThrowIfNull(device); @@ -239,7 +240,7 @@ public static Tilemap CreateTilemap(this AsepriteFile aseFile, GraphicsDevice de Tilemap tilemap = new Tilemap(aseTilemap.Name); Dictionary tilesets = GenereateTilesets(device, aseTilemap); - Parallel.For(0, aseTilemap.Layers.Length, new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, i => + for (int i = 0; i < aseTilemap.Layers.Length; i++) { AseTilemapLayer aseTilemapLayer = aseTilemap.Layers[i]; Tileset tileset = tilesets[aseTilemapLayer.TilesetID]; @@ -249,7 +250,7 @@ public static Tilemap CreateTilemap(this AsepriteFile aseFile, GraphicsDevice de aseTilemapLayer.Rows, aseTilemapLayer.Offset.ToXnaVector2()); - Parallel.For(0, aseTilemapLayer.Tiles.Length, new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, t => + for (int t = 0; t < aseTilemapLayer.Tiles.Length; t++) { AseTilemapTile aseTilemapTile = aseTilemapLayer.Tiles[t]; tilemapLayer.SetTile(t, @@ -257,8 +258,8 @@ public static Tilemap CreateTilemap(this AsepriteFile aseFile, GraphicsDevice de aseTilemapTile.FlipHorizontally, aseTilemapTile.FlipVertically, aseTilemapTile.FlipDiagonally); - }); - }); + } + } return tilemap; } @@ -277,7 +278,7 @@ public static Tilemap CreateTilemap(this AsepriteFile aseFile, GraphicsDevice de /// /// throw if is . /// - public static AnimatedTilemap CreateAnimatedTilemap(this AsepriteFile aseFile, GraphicsDevice device, ProcessorOptions options) + public static AnimatedTilemap CreateAnimatedTilemap(this AsepriteFile aseFile, GraphicsDevice device, ProcessorOptions? options = null) { ArgumentNullException.ThrowIfNull(aseFile); ArgumentNullException.ThrowIfNull(device); @@ -288,7 +289,7 @@ public static AnimatedTilemap CreateAnimatedTilemap(this AsepriteFile aseFile, G Dictionary tilesets = new Dictionary(); ParallelOptions parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }; - Parallel.For(0, aseAnimatedTilemap.Tilesets.Length, parallelOptions, i => + for (int i = 0; i < aseAnimatedTilemap.Tilesets.Length; i++) { AseTileset aseTileset = aseAnimatedTilemap.Tilesets[i]; Texture2D texture = aseTileset.Texture.ToTexture2D(device); @@ -297,14 +298,14 @@ public static AnimatedTilemap CreateAnimatedTilemap(this AsepriteFile aseFile, G aseTileset.TileSize.Width, aseTileset.TileSize.Height); tilesets.Add(aseTileset.ID, tileset); - }); + } - Parallel.For(0, aseAnimatedTilemap.Frames.Length, parallelOptions, i => + for (int i = 0; i < aseAnimatedTilemap.Frames.Length; i++) { AseTilemapFrame aseTilemapFrame = aseAnimatedTilemap.Frames[i]; AnimatedTilemapFrame animatedTilemapFrame = animatedTilemap.CreateFrame(aseTilemapFrame.Duration); - Parallel.For(0, aseTilemapFrame.Layers.Length, parallelOptions, l => + for (int l = 0; l < aseTilemapFrame.Layers.Length; l++) { AseTilemapLayer aseTilemapLayer = aseTilemapFrame.Layers[l]; TilemapLayer tilemapLayer = animatedTilemapFrame.CreateLayer(aseTilemapLayer.Name, @@ -313,7 +314,7 @@ public static AnimatedTilemap CreateAnimatedTilemap(this AsepriteFile aseFile, G aseTilemapLayer.Rows, aseTilemapLayer.Offset.ToXnaVector2()); - Parallel.For(0, aseTilemapLayer.Tiles.Length, parallelOptions, t => + for (int t = 0; t < aseTilemapLayer.Tiles.Length; t++) { AseTilemapTile aseTilemapTile = aseTilemapLayer.Tiles[t]; tilemapLayer.SetTile(t, @@ -321,9 +322,10 @@ public static AnimatedTilemap CreateAnimatedTilemap(this AsepriteFile aseFile, G aseTilemapTile.FlipHorizontally, aseTilemapTile.FlipVertically, aseTilemapTile.FlipDiagonally); - }); - }); - }); + } + } + } + return animatedTilemap; } @@ -331,18 +333,17 @@ public static AnimatedTilemap CreateAnimatedTilemap(this AsepriteFile aseFile, G private static void GenerateRegions(TextureAtlas atlas, AseTextureAtlas aseAtlas) { - ParallelOptions options = new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }; - - Parallel.For(0, aseAtlas.Regions.Length, options, i => + for (int i = 0; i < aseAtlas.Regions.Length; i++) { AseTextureRegion aseRegion = aseAtlas.Regions[i]; TextureRegion region = atlas.CreateRegion(aseRegion.Name, aseRegion.Bounds.ToXnaRectangle()); - Parallel.For(0, aseRegion.Slices.Length, options, i => + for (int j = 0; j < aseRegion.Slices.Length; j++) { - AddSliceToRegion(region, aseRegion.Slices[i]); - }); - }); + AddSliceToRegion(region, aseRegion.Slices[j]); + } + } + } private static void AddSliceToRegion(TextureRegion region, AseSlice aseSlice) @@ -367,7 +368,7 @@ private static void AddSliceToRegion(TextureRegion region, AseSlice aseSlice) private static Dictionary GenereateTilesets(GraphicsDevice device, AseTilemap aseTilemap) { Dictionary result = new Dictionary(); - Parallel.For(0, aseTilemap.Tilesets.Length, new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, i => + for (int i = 0; i < aseTilemap.Tilesets.Length; i++) { AseTileset aseTileset = aseTilemap.Tilesets[i]; Texture2D texture = aseTileset.Texture.ToTexture2D(device); @@ -376,7 +377,8 @@ private static Dictionary GenereateTilesets(GraphicsDevice device, aseTileset.TileSize.Width, aseTileset.TileSize.Height); result.Add(aseTileset.ID, tileset); - }); + } + return result; } } diff --git a/source/MonoGame.Aseprite/Content/Pipeline/Readers/AsepriteFileContentTypeReader.cs b/source/MonoGame.Aseprite/Content/Pipeline/Readers/AsepriteFileContentTypeReader.cs index 3a42cce0..52769736 100644 --- a/source/MonoGame.Aseprite/Content/Pipeline/Readers/AsepriteFileContentTypeReader.cs +++ b/source/MonoGame.Aseprite/Content/Pipeline/Readers/AsepriteFileContentTypeReader.cs @@ -39,10 +39,11 @@ protected override AsepriteFile Read(ContentReader reader, AsepriteFile? existin } string name = reader.ReadString(); + bool premultiplyAlpha = reader.ReadBoolean(); int len = reader.ReadInt32(); byte[] data = reader.ReadBytes(len); using MemoryStream stream = new(data); - return AsepriteFileLoader.FromStream(name, stream); + return AsepriteFileLoader.FromStream(name, stream, premultiplyAlpha); } } diff --git a/source/MonoGame.Aseprite/MonoGame.Aseprite.csproj b/source/MonoGame.Aseprite/MonoGame.Aseprite.csproj index c350ac13..5899bef4 100644 --- a/source/MonoGame.Aseprite/MonoGame.Aseprite.csproj +++ b/source/MonoGame.Aseprite/MonoGame.Aseprite.csproj @@ -2,7 +2,7 @@ - net8.0 + net6.0;net8.0 true @@ -25,7 +25,7 @@ - + diff --git a/source/MonoGame.Aseprite/SpriteBatchExtensions.cs b/source/MonoGame.Aseprite/SpriteBatchExtensions.cs index 9e8d0bfd..83ac4b9c 100644 --- a/source/MonoGame.Aseprite/SpriteBatchExtensions.cs +++ b/source/MonoGame.Aseprite/SpriteBatchExtensions.cs @@ -443,15 +443,9 @@ public static void Draw(this SpriteBatch spriteBatch, TilemapLayer layer, Vector SpriteEffects flipEffects = DetermineFlipEffectForTile(tile.FlipHorizontally, tile.FlipVertically, tile.FlipDiagonally); float rotation = tile.FlipDiagonally ? MathHelper.ToRadians(90.0f) : 0.0f; - // Since Aseprite allows tile rotation now, tile are rotated in Aseprite based on - // center origin. So we need an origin point, as well as to offset the position - // draw due to the origin point. - Vector2 origin = new Vector2(layer.Tileset.TileWidth, layer.Tileset.TileHeight) * 0.5f; - tPosition += origin; - TextureRegion textureRegion = layer.Tileset[tile.TilesetTileID]; - Draw(spriteBatch, textureRegion, tPosition, renderColor, rotation, origin, scale, flipEffects, layerDepth); + Draw(spriteBatch, textureRegion, tPosition, renderColor, rotation, Vector2.Zero, scale, flipEffects, layerDepth); } } }

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 z%0D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 + + WinExe + net6.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/examples/ContentPipelineExample/Game1.cs b/examples/ContentPipelineExample/Game1.cs new file mode 100644 index 00000000..e156f57d --- /dev/null +++ b/examples/ContentPipelineExample/Game1.cs @@ -0,0 +1,57 @@ +using AsepriteDotNet.Aseprite; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MonoGame.Aseprite; + +namespace ContentPipelineExample; + +public class Game1 : Game +{ + private GraphicsDeviceManager _graphics; + private SpriteBatch _spriteBatch; + private AnimatedSprite _animatedSprite; + + public Game1() + { + _graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + IsMouseVisible = true; + } + + protected override void LoadContent() + { + _spriteBatch = new SpriteBatch(GraphicsDevice); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Load the Aseprite file using the Content Manager + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + AsepriteFile aseFile = Content.Load("character_robot"); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Do something with i (see the other examples for more information + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + SpriteSheet sheet = aseFile.CreateSpriteSheet(GraphicsDevice); + _animatedSprite = sheet.CreateAnimatedSprite("walk"); + _animatedSprite.Play(); + } + + protected override void Update(GameTime gameTime) + { + _animatedSprite.Update(gameTime); + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + _spriteBatch.Begin(samplerState: SamplerState.PointClamp); + _spriteBatch.Draw(_animatedSprite, new Vector2(10, 10)); + _spriteBatch.End(); + + base.Draw(gameTime); + } +} diff --git a/examples/ContentPipelineExample/Icon.bmp b/examples/ContentPipelineExample/Icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b481653e241818d2894e4ef33234eaff9aad701 GIT binary patch literal 262282 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 RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/examples/ContentPipelineExample/Program.cs b/examples/ContentPipelineExample/Program.cs new file mode 100644 index 00000000..1ad80717 --- /dev/null +++ b/examples/ContentPipelineExample/Program.cs @@ -0,0 +1,3 @@ + +using var game = new ContentPipelineExample.Game1(); +game.Run(); diff --git a/examples/ContentPipelineExample/app.manifest b/examples/ContentPipelineExample/app.manifest new file mode 100644 index 00000000..c006af3b --- /dev/null +++ b/examples/ContentPipelineExample/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + diff --git a/examples/Directory.Build.props b/examples/Directory.Build.props new file mode 100644 index 00000000..b9c088c7 --- /dev/null +++ b/examples/Directory.Build.props @@ -0,0 +1,23 @@ + + + + Exe + net8.0 + examples + false + false + Copyright © 2024 Christopher Whitley + Christopher Whitley and contributors + Aristurtle + + + + + + + + + + disable + + diff --git a/examples/SpriteExample/.config/dotnet-tools.json b/examples/SpriteExample/.config/dotnet-tools.json new file mode 100644 index 00000000..efabe22e --- /dev/null +++ b/examples/SpriteExample/.config/dotnet-tools.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.1.303", + "commands": [ + "mgcb" + ] + }, + "dotnet-mgcb-editor": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor" + ] + }, + "dotnet-mgcb-editor-linux": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-linux" + ] + }, + "dotnet-mgcb-editor-windows": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-windows" + ] + }, + "dotnet-mgcb-editor-mac": { + "version": "3.8.1.303", + "commands": [ + "mgcb-editor-mac" + ] + } + } +} \ No newline at end of file diff --git a/examples/SpriteExample/Content/Content.mgcb b/examples/SpriteExample/Content/Content.mgcb new file mode 100644 index 00000000..ddc4c367 --- /dev/null +++ b/examples/SpriteExample/Content/Content.mgcb @@ -0,0 +1,15 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + diff --git a/examples/SpriteExample/Game1.cs b/examples/SpriteExample/Game1.cs new file mode 100644 index 00000000..3216303f --- /dev/null +++ b/examples/SpriteExample/Game1.cs @@ -0,0 +1,67 @@ +using AsepriteDotNet.Aseprite; +using AsepriteDotNet.IO; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MonoGame.Aseprite; + +namespace SpriteExample; + +public class Game1 : Game +{ + private GraphicsDeviceManager _graphics; + private SpriteBatch _spriteBatch; + private Sprite _sprite; + + public Game1() + { + _graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + IsMouseVisible = true; + } + + + protected override void LoadContent() + { + _spriteBatch = new SpriteBatch(GraphicsDevice); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Load the file. In this example, we're not using the MGCB/Content Pipeline and have the Aseprite file set as + /// a file in our project that is copied the output directory. Because of this, we can use the + /// TitleContainer.OpenStream to get a stream to the file and use that to load it. + /// + /// You can optionally enable/disable premultiply alpha for the color values when the file is loaded. If not + /// specified, it will default to true. + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + AsepriteFile aseFile; + using (Stream stream = TitleContainer.OpenStream("character_robot.aseprite")) + { + aseFile = AsepriteFileLoader.FromStream("character_robot", stream, preMultiplyAlpha: true); + } + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// Create a sprite from any frame in the aseprite file + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _sprite = aseFile.CreateSprite(GraphicsDevice, 0); + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + + _spriteBatch.Begin(samplerState: SamplerState.PointClamp); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// + /// SpriteBatch extension methods are provided to draw the sprite + /// + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + _spriteBatch.Draw(_sprite, new Vector2(10, 10)); + + _spriteBatch.End(); + } +} diff --git a/examples/SpriteExample/Icon.bmp b/examples/SpriteExample/Icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b481653e241818d2894e4ef33234eaff9aad701 GIT binary patch literal 262282 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 RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/examples/SpriteExample/Program.cs b/examples/SpriteExample/Program.cs new file mode 100644 index 00000000..2ca06959 --- /dev/null +++ b/examples/SpriteExample/Program.cs @@ -0,0 +1,3 @@ + +using var game = new SpriteExample.Game1(); +game.Run(); diff --git a/examples/SpriteExample/SpriteExample.csproj b/examples/SpriteExample/SpriteExample.csproj new file mode 100644 index 00000000..40822a25 --- /dev/null +++ b/examples/SpriteExample/SpriteExample.csproj @@ -0,0 +1,34 @@ + + + WinExe + net6.0 + Major + false + false + + + app.manifest + Icon.ico + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/examples/SpriteExample/app.manifest b/examples/SpriteExample/app.manifest new file mode 100644 index 00000000..c322b00a --- /dev/null +++ b/examples/SpriteExample/app.manifest @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + diff --git a/examples/SpriteExample/character_robot.aseprite b/examples/SpriteExample/character_robot.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..f235a0fef12b25d83f31e6c5f0baa430b795c284 GIT binary patch literal 156758 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�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