From a8d3afd2a8ef8e4b6a53cae05a85ecfbfb9cbfbd Mon Sep 17 00:00:00 2001 From: Lani Aung Date: Sun, 11 Feb 2024 21:30:36 -0700 Subject: [PATCH] Hard Reset I guess --- Controllers/HomeController.cs | 57 ++- Migrations/20211120044959_Startup.Designer.cs | 367 ----------------- Migrations/20211120052043_Renders.Designer.cs | 372 ----------------- Migrations/20211120052043_Renders.cs | 19 - .../20211120054914_RendersP2.Designer.cs | 353 ---------------- Migrations/20211120054914_RendersP2.cs | 105 ----- ...0211120201836_UseBackgroundHex.Designer.cs | 353 ---------------- Migrations/20211120201836_UseBackgroundHex.cs | 36 -- .../20211121011039_Positions.Designer.cs | 386 ------------------ Migrations/20211121011039_Positions.cs | 67 --- Migrations/20211122002625_SimplifySets.cs | 36 -- ...ner.cs => 20240212041548_init.Designer.cs} | 7 +- ...4959_Startup.cs => 20240212041548_init.cs} | 88 ++-- Migrations/KisekaeContextModelSnapshot.cs | 2 +- Scripts/play.ts | 13 +- Services/ConfigurationReaderService.cs | 268 ++++++------ Services/FileParserService.cs | 300 +++++++------- Views/Home/Index.cshtml | 8 +- wwwroot/js/main.js | 2 +- 19 files changed, 376 insertions(+), 2463 deletions(-) delete mode 100644 Migrations/20211120044959_Startup.Designer.cs delete mode 100644 Migrations/20211120052043_Renders.Designer.cs delete mode 100644 Migrations/20211120052043_Renders.cs delete mode 100644 Migrations/20211120054914_RendersP2.Designer.cs delete mode 100644 Migrations/20211120054914_RendersP2.cs delete mode 100644 Migrations/20211120201836_UseBackgroundHex.Designer.cs delete mode 100644 Migrations/20211120201836_UseBackgroundHex.cs delete mode 100644 Migrations/20211121011039_Positions.Designer.cs delete mode 100644 Migrations/20211121011039_Positions.cs delete mode 100644 Migrations/20211122002625_SimplifySets.cs rename Migrations/{20211122002625_SimplifySets.Designer.cs => 20240212041548_init.Designer.cs} (98%) rename Migrations/{20211120044959_Startup.cs => 20240212041548_init.cs} (87%) diff --git a/Controllers/HomeController.cs b/Controllers/HomeController.cs index 3e9ee68..5f5340d 100644 --- a/Controllers/HomeController.cs +++ b/Controllers/HomeController.cs @@ -7,41 +7,40 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace fxl.codes.kisekae.Controllers +namespace fxl.codes.kisekae.Controllers; + +public class HomeController : Controller { - public class HomeController : Controller + private readonly DatabaseService _databaseService; + private readonly ILogger _logger; + + public HomeController(ILogger logger, DatabaseService databaseService) { - private readonly DatabaseService _databaseService; - private readonly ILogger _logger; + _logger = logger; + _databaseService = databaseService; + } - public HomeController(ILogger logger, DatabaseService databaseService) - { - _logger = logger; - _databaseService = databaseService; - } + public IActionResult Index() + { + var files = _databaseService.GetAll(); + return View(files.Select(x => new KisekaeModel(x))); + } - public IActionResult Index() - { - var files = _databaseService.GetAll(); - return View(files.Select(x => new KisekaeModel(x))); - } + [HttpPost] + public IActionResult Upload(IFormFile file) + { + _logger.LogTrace($"File uploaded: {file?.FileName}"); + if (!(file?.FileName.EndsWith("lzh", StringComparison.InvariantCultureIgnoreCase) ?? false)) + throw new Exception("Please select a *.lzh file"); - [HttpPost] - public IActionResult Upload(IFormFile file) - { - _logger.LogTrace($"File uploaded: {file?.FileName}"); - if (!(file?.FileName.EndsWith("lzh", StringComparison.InvariantCultureIgnoreCase) ?? false)) - throw new Exception("Please select a *.lzh file"); + _databaseService.StoreToDatabase(file); - _databaseService.StoreToDatabase(file); + return Redirect("~/"); + } - return View(); - } - - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - public IActionResult Error() - { - return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); - } + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public IActionResult Error() + { + return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } \ No newline at end of file diff --git a/Migrations/20211120044959_Startup.Designer.cs b/Migrations/20211120044959_Startup.Designer.cs deleted file mode 100644 index b6d8aea..0000000 --- a/Migrations/20211120044959_Startup.Designer.cs +++ /dev/null @@ -1,367 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using fxl.codes.kisekae; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - [DbContext(typeof(KisekaeContext))] - [Migration("20211120044959_Startup")] - partial class Startup - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "6.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ConfigurationId"); - - b.ToTable("Action"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("OffsetX") - .HasColumnType("integer"); - - b.Property("OffsetY") - .HasColumnType("integer"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelId") - .HasColumnType("integer"); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Fix") - .HasColumnType("integer"); - - b.Property("Mark") - .HasColumnType("integer"); - - b.Property("PaletteGroup") - .HasColumnType("integer"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.Property("Sets") - .HasColumnType("integer"); - - b.Property("Transparency") - .HasColumnType("integer"); - - b.Property("X") - .HasColumnType("integer"); - - b.Property("Y") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelId"); - - b.HasIndex("ConfigurationId"); - - b.HasIndex("PaletteId"); - - b.ToTable("CelConfigs"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("BorderIndex") - .HasColumnType("integer"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Configurations"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CheckSum") - .HasColumnType("text"); - - b.Property("FileName") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("KisekaeSets"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Group") - .HasColumnType("integer"); - - b.Property("Hex") - .HasColumnType("text"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PaletteId"); - - b.ToTable("PaletteColors"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Render", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelId") - .HasColumnType("integer"); - - b.Property("Image") - .HasColumnType("bytea"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelId"); - - b.HasIndex("PaletteId"); - - b.ToTable("Renders"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Configuration", null) - .WithMany("Actions") - .HasForeignKey("ConfigurationId"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Cels") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Cel", "Cel") - .WithMany() - .HasForeignKey("CelId"); - - b.HasOne("fxl.codes.kisekae.Entities.Configuration", "Configuration") - .WithMany("Cels") - .HasForeignKey("ConfigurationId"); - - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany() - .HasForeignKey("PaletteId"); - - b.Navigation("Cel"); - - b.Navigation("Configuration"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Configurations") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Palettes") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany("Colors") - .HasForeignKey("PaletteId"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Render", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Cel", "Cel") - .WithMany() - .HasForeignKey("CelId"); - - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany() - .HasForeignKey("PaletteId"); - - b.Navigation("Cel"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Navigation("Actions"); - - b.Navigation("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Navigation("Cels"); - - b.Navigation("Configurations"); - - b.Navigation("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Navigation("Colors"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20211120052043_Renders.Designer.cs b/Migrations/20211120052043_Renders.Designer.cs deleted file mode 100644 index 20c75fc..0000000 --- a/Migrations/20211120052043_Renders.Designer.cs +++ /dev/null @@ -1,372 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using fxl.codes.kisekae; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - [DbContext(typeof(KisekaeContext))] - [Migration("20211120052043_Renders")] - partial class Renders - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "6.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ConfigurationId"); - - b.ToTable("Action"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("OffsetX") - .HasColumnType("integer"); - - b.Property("OffsetY") - .HasColumnType("integer"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelId") - .HasColumnType("integer"); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Fix") - .HasColumnType("integer"); - - b.Property("Mark") - .HasColumnType("integer"); - - b.Property("PaletteGroup") - .HasColumnType("integer"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.Property("Sets") - .HasColumnType("integer"); - - b.Property("Transparency") - .HasColumnType("integer"); - - b.Property("X") - .HasColumnType("integer"); - - b.Property("Y") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelId"); - - b.HasIndex("ConfigurationId"); - - b.HasIndex("PaletteId"); - - b.ToTable("CelConfigs"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("BorderIndex") - .HasColumnType("integer"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Configurations"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CheckSum") - .HasColumnType("text"); - - b.Property("FileName") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("KisekaeSets"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Group") - .HasColumnType("integer"); - - b.Property("Hex") - .HasColumnType("text"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PaletteId"); - - b.ToTable("PaletteColors"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Render", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelId") - .HasColumnType("integer"); - - b.Property("Image") - .HasColumnType("bytea"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelId"); - - b.HasIndex("PaletteId"); - - b.ToTable("Renders"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Configuration", null) - .WithMany("Actions") - .HasForeignKey("ConfigurationId"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Cels") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Cel", "Cel") - .WithMany() - .HasForeignKey("CelId"); - - b.HasOne("fxl.codes.kisekae.Entities.Configuration", "Configuration") - .WithMany("Cels") - .HasForeignKey("ConfigurationId"); - - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany() - .HasForeignKey("PaletteId"); - - b.Navigation("Cel"); - - b.Navigation("Configuration"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Configurations") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Palettes") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany("Colors") - .HasForeignKey("PaletteId"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Render", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Cel", "Cel") - .WithMany("Renders") - .HasForeignKey("CelId"); - - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany() - .HasForeignKey("PaletteId"); - - b.Navigation("Cel"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.Navigation("Renders"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Navigation("Actions"); - - b.Navigation("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Navigation("Cels"); - - b.Navigation("Configurations"); - - b.Navigation("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Navigation("Colors"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20211120052043_Renders.cs b/Migrations/20211120052043_Renders.cs deleted file mode 100644 index 4dcc739..0000000 --- a/Migrations/20211120052043_Renders.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - public partial class Renders : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/Migrations/20211120054914_RendersP2.Designer.cs b/Migrations/20211120054914_RendersP2.Designer.cs deleted file mode 100644 index 59be4d7..0000000 --- a/Migrations/20211120054914_RendersP2.Designer.cs +++ /dev/null @@ -1,353 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using fxl.codes.kisekae; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - [DbContext(typeof(KisekaeContext))] - [Migration("20211120054914_RendersP2")] - partial class RendersP2 - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "6.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ConfigurationId"); - - b.ToTable("Action"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("OffsetX") - .HasColumnType("integer"); - - b.Property("OffsetY") - .HasColumnType("integer"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelId") - .HasColumnType("integer"); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Fix") - .HasColumnType("integer"); - - b.Property("Mark") - .HasColumnType("integer"); - - b.Property("PaletteGroup") - .HasColumnType("integer"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.Property("RenderId") - .HasColumnType("integer"); - - b.Property("Sets") - .HasColumnType("integer"); - - b.Property("Transparency") - .HasColumnType("integer"); - - b.Property("X") - .HasColumnType("integer"); - - b.Property("Y") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelId"); - - b.HasIndex("ConfigurationId"); - - b.HasIndex("PaletteId"); - - b.HasIndex("RenderId"); - - b.ToTable("CelConfigs"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("BorderIndex") - .HasColumnType("integer"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Configurations"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CheckSum") - .HasColumnType("text"); - - b.Property("FileName") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("KisekaeSets"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Group") - .HasColumnType("integer"); - - b.Property("Hex") - .HasColumnType("text"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PaletteId"); - - b.ToTable("PaletteColors"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Render", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Image") - .HasColumnType("bytea"); - - b.HasKey("Id"); - - b.ToTable("Renders"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Configuration", null) - .WithMany("Actions") - .HasForeignKey("ConfigurationId"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Cels") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Cel", "Cel") - .WithMany() - .HasForeignKey("CelId"); - - b.HasOne("fxl.codes.kisekae.Entities.Configuration", "Configuration") - .WithMany("Cels") - .HasForeignKey("ConfigurationId"); - - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany() - .HasForeignKey("PaletteId"); - - b.HasOne("fxl.codes.kisekae.Entities.Render", "Render") - .WithMany() - .HasForeignKey("RenderId"); - - b.Navigation("Cel"); - - b.Navigation("Configuration"); - - b.Navigation("Palette"); - - b.Navigation("Render"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Configurations") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Palettes") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany("Colors") - .HasForeignKey("PaletteId"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Navigation("Actions"); - - b.Navigation("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Navigation("Cels"); - - b.Navigation("Configurations"); - - b.Navigation("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Navigation("Colors"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20211120054914_RendersP2.cs b/Migrations/20211120054914_RendersP2.cs deleted file mode 100644 index 6ce169d..0000000 --- a/Migrations/20211120054914_RendersP2.cs +++ /dev/null @@ -1,105 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - public partial class RendersP2 : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Renders_Cels_CelId", - table: "Renders"); - - migrationBuilder.DropForeignKey( - name: "FK_Renders_Palettes_PaletteId", - table: "Renders"); - - migrationBuilder.DropIndex( - name: "IX_Renders_CelId", - table: "Renders"); - - migrationBuilder.DropIndex( - name: "IX_Renders_PaletteId", - table: "Renders"); - - migrationBuilder.DropColumn( - name: "CelId", - table: "Renders"); - - migrationBuilder.DropColumn( - name: "PaletteId", - table: "Renders"); - - migrationBuilder.AddColumn( - name: "RenderId", - table: "CelConfigs", - type: "integer", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_CelConfigs_RenderId", - table: "CelConfigs", - column: "RenderId"); - - migrationBuilder.AddForeignKey( - name: "FK_CelConfigs_Renders_RenderId", - table: "CelConfigs", - column: "RenderId", - principalTable: "Renders", - principalColumn: "Id"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_CelConfigs_Renders_RenderId", - table: "CelConfigs"); - - migrationBuilder.DropIndex( - name: "IX_CelConfigs_RenderId", - table: "CelConfigs"); - - migrationBuilder.DropColumn( - name: "RenderId", - table: "CelConfigs"); - - migrationBuilder.AddColumn( - name: "CelId", - table: "Renders", - type: "integer", - nullable: true); - - migrationBuilder.AddColumn( - name: "PaletteId", - table: "Renders", - type: "integer", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_Renders_CelId", - table: "Renders", - column: "CelId"); - - migrationBuilder.CreateIndex( - name: "IX_Renders_PaletteId", - table: "Renders", - column: "PaletteId"); - - migrationBuilder.AddForeignKey( - name: "FK_Renders_Cels_CelId", - table: "Renders", - column: "CelId", - principalTable: "Cels", - principalColumn: "Id"); - - migrationBuilder.AddForeignKey( - name: "FK_Renders_Palettes_PaletteId", - table: "Renders", - column: "PaletteId", - principalTable: "Palettes", - principalColumn: "Id"); - } - } -} diff --git a/Migrations/20211120201836_UseBackgroundHex.Designer.cs b/Migrations/20211120201836_UseBackgroundHex.Designer.cs deleted file mode 100644 index ede3a2e..0000000 --- a/Migrations/20211120201836_UseBackgroundHex.Designer.cs +++ /dev/null @@ -1,353 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using fxl.codes.kisekae; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - [DbContext(typeof(KisekaeContext))] - [Migration("20211120201836_UseBackgroundHex")] - partial class UseBackgroundHex - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "6.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ConfigurationId"); - - b.ToTable("Action"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("OffsetX") - .HasColumnType("integer"); - - b.Property("OffsetY") - .HasColumnType("integer"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelId") - .HasColumnType("integer"); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Fix") - .HasColumnType("integer"); - - b.Property("Mark") - .HasColumnType("integer"); - - b.Property("PaletteGroup") - .HasColumnType("integer"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.Property("RenderId") - .HasColumnType("integer"); - - b.Property("Sets") - .HasColumnType("integer"); - - b.Property("Transparency") - .HasColumnType("integer"); - - b.Property("X") - .HasColumnType("integer"); - - b.Property("Y") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelId"); - - b.HasIndex("ConfigurationId"); - - b.HasIndex("PaletteId"); - - b.HasIndex("RenderId"); - - b.ToTable("CelConfigs"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("BackgroundColorHex") - .HasColumnType("text"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Configurations"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CheckSum") - .HasColumnType("text"); - - b.Property("FileName") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("KisekaeSets"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Group") - .HasColumnType("integer"); - - b.Property("Hex") - .HasColumnType("text"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PaletteId"); - - b.ToTable("PaletteColors"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Render", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Image") - .HasColumnType("bytea"); - - b.HasKey("Id"); - - b.ToTable("Renders"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Configuration", null) - .WithMany("Actions") - .HasForeignKey("ConfigurationId"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Cels") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Cel", "Cel") - .WithMany() - .HasForeignKey("CelId"); - - b.HasOne("fxl.codes.kisekae.Entities.Configuration", "Configuration") - .WithMany("Cels") - .HasForeignKey("ConfigurationId"); - - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany() - .HasForeignKey("PaletteId"); - - b.HasOne("fxl.codes.kisekae.Entities.Render", "Render") - .WithMany() - .HasForeignKey("RenderId"); - - b.Navigation("Cel"); - - b.Navigation("Configuration"); - - b.Navigation("Palette"); - - b.Navigation("Render"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Configurations") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Palettes") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany("Colors") - .HasForeignKey("PaletteId"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Navigation("Actions"); - - b.Navigation("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Navigation("Cels"); - - b.Navigation("Configurations"); - - b.Navigation("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Navigation("Colors"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20211120201836_UseBackgroundHex.cs b/Migrations/20211120201836_UseBackgroundHex.cs deleted file mode 100644 index b1a8a6d..0000000 --- a/Migrations/20211120201836_UseBackgroundHex.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - public partial class UseBackgroundHex : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "BorderIndex", - table: "Configurations"); - - migrationBuilder.AddColumn( - name: "BackgroundColorHex", - table: "Configurations", - type: "text", - nullable: true); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "BackgroundColorHex", - table: "Configurations"); - - migrationBuilder.AddColumn( - name: "BorderIndex", - table: "Configurations", - type: "integer", - nullable: false, - defaultValue: 0); - } - } -} diff --git a/Migrations/20211121011039_Positions.Designer.cs b/Migrations/20211121011039_Positions.Designer.cs deleted file mode 100644 index 4192ef7..0000000 --- a/Migrations/20211121011039_Positions.Designer.cs +++ /dev/null @@ -1,386 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using fxl.codes.kisekae; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - [DbContext(typeof(KisekaeContext))] - [Migration("20211121011039_Positions")] - partial class Positions - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "6.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ConfigurationId"); - - b.ToTable("Action"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("OffsetX") - .HasColumnType("integer"); - - b.Property("OffsetY") - .HasColumnType("integer"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelId") - .HasColumnType("integer"); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("ConfigurationId") - .HasColumnType("integer"); - - b.Property("Fix") - .HasColumnType("integer"); - - b.Property("Mark") - .HasColumnType("integer"); - - b.Property("PaletteGroup") - .HasColumnType("integer"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.Property("RenderId") - .HasColumnType("integer"); - - b.Property("Sets") - .HasColumnType("integer"); - - b.Property("Transparency") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelId"); - - b.HasIndex("ConfigurationId"); - - b.HasIndex("PaletteId"); - - b.HasIndex("RenderId"); - - b.ToTable("CelConfigs"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelPosition", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CelConfigId") - .HasColumnType("integer"); - - b.Property("Set") - .HasColumnType("integer"); - - b.Property("X") - .HasColumnType("integer"); - - b.Property("Y") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("CelConfigId"); - - b.ToTable("CelPosition"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("BackgroundColorHex") - .HasColumnType("text"); - - b.Property("Data") - .HasColumnType("text"); - - b.Property("Height") - .HasColumnType("integer"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Width") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Configurations"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CheckSum") - .HasColumnType("text"); - - b.Property("FileName") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("KisekaeSets"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Comment") - .HasColumnType("text"); - - b.Property("Data") - .HasColumnType("bytea"); - - b.Property("FileName") - .HasColumnType("text"); - - b.Property("KisekaeId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("KisekaeId"); - - b.ToTable("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Group") - .HasColumnType("integer"); - - b.Property("Hex") - .HasColumnType("text"); - - b.Property("PaletteId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("PaletteId"); - - b.ToTable("PaletteColors"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Render", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Image") - .HasColumnType("bytea"); - - b.HasKey("Id"); - - b.ToTable("Renders"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Action", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Configuration", null) - .WithMany("Actions") - .HasForeignKey("ConfigurationId"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Cel", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Cels") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Cel", "Cel") - .WithMany() - .HasForeignKey("CelId"); - - b.HasOne("fxl.codes.kisekae.Entities.Configuration", "Configuration") - .WithMany("Cels") - .HasForeignKey("ConfigurationId"); - - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany() - .HasForeignKey("PaletteId"); - - b.HasOne("fxl.codes.kisekae.Entities.Render", "Render") - .WithMany() - .HasForeignKey("RenderId"); - - b.Navigation("Cel"); - - b.Navigation("Configuration"); - - b.Navigation("Palette"); - - b.Navigation("Render"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelPosition", b => - { - b.HasOne("fxl.codes.kisekae.Entities.CelConfig", null) - .WithMany("Positions") - .HasForeignKey("CelConfigId"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Configurations") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Kisekae", "Kisekae") - .WithMany("Palettes") - .HasForeignKey("KisekaeId"); - - b.Navigation("Kisekae"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.PaletteColor", b => - { - b.HasOne("fxl.codes.kisekae.Entities.Palette", "Palette") - .WithMany("Colors") - .HasForeignKey("PaletteId"); - - b.Navigation("Palette"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.CelConfig", b => - { - b.Navigation("Positions"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Configuration", b => - { - b.Navigation("Actions"); - - b.Navigation("Cels"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Kisekae", b => - { - b.Navigation("Cels"); - - b.Navigation("Configurations"); - - b.Navigation("Palettes"); - }); - - modelBuilder.Entity("fxl.codes.kisekae.Entities.Palette", b => - { - b.Navigation("Colors"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20211121011039_Positions.cs b/Migrations/20211121011039_Positions.cs deleted file mode 100644 index aaed427..0000000 --- a/Migrations/20211121011039_Positions.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - public partial class Positions : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "X", - table: "CelConfigs"); - - migrationBuilder.DropColumn( - name: "Y", - table: "CelConfigs"); - - migrationBuilder.CreateTable( - name: "CelPosition", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Set = table.Column(type: "integer", nullable: false), - X = table.Column(type: "integer", nullable: false), - Y = table.Column(type: "integer", nullable: false), - CelConfigId = table.Column(type: "integer", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CelPosition", x => x.Id); - table.ForeignKey( - name: "FK_CelPosition_CelConfigs_CelConfigId", - column: x => x.CelConfigId, - principalTable: "CelConfigs", - principalColumn: "Id"); - }); - - migrationBuilder.CreateIndex( - name: "IX_CelPosition_CelConfigId", - table: "CelPosition", - column: "CelConfigId"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "CelPosition"); - - migrationBuilder.AddColumn( - name: "X", - table: "CelConfigs", - type: "integer", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "Y", - table: "CelConfigs", - type: "integer", - nullable: false, - defaultValue: 0); - } - } -} diff --git a/Migrations/20211122002625_SimplifySets.cs b/Migrations/20211122002625_SimplifySets.cs deleted file mode 100644 index 2d6f885..0000000 --- a/Migrations/20211122002625_SimplifySets.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace fxl.codes.kisekae.Migrations -{ - public partial class SimplifySets : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Comment", - table: "Palettes"); - - migrationBuilder.DropColumn( - name: "Sets", - table: "CelConfigs"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Comment", - table: "Palettes", - type: "text", - nullable: true); - - migrationBuilder.AddColumn( - name: "Sets", - table: "CelConfigs", - type: "integer", - nullable: false, - defaultValue: 0); - } - } -} diff --git a/Migrations/20211122002625_SimplifySets.Designer.cs b/Migrations/20240212041548_init.Designer.cs similarity index 98% rename from Migrations/20211122002625_SimplifySets.Designer.cs rename to Migrations/20240212041548_init.Designer.cs index 1738af7..df77ea4 100644 --- a/Migrations/20211122002625_SimplifySets.Designer.cs +++ b/Migrations/20240212041548_init.Designer.cs @@ -12,14 +12,15 @@ using fxl.codes.kisekae; namespace fxl.codes.kisekae.Migrations { [DbContext(typeof(KisekaeContext))] - [Migration("20211122002625_SimplifySets")] - partial class SimplifySets + [Migration("20240212041548_init")] + partial class init { + /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("ProductVersion", "8.0.1") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); diff --git a/Migrations/20211120044959_Startup.cs b/Migrations/20240212041548_init.cs similarity index 87% rename from Migrations/20211120044959_Startup.cs rename to Migrations/20240212041548_init.cs index f0d709c..c53f9f9 100644 --- a/Migrations/20211120044959_Startup.cs +++ b/Migrations/20240212041548_init.cs @@ -1,13 +1,14 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Migrations; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable namespace fxl.codes.kisekae.Migrations { - public partial class Startup : Migration + /// + public partial class init : Migration { + /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( @@ -24,6 +25,19 @@ namespace fxl.codes.kisekae.Migrations table.PrimaryKey("PK_KisekaeSets", x => x.Id); }); + migrationBuilder.CreateTable( + name: "Renders", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Image = table.Column(type: "bytea", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Renders", x => x.Id); + }); + migrationBuilder.CreateTable( name: "Cels", columns: table => new @@ -59,7 +73,7 @@ namespace fxl.codes.kisekae.Migrations Data = table.Column(type: "text", nullable: true), Height = table.Column(type: "integer", nullable: false), Width = table.Column(type: "integer", nullable: false), - BorderIndex = table.Column(type: "integer", nullable: false) + BackgroundColorHex = table.Column(type: "text", nullable: true) }, constraints: table => { @@ -79,7 +93,6 @@ namespace fxl.codes.kisekae.Migrations .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), KisekaeId = table.Column(type: "integer", nullable: true), FileName = table.Column(type: "text", nullable: true), - Comment = table.Column(type: "text", nullable: true), Data = table.Column(type: "bytea", nullable: true) }, constraints: table => @@ -124,10 +137,8 @@ namespace fxl.codes.kisekae.Migrations PaletteId = table.Column(type: "integer", nullable: true), PaletteGroup = table.Column(type: "integer", nullable: false), Comment = table.Column(type: "text", nullable: true), - X = table.Column(type: "integer", nullable: false), - Y = table.Column(type: "integer", nullable: false), Transparency = table.Column(type: "integer", nullable: false), - Sets = table.Column(type: "integer", nullable: false) + RenderId = table.Column(type: "integer", nullable: true) }, constraints: table => { @@ -147,6 +158,11 @@ namespace fxl.codes.kisekae.Migrations column: x => x.PaletteId, principalTable: "Palettes", principalColumn: "Id"); + table.ForeignKey( + name: "FK_CelConfigs_Renders_RenderId", + column: x => x.RenderId, + principalTable: "Renders", + principalColumn: "Id"); }); migrationBuilder.CreateTable( @@ -170,27 +186,23 @@ namespace fxl.codes.kisekae.Migrations }); migrationBuilder.CreateTable( - name: "Renders", + name: "CelPosition", columns: table => new { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - CelId = table.Column(type: "integer", nullable: true), - PaletteId = table.Column(type: "integer", nullable: true), - Image = table.Column(type: "bytea", nullable: true) + Set = table.Column(type: "integer", nullable: false), + X = table.Column(type: "integer", nullable: false), + Y = table.Column(type: "integer", nullable: false), + CelConfigId = table.Column(type: "integer", nullable: true) }, constraints: table => { - table.PrimaryKey("PK_Renders", x => x.Id); + table.PrimaryKey("PK_CelPosition", x => x.Id); table.ForeignKey( - name: "FK_Renders_Cels_CelId", - column: x => x.CelId, - principalTable: "Cels", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_Renders_Palettes_PaletteId", - column: x => x.PaletteId, - principalTable: "Palettes", + name: "FK_CelPosition_CelConfigs_CelConfigId", + column: x => x.CelConfigId, + principalTable: "CelConfigs", principalColumn: "Id"); }); @@ -214,6 +226,16 @@ namespace fxl.codes.kisekae.Migrations table: "CelConfigs", column: "PaletteId"); + migrationBuilder.CreateIndex( + name: "IX_CelConfigs_RenderId", + table: "CelConfigs", + column: "RenderId"); + + migrationBuilder.CreateIndex( + name: "IX_CelPosition_CelConfigId", + table: "CelPosition", + column: "CelConfigId"); + migrationBuilder.CreateIndex( name: "IX_Cels_KisekaeId", table: "Cels", @@ -233,41 +255,35 @@ namespace fxl.codes.kisekae.Migrations name: "IX_Palettes_KisekaeId", table: "Palettes", column: "KisekaeId"); - - migrationBuilder.CreateIndex( - name: "IX_Renders_CelId", - table: "Renders", - column: "CelId"); - - migrationBuilder.CreateIndex( - name: "IX_Renders_PaletteId", - table: "Renders", - column: "PaletteId"); } + /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "Action"); migrationBuilder.DropTable( - name: "CelConfigs"); + name: "CelPosition"); migrationBuilder.DropTable( name: "PaletteColors"); migrationBuilder.DropTable( - name: "Renders"); - - migrationBuilder.DropTable( - name: "Configurations"); + name: "CelConfigs"); migrationBuilder.DropTable( name: "Cels"); + migrationBuilder.DropTable( + name: "Configurations"); + migrationBuilder.DropTable( name: "Palettes"); + migrationBuilder.DropTable( + name: "Renders"); + migrationBuilder.DropTable( name: "KisekaeSets"); } diff --git a/Migrations/KisekaeContextModelSnapshot.cs b/Migrations/KisekaeContextModelSnapshot.cs index 384ba77..4e26424 100644 --- a/Migrations/KisekaeContextModelSnapshot.cs +++ b/Migrations/KisekaeContextModelSnapshot.cs @@ -17,7 +17,7 @@ namespace fxl.codes.kisekae.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("ProductVersion", "8.0.1") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); diff --git a/Scripts/play.ts b/Scripts/play.ts index 81b3a98..25f8c86 100644 --- a/Scripts/play.ts +++ b/Scripts/play.ts @@ -20,11 +20,6 @@ export class PlaySpace { }); this.canvas.setZoom(this.canvas.width / model.width); - - this.canvas.on("mouse:down", event => { - if (!event.target) return; - console.log(event.target); - }); } async selectSet(set?: number) { @@ -68,9 +63,13 @@ export class PlaySpace { for (let key in groups) { const group = groups[key]; const length = group.length; - if (length < 2) continue; - const top = group.pop(); + + if (length < 2) { + top.set({hoverCursor: "move"}); + continue; + } + if (!top.selectable) continue; top.set({hoverCursor: "move"}); diff --git a/Services/ConfigurationReaderService.cs b/Services/ConfigurationReaderService.cs index 8fd7381..3da54df 100644 --- a/Services/ConfigurationReaderService.cs +++ b/Services/ConfigurationReaderService.cs @@ -6,156 +6,156 @@ using System.Text.RegularExpressions; using fxl.codes.kisekae.Entities; using Microsoft.Extensions.Logging; -namespace fxl.codes.kisekae.Services +namespace fxl.codes.kisekae.Services; + +public class ConfigurationReaderService { - public class ConfigurationReaderService + private const string CelRegex = @"#(?\d*)\.?(?\d*)\s*(?[\w\d\-]*\.[cCeElL]*)\s*\*?" + + @"(?\d*)?\s*\:?(?[\d\s]*)?;?(?[\w\d\-\s\%]*)"; + + private const string ResolutionRegexPattern = @"\((?[0-9]*).(?[0-9]*)\)"; + + private readonly ILogger _logger; + + public ConfigurationReaderService(ILogger logger) { - private const string CelRegex = @"#(?\d*)\.?(?\d*)\s*(?[\w\d\-]*\.[cCeElL]*)\s*\*?" - + @"(?\d*)?\s*\:?(?[\d\s]*)?;?(?[\w\d\-\s\%]*)"; + _logger = logger; + } - private const string ResolutionRegexPattern = @"\((?[0-9]*).(?[0-9]*)\)"; + public void ReadConfiguration(Configuration dto, + IDictionary backgroundColors, + IDictionary cels, + Dictionary palettes) + { + _logger.LogInformation($"Reading {dto.Name}"); + var initialPositions = new StringBuilder(); + var backgroundColorIndex = 0; + var paletteOrder = new List(); + var celLines = new List(); - private readonly ILogger _logger; - - public ConfigurationReaderService(ILogger logger) - { - _logger = logger; - } - - public void ReadConfiguration(Configuration dto, - IDictionary backgroundColors, - IDictionary cels, - Dictionary palettes) - { - _logger.LogInformation($"Reading {dto.Name}"); - var initialPositions = new StringBuilder(); - var backgroundColorIndex = 0; - var paletteOrder = new List(); - var celLines = new List(); - - foreach (var line in dto.Data.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries)) - switch (line.ToCharArray()[0]) - { - case '(': - var resolutionRegex = new Regex(ResolutionRegexPattern); - var resolutionMatch = resolutionRegex.Match(line); - dto.Width = int.Parse(resolutionMatch.Groups["Width"].Value); - dto.Height = int.Parse(resolutionMatch.Groups["Height"].Value); - break; - case '[': - var borderValue = line[1..]; - if (borderValue.Contains(';')) borderValue = borderValue.Split(';')[0].Trim(); - backgroundColorIndex = int.Parse(borderValue); - break; - case '%': - SetPaletteOrder(line, palettes, paletteOrder); - break; - case '#': - celLines.Add(line); - break; - case '$': - case ' ': - initialPositions.Append(line); - break; - } - - foreach (var line in celLines) dto.Cels.Add(SetCelConfig(line, dto, cels, paletteOrder)); - SetInitialPositions(dto, initialPositions.ToString()); - backgroundColors.Add(dto, backgroundColorIndex); - } - - private static CelConfig SetCelConfig(string line, Configuration configuration, IDictionary cels, IReadOnlyList palettes) - { - var cel = new CelConfig + foreach (var line in dto.Data.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries)) + switch (line.ToCharArray()[0]) { - Configuration = configuration - }; - - if (line.Contains("%t")) - { - var opacity = line[line.IndexOf("%t", StringComparison.InvariantCultureIgnoreCase)..].Trim(); - opacity = opacity.Split(';', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)[0]; - opacity = opacity.Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)[0]; - opacity = opacity.Replace("%t", ""); - cel.Transparency = int.Parse(opacity); + case '(': + var resolutionRegex = new Regex(ResolutionRegexPattern); + var resolutionMatch = resolutionRegex.Match(line); + dto.Width = int.Parse(resolutionMatch.Groups["Width"].Value); + dto.Height = int.Parse(resolutionMatch.Groups["Height"].Value); + break; + case '[': + var borderValue = line[1..]; + if (borderValue.Contains(';')) borderValue = borderValue.Split(';')[0].Trim(); + backgroundColorIndex = int.Parse(borderValue); + break; + case '%': + SetPaletteOrder(line, palettes, paletteOrder); + break; + case '#': + celLines.Add(line); + break; + case '$': + case ' ': + initialPositions.Append(line); + break; } - var matcher = new Regex(CelRegex); - var match = matcher.Match(line); + foreach (var line in celLines) dto.Cels.Add(SetCelConfig(line, dto, cels, paletteOrder)); + SetInitialPositions(dto, initialPositions.ToString()); + backgroundColors.Add(dto, backgroundColorIndex); + } - foreach (var groupName in matcher.GetGroupNames()) + private static CelConfig SetCelConfig(string line, Configuration configuration, IDictionary cels, IReadOnlyList palettes) + { + var cel = new CelConfig + { + Configuration = configuration + }; + + if (line.Contains("%t")) + { + var opacity = line[line.IndexOf("%t", StringComparison.InvariantCultureIgnoreCase)..].Trim(); + opacity = opacity.Split(';', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)[0]; + opacity = opacity.Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)[0]; + opacity = opacity.Replace("%t", ""); + cel.Transparency = int.Parse(opacity); + } + + var matcher = new Regex(CelRegex); + var match = matcher.Match(line); + + foreach (var groupName in matcher.GetGroupNames()) + { + match.Groups.TryGetValue(groupName, out var group); + if (string.IsNullOrEmpty(group?.Value)) continue; + + if (string.Equals(groupName, "FileName")) { - match.Groups.TryGetValue(groupName, out var group); - if (string.IsNullOrEmpty(group?.Value)) continue; - - if (string.Equals(groupName, "FileName")) - { - cel.Cel = cels[group.Value.ToLowerInvariant()]; - continue; - } - - if (string.Equals(groupName, "PaletteIndex")) - { - cel.Palette = palettes[int.Parse(group.Value)]; - continue; - } - - var property = typeof(CelConfig).GetProperty(groupName); - if (property == null) continue; - - var value = group.Value.Trim(); - if (property.PropertyType == typeof(string)) property.SetValue(cel, value); - if (property.PropertyType == typeof(int)) property.SetValue(cel, int.Parse(value)); - - if (property.PropertyType != cel.Sets.GetType()) continue; - - foreach (var id in value.Split(' ', StringSplitOptions.RemoveEmptyEntries)) - { - var success = int.TryParse(id, out var result); - if (!success) continue; - cel.Sets[result] = true; - } + cel.Cel = cels[group.Value.ToLowerInvariant()]; + continue; } - cel.Palette ??= palettes[0]; - if (!cel.Sets.Max()) Array.Fill(cel.Sets, true); - - return cel; - } - - private static void SetPaletteOrder(string line, IReadOnlyDictionary palettes, ICollection paletteOrder) - { - var parts = line.Split(';'); - var palette = palettes[parts[0].Trim().ToLowerInvariant().Replace("%", "")]; - paletteOrder.Add(palette); - } - - private static void SetInitialPositions(Configuration dto, string positions) - { - var sets = positions.Split('$', StringSplitOptions.RemoveEmptyEntries); - for (var index = 0; index < sets.Length; index++) + if (string.Equals(groupName, "PaletteIndex")) { - var set = sets[index]; - var value = set.Split(' ', StringSplitOptions.RemoveEmptyEntries); - var paletteGroup = int.Parse(value[0]); + cel.Palette = palettes[int.Parse(group.Value)]; + continue; + } - for (var innerIndex = 1; innerIndex < value.Length; innerIndex++) + var property = typeof(CelConfig).GetProperty(groupName); + if (property == null) continue; + + var value = group.Value.Trim(); + if (property.PropertyType == typeof(string)) property.SetValue(cel, value); + if (property.PropertyType == typeof(int)) property.SetValue(cel, int.Parse(value)); + + if (property.PropertyType != cel.Sets.GetType()) continue; + + foreach (var id in value.Split(' ', StringSplitOptions.RemoveEmptyEntries)) + { + var success = int.TryParse(id, out var result); + if (!success) continue; + cel.Sets[result] = true; + } + } + + cel.Palette ??= palettes[0]; + if (!cel.Sets.Max()) Array.Fill(cel.Sets, true); + + return cel; + } + + private static void SetPaletteOrder(string line, IReadOnlyDictionary palettes, ICollection paletteOrder) + { + var parts = line.Split(';'); + var palette = palettes[parts[0].Trim().ToLowerInvariant().Replace("%", "")]; + paletteOrder.Add(palette); + } + + private static void SetInitialPositions(Configuration dto, string positions) + { + positions = Regex.Replace(positions, "[\\s]+", "|"); + var sets = positions.Split('$', StringSplitOptions.RemoveEmptyEntries); + for (var index = 0; index < sets.Length; index++) + { + var set = sets[index]; + var value = set.Split('|', StringSplitOptions.RemoveEmptyEntries); + var paletteGroup = int.Parse(value[0]); + + for (var innerIndex = 1; innerIndex < value.Length; innerIndex++) + { + if (value[innerIndex].Contains('*')) continue; + var point = value[innerIndex].Trim().Split(',', StringSplitOptions.RemoveEmptyEntries); + + foreach (var cel in dto.Cels.Where(x => x.Mark == innerIndex - 1)) { - if (value[innerIndex].Contains('*')) continue; - var point = value[innerIndex].Trim().Split(',', StringSplitOptions.RemoveEmptyEntries); + cel.PaletteGroup = paletteGroup; - foreach (var cel in dto.Cels.Where(x => x.Mark == innerIndex - 1)) + if (!cel.Sets[index]) continue; + cel.Positions.Add(new CelPosition { - cel.PaletteGroup = paletteGroup; - - if (!cel.Sets[index]) continue; - cel.Positions.Add(new CelPosition - { - Set = index, - X = int.Parse(point[0]), - Y = int.Parse(point[1]) - }); - } + Set = index, + X = int.Parse(point[0]), + Y = int.Parse(point[1]) + }); } } } diff --git a/Services/FileParserService.cs b/Services/FileParserService.cs index ca93b57..9700085 100644 --- a/Services/FileParserService.cs +++ b/Services/FileParserService.cs @@ -11,26 +11,26 @@ using Microsoft.Extensions.Logging; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; -namespace fxl.codes.kisekae.Services +namespace fxl.codes.kisekae.Services; + +public class FileParserService { - public class FileParserService + private static readonly byte[] KissHeader = "KiSS"u8.ToArray(); + private static readonly Color Transparent = Color.Black.WithAlpha(0); + + private readonly ILogger _logger; + private readonly IsolatedStorageFile _storage; + + public FileParserService(ILogger logger) { - private static readonly byte[] KissHeader = "KiSS"u8.ToArray(); - private static readonly Color Transparent = Color.Black.WithAlpha(0); + _logger = logger; + _storage = IsolatedStorageFile.GetUserStoreForApplication(); + } - private readonly ILogger _logger; - private readonly IsolatedStorageFile _storage; - - public FileParserService(ILogger logger) + public void UnzipLzh(IFormFile file, MemoryStream memoryStream = null) + { + if (!_storage.FileExists(file.FileName)) { - _logger = logger; - _storage = IsolatedStorageFile.GetUserStoreForApplication(); - } - - public void UnzipLzh(IFormFile file, MemoryStream memoryStream = null) - { - if (_storage.FileExists(file.FileName)) _storage.DeleteFile(file.FileName); - using var writer = _storage.CreateFile(file.FileName); if (memoryStream != null) @@ -40,166 +40,162 @@ namespace fxl.codes.kisekae.Services writer.Flush(); writer.Close(); - - var root = _storage.GetType() - .GetProperty("RootDirectory", BindingFlags.Instance | BindingFlags.NonPublic)? - .GetValue(_storage)? - .ToString() ?? ""; - - var directory = Path.GetFileNameWithoutExtension(file.FileName); - if (_storage.DirectoryExists(directory)) - { - var allFiles = _storage.GetFileNames(Path.Combine(directory, "*")); - foreach (var existingFile in allFiles) _storage.DeleteFile(Path.Combine(directory, existingFile)); - - _storage.DeleteDirectory(directory); - } - - _storage.CreateDirectory(directory); - var process = new Process - { - StartInfo = new ProcessStartInfo - { - FileName = "7z", - Arguments = $"x {Path.Combine(root, file.FileName)} -o{Path.Combine(root, directory)}", - UseShellExecute = false, - RedirectStandardError = true, - RedirectStandardOutput = true - } - }; - - if (!process.Start()) throw new InvalidDataException("Unable to call p7zip to extract archive"); - - while (!process.StandardOutput.EndOfStream) _logger.LogTrace(process.StandardOutput.ReadLine()); - process.WaitForExit(); - - _storage.DeleteFile(file.FileName); } - public Color[] ParsePalette(Palette palette, out int groups, out int colorsPerGroup) + var root = _storage.GetType() + .GetProperty("RootDirectory", BindingFlags.Instance | BindingFlags.NonPublic)? + .GetValue(_storage)? + .ToString() ?? ""; + + var directory = Path.GetFileNameWithoutExtension(file.FileName); + if (_storage.DirectoryExists(directory)) return; + + _storage.CreateDirectory(directory); + var process = new Process { - groups = 0; - colorsPerGroup = 0; + StartInfo = new ProcessStartInfo + { + FileName = "7z", + Arguments = $"x {Path.Combine(root, file.FileName)} -o{Path.Combine(root, directory)}", + UseShellExecute = false, + RedirectStandardError = true, + RedirectStandardOutput = true + } + }; - if (palette.Data.Length == 0) return null; - if (!palette.Data[..KissHeader.Length].SequenceEqual(KissHeader)) return GetColors(palette.Data); + if (!process.Start()) throw new InvalidDataException("Unable to call p7zip to extract archive"); - // Verify palette mark? - if (palette.Data[4] != 16) _logger.LogError($"{palette.FileName} is not a valid palette file"); + while (!process.StandardOutput.EndOfStream) _logger.LogTrace(process.StandardOutput.ReadLine()); + process.WaitForExit(); + } - var colorDepth = Convert.ToInt32(palette.Data[5]); - colorsPerGroup = BitConverter.ToInt16(palette.Data, 8); - groups = BitConverter.ToInt16(palette.Data, 10); + public Color[] ParsePalette(Palette palette, out int groups, out int colorsPerGroup) + { + groups = 0; + colorsPerGroup = 0; - return GetColors(palette.Data[32..], colorDepth, colorsPerGroup, groups); + if (palette.Data.Length == 0) return null; + if (!palette.Data[..KissHeader.Length].SequenceEqual(KissHeader)) return GetColors(palette.Data); + + // Verify palette mark? + if (palette.Data[4] != 16) _logger.LogError($"{palette.FileName} is not a valid palette file"); + + var colorDepth = Convert.ToInt32(palette.Data[5]); + colorsPerGroup = BitConverter.ToInt16(palette.Data, 8); + groups = BitConverter.ToInt16(palette.Data, 10); + + return GetColors(palette.Data[32..], colorDepth, colorsPerGroup, groups); + } + + public void RenderCel(CelConfig celConfig) + { + _logger.LogTrace($"Reading cel {celConfig.Cel.FileName}"); + var buffer = celConfig.Cel?.Data?.ToArray(); + if (buffer == null || buffer.Length == 0) return; + + if (buffer[..KissHeader.Length].SequenceEqual(KissHeader)) + { + // Verify cel mark? + if (buffer[4] != 32) _logger.LogError($"{celConfig.Cel.FileName} is not a valid cel file"); + + var pixelBits = Convert.ToInt32(buffer[5]); + var width = BitConverter.ToInt16(buffer, 8); + var height = BitConverter.ToInt16(buffer, 10); + var xOffset = BitConverter.ToInt16(buffer, 12); + var yOffset = BitConverter.ToInt16(buffer, 14); + + celConfig.Cel.OffsetX = xOffset; + celConfig.Cel.OffsetY = yOffset; + celConfig.Cel.Height = height; + celConfig.Cel.Width = width; + + celConfig.Render = GetCelImage(buffer[32..], celConfig.Palette, width, height, pixelBits); + } + else + { + var width = BitConverter.ToInt16(buffer, 0); + var height = BitConverter.ToInt16(buffer, 2); + + celConfig.Cel.Height = height; + celConfig.Cel.Width = width; + celConfig.Render = GetCelImage(buffer[4..], celConfig.Palette, width, height); + } + } + + private Color[] GetColors(IReadOnlyCollection bytes, int depth = 12, int colorsPerGroup = 16, int groups = 10) + { + _logger.LogTrace("Converting byte array to colors"); + var colorValues = GetValues(bytes, depth / 3); + var colors = new Color[colorsPerGroup * groups]; + var length = depth == 12 ? 4 : 3; + var multiplier = depth == 12 ? 16 : 1; + // Nibbles order for 12 bits: R, B, 0, G + + for (var groupIndex = 0; groupIndex < groups; groupIndex++) + for (var colorIndex = 0; colorIndex < colorsPerGroup; colorIndex++) + { + var start = (groupIndex + colorIndex) * length; + var red = colorValues[start] * multiplier; + var green = colorValues[start + (depth == 12 ? 3 : 1)] * multiplier; + var blue = colorValues[start + (depth == 12 ? 1 : 2)] * multiplier; + colors[groupIndex + colorIndex] = Color.FromRgb(Convert.ToByte(red), Convert.ToByte(green), Convert.ToByte(blue)); } - public void RenderCel(CelConfig celConfig) + return colors; + } + + private Render GetCelImage(IReadOnlyCollection bytes, + Palette palette, + int width, + int height, + int pixelBits = 4) + { + _logger.LogTrace("Converting byte array to base64 encoded gifs per palette"); + var values = GetValues(bytes, pixelBits); + + using var bitmap = new Image(width, height); + bitmap.ProcessPixelRows(processor => { - _logger.LogTrace($"Reading cel {celConfig.Cel.FileName}"); - var buffer = celConfig.Cel?.Data?.ToArray(); - if (buffer == null || buffer.Length == 0) return; - - if (buffer[..KissHeader.Length].SequenceEqual(KissHeader)) - { - // Verify cel mark? - if (buffer[4] != 32) _logger.LogError($"{celConfig.Cel.FileName} is not a valid cel file"); - - var pixelBits = Convert.ToInt32(buffer[5]); - var width = BitConverter.ToInt16(buffer, 8); - var height = BitConverter.ToInt16(buffer, 10); - var xOffset = BitConverter.ToInt16(buffer, 12); - var yOffset = BitConverter.ToInt16(buffer, 14); - - celConfig.Cel.OffsetX = xOffset; - celConfig.Cel.OffsetY = yOffset; - celConfig.Cel.Height = height; - celConfig.Cel.Width = width; - - celConfig.Render = GetCelImage(buffer[32..], celConfig.Palette, width, height, pixelBits); - } - else - { - var width = BitConverter.ToInt16(buffer, 0); - var height = BitConverter.ToInt16(buffer, 2); - - celConfig.Cel.Height = height; - celConfig.Cel.Width = width; - celConfig.Render = GetCelImage(buffer[4..], celConfig.Palette, width, height); - } - } - - private Color[] GetColors(IReadOnlyCollection bytes, int depth = 12, int colorsPerGroup = 16, int groups = 10) - { - _logger.LogTrace("Converting byte array to colors"); - var colorValues = GetValues(bytes, depth / 3); - var colors = new Color[colorsPerGroup * groups]; - var length = depth == 12 ? 4 : 3; - var multiplier = depth == 12 ? 16 : 1; - // Nibbles order for 12 bits: R, B, 0, G - - for (var groupIndex = 0; groupIndex < groups; groupIndex++) - for (var colorIndex = 0; colorIndex < colorsPerGroup; colorIndex++) - { - var start = (groupIndex + colorIndex) * length; - var red = colorValues[start] * multiplier; - var green = colorValues[start + (depth == 12 ? 3 : 1)] * multiplier; - var blue = colorValues[start + (depth == 12 ? 1 : 2)] * multiplier; - colors[groupIndex + colorIndex] = Color.FromRgb(Convert.ToByte(red), Convert.ToByte(green), Convert.ToByte(blue)); - } - - return colors; - } - - private Render GetCelImage(IReadOnlyCollection bytes, - Palette palette, - int width, - int height, - int pixelBits = 4) - { - _logger.LogTrace("Converting byte array to base64 encoded gifs per palette"); - var values = GetValues(bytes, pixelBits); - - using var bitmap = new Image(width, height); var index = 0; - - for (var row = 0; row < height; row++) + for (var y = 0; y < processor.Height; y++) { - for (var column = 0; column < width; column++) + var row = processor.GetRowSpan(y); + for (var x = 0; x < row.Length; x++) { var value = values[index]; - bitmap[row, column] = value == 0 || value >= palette.Colors.Count ? Transparent : Color.ParseHex(palette.Colors[value].Hex); + var isTransparent = value == 0 || value >= palette.Colors.Count; + row[x] = isTransparent ? Transparent : Color.ParseHex(palette.Colors[value].Hex); index++; } if (width % 2 != 0 && pixelBits == 4) index++; } + }); - using var memory = new MemoryStream(); - bitmap.SaveAsGif(memory); + using var memory = new MemoryStream(); + bitmap.SaveAsGif(memory); - return new Render - { - Image = memory.ToArray() - }; - } - - private static int[] GetValues(IReadOnlyCollection bytes, int bits = 4) + return new Render { - if (bits != 4) return bytes.Select(Convert.ToInt32).ToArray(); + Image = memory.ToArray() + }; + } - var values = new int[bytes.Count * 2]; - var index = 0; - foreach (var slice in bytes) - { - var nib1 = (slice >> 4) & 0x0F; - var nib2 = slice & 0x0F; - values[index] = nib1; - values[index + 1] = nib2; - index += 2; - } + private static int[] GetValues(IReadOnlyCollection bytes, int bits = 4) + { + if (bits != 4) return bytes.Select(Convert.ToInt32).ToArray(); - return values; + var values = new int[bytes.Count * 2]; + var index = 0; + foreach (var slice in bytes) + { + var nib1 = (slice >> 4) & 0x0F; + var nib2 = slice & 0x0F; + values[index] = nib1; + values[index + 1] = nib2; + index += 2; } + + return values; } } \ No newline at end of file diff --git a/Views/Home/Index.cshtml b/Views/Home/Index.cshtml index 2e5197c..1963eb1 100644 --- a/Views/Home/Index.cshtml +++ b/Views/Home/Index.cshtml @@ -7,6 +7,7 @@
+
@@ -25,9 +26,4 @@ } - - -@section Scripts -{ - -} + \ No newline at end of file diff --git a/wwwroot/js/main.js b/wwwroot/js/main.js index 3db7711..cb56eeb 100644 --- a/wwwroot/js/main.js +++ b/wwwroot/js/main.js @@ -35,7 +35,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQ \*************************/ /***/ (function(module, exports, __webpack_require__) { -eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", ({ value: true }));\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"), __webpack_require__(/*! fabric */ \"./node_modules/fabric/dist/fabric.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, $, fabric_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", ({ value: true }));\n exports.PlaySpace = void 0;\n var PlaySpace = (function () {\n function PlaySpace(model) {\n var _this = this;\n var container = $(\".container\");\n this.canvas = new fabric_1.fabric.Canvas(\"play_space\");\n this.canvas.selection = false;\n this.canvas.setHeight(container.height()).setWidth(container.width());\n this.model = model;\n this.selectSet();\n $(\".set-link\").on(\"click\", function (event) {\n var set = parseInt($(event.target).attr(\"data-set\"));\n _this.selectSet(set);\n });\n this.canvas.setZoom(this.canvas.width / model.width);\n this.canvas.on(\"mouse:down\", function (event) {\n if (!event.target)\n return;\n console.log(event.target);\n });\n }\n PlaySpace.prototype.selectSet = function (set) {\n return __awaiter(this, void 0, void 0, function () {\n var celGroups, _loop_1, this_1, _i, _a, cel;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!set) {\n set = this.model.sets.indexOf(true);\n }\n $(\".set-link\").removeClass(\"active\");\n $(\".set-link[data-set=\".concat(set, \"]\")).addClass(\"active\");\n this.canvas.clear();\n if (this.model.borderColor)\n this.canvas.backgroundColor = this.model.borderColor;\n celGroups = {};\n _loop_1 = function (cel) {\n var image;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4, new Promise(function (resolve) {\n fabric_1.fabric.Image.fromURL(cel.image, function (image) { return resolve(image); });\n })];\n case 1:\n image = _c.sent();\n image.set({\n left: cel.initialPositions[set].x + cel.offset.x,\n top: cel.initialPositions[set].y + cel.offset.y,\n selectable: cel.fix == 0,\n hoverCursor: \"default\",\n hasControls: false,\n lockRotation: true,\n lockScalingX: true,\n lockScalingY: true,\n hasBorders: false\n });\n this_1.canvas.add(image);\n if (!celGroups[cel.mark])\n celGroups[cel.mark] = [];\n celGroups[cel.mark].push(image);\n return [2];\n }\n });\n };\n this_1 = this;\n _i = 0, _a = this.model.cels.filter(function (x) { return x.initialPositions[set]; });\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3, 4];\n cel = _a[_i];\n return [5, _loop_1(cel)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3, 1];\n case 4:\n this.linkItems(celGroups);\n return [2];\n }\n });\n });\n };\n PlaySpace.prototype.linkItems = function (groups) {\n var _loop_2 = function (key) {\n var group = groups[key];\n var length_1 = group.length;\n if (length_1 < 2)\n return \"continue\";\n var top_1 = group.pop();\n if (!top_1.selectable)\n return \"continue\";\n top_1.set({ hoverCursor: \"move\" });\n var transformMatrix = top_1.calcTransformMatrix();\n var invertedTransform = fabric_1.fabric.util.invertTransform(transformMatrix);\n for (var _i = 0, group_1 = group; _i < group_1.length; _i++) {\n var item = group_1[_i];\n item[\"relationship\"] = fabric_1.fabric.util.multiplyTransformMatrices(invertedTransform, item.calcTransformMatrix());\n }\n top_1.on(\"moving\", function (event) {\n var currentTransform = top_1.calcTransformMatrix();\n for (var _i = 0, group_2 = group; _i < group_2.length; _i++) {\n var item = group_2[_i];\n var relationship = item.relationship;\n if (!relationship)\n continue;\n var transform = fabric_1.fabric.util.multiplyTransformMatrices(currentTransform, relationship);\n var translation = fabric_1.fabric.util.qrDecompose(transform);\n item.setPositionByOrigin(new fabric_1.fabric.Point(translation.translateX, translation.translateY), \"center\", \"center\");\n item.set(translation);\n item.set({ flipX: false, flipY: false }).setCoords();\n }\n });\n };\n for (var key in groups) {\n _loop_2(key);\n }\n };\n return PlaySpace;\n }());\n exports.PlaySpace = PlaySpace;\n $(function () {\n new PlaySpace(window.playSet);\n });\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n//# sourceURL=webpack:///./Scripts/play.ts?"); +eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", ({ value: true }));\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"), __webpack_require__(/*! fabric */ \"./node_modules/fabric/dist/fabric.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, $, fabric_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", ({ value: true }));\n exports.PlaySpace = void 0;\n var PlaySpace = (function () {\n function PlaySpace(model) {\n var _this = this;\n var container = $(\".container\");\n this.canvas = new fabric_1.fabric.Canvas(\"play_space\");\n this.canvas.selection = false;\n this.canvas.setHeight(container.height()).setWidth(container.width());\n this.model = model;\n this.selectSet();\n $(\".set-link\").on(\"click\", function (event) {\n var set = parseInt($(event.target).attr(\"data-set\"));\n _this.selectSet(set);\n });\n this.canvas.setZoom(this.canvas.width / model.width);\n }\n PlaySpace.prototype.selectSet = function (set) {\n return __awaiter(this, void 0, void 0, function () {\n var celGroups, _loop_1, this_1, _i, _a, cel;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!set) {\n set = this.model.sets.indexOf(true);\n }\n $(\".set-link\").removeClass(\"active\");\n $(\".set-link[data-set=\".concat(set, \"]\")).addClass(\"active\");\n this.canvas.clear();\n if (this.model.borderColor)\n this.canvas.backgroundColor = this.model.borderColor;\n celGroups = {};\n _loop_1 = function (cel) {\n var image;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4, new Promise(function (resolve) {\n fabric_1.fabric.Image.fromURL(cel.image, function (image) { return resolve(image); });\n })];\n case 1:\n image = _c.sent();\n image.set({\n left: cel.initialPositions[set].x + cel.offset.x,\n top: cel.initialPositions[set].y + cel.offset.y,\n selectable: cel.fix == 0,\n hoverCursor: \"default\",\n hasControls: false,\n lockRotation: true,\n lockScalingX: true,\n lockScalingY: true,\n hasBorders: false\n });\n this_1.canvas.add(image);\n if (!celGroups[cel.mark])\n celGroups[cel.mark] = [];\n celGroups[cel.mark].push(image);\n return [2];\n }\n });\n };\n this_1 = this;\n _i = 0, _a = this.model.cels.filter(function (x) { return x.initialPositions[set]; });\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3, 4];\n cel = _a[_i];\n return [5, _loop_1(cel)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3, 1];\n case 4:\n this.linkItems(celGroups);\n return [2];\n }\n });\n });\n };\n PlaySpace.prototype.linkItems = function (groups) {\n var _loop_2 = function (key) {\n var group = groups[key];\n var length_1 = group.length;\n var top_1 = group.pop();\n if (length_1 < 2) {\n top_1.set({ hoverCursor: \"move\" });\n return \"continue\";\n }\n if (!top_1.selectable)\n return \"continue\";\n top_1.set({ hoverCursor: \"move\" });\n var transformMatrix = top_1.calcTransformMatrix();\n var invertedTransform = fabric_1.fabric.util.invertTransform(transformMatrix);\n for (var _i = 0, group_1 = group; _i < group_1.length; _i++) {\n var item = group_1[_i];\n item[\"relationship\"] = fabric_1.fabric.util.multiplyTransformMatrices(invertedTransform, item.calcTransformMatrix());\n }\n top_1.on(\"moving\", function (event) {\n var currentTransform = top_1.calcTransformMatrix();\n for (var _i = 0, group_2 = group; _i < group_2.length; _i++) {\n var item = group_2[_i];\n var relationship = item.relationship;\n if (!relationship)\n continue;\n var transform = fabric_1.fabric.util.multiplyTransformMatrices(currentTransform, relationship);\n var translation = fabric_1.fabric.util.qrDecompose(transform);\n item.setPositionByOrigin(new fabric_1.fabric.Point(translation.translateX, translation.translateY), \"center\", \"center\");\n item.set(translation);\n item.set({ flipX: false, flipY: false }).setCoords();\n }\n });\n };\n for (var key in groups) {\n _loop_2(key);\n }\n };\n return PlaySpace;\n }());\n exports.PlaySpace = PlaySpace;\n $(function () {\n new PlaySpace(window.playSet);\n });\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n//# sourceURL=webpack:///./Scripts/play.ts?"); /***/ }),