From 9771f45e6df21b2040a8122b2fce16863f2327f2 Mon Sep 17 00:00:00 2001
From: Dennis Postma <dennis@directonline.io>
Date: Mon, 27 Jan 2025 01:56:04 +0100
Subject: [PATCH] Removed isAnimated and isLooping fields

---
 migrations/Migration20250127005232.ts         | 104 ++++++++++++++++++
 src/application/types.ts                      |   1 -
 src/commands/init.ts                          |  14 ---
 src/entities/base/mapObject.ts                |  12 --
 src/entities/base/spriteAction.ts             |  24 ----
 src/entities/sprite.ts                        |   2 -
 .../assetManager/mapObject/update.ts          |   2 -
 .../gameMaster/assetManager/sprite/update.ts  |   2 -
 8 files changed, 104 insertions(+), 57 deletions(-)
 create mode 100644 migrations/Migration20250127005232.ts

diff --git a/migrations/Migration20250127005232.ts b/migrations/Migration20250127005232.ts
new file mode 100644
index 0000000..30a91c2
--- /dev/null
+++ b/migrations/Migration20250127005232.ts
@@ -0,0 +1,104 @@
+import { Migration } from '@mikro-orm/migrations';
+
+export class Migration20250127005232 extends Migration {
+
+  override async up(): Promise<void> {
+    this.addSql(`create table \`map\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`width\` int not null default 10, \`height\` int not null default 10, \`tiles\` json null, \`pvp\` tinyint(1) not null default false, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+
+    this.addSql(`create table \`map_effect\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`effect\` varchar(255) not null, \`strength\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`map_effect\` add index \`map_effect_map_id_index\`(\`map_id\`);`);
+
+    this.addSql(`create table \`map_event_tile\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`type\` enum('BLOCK', 'TELEPORT', 'NPC', 'ITEM') not null, \`position_x\` int not null, \`position_y\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`map_event_tile\` add index \`map_event_tile_map_id_index\`(\`map_id\`);`);
+
+    this.addSql(`create table \`map_event_tile_teleport\` (\`id\` varchar(255) not null, \`map_event_tile_id\` varchar(255) not null, \`to_map_id\` varchar(255) not null, \`to_rotation\` int not null, \`to_position_x\` int not null, \`to_position_y\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`map_event_tile_teleport\` add unique \`map_event_tile_teleport_map_event_tile_id_unique\`(\`map_event_tile_id\`);`);
+    this.addSql(`alter table \`map_event_tile_teleport\` add index \`map_event_tile_teleport_to_map_id_index\`(\`to_map_id\`);`);
+
+    this.addSql(`create table \`map_object\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json null, \`origin_x\` numeric(10,2) not null default 0, \`origin_y\` numeric(10,2) not null default 0, \`frame_rate\` int not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+
+    this.addSql(`create table \`placed_map_object\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`map_object_id\` varchar(255) not null, \`is_rotated\` tinyint(1) not null default false, \`position_x\` int not null default 0, \`position_y\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_id_index\`(\`map_id\`);`);
+    this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_object_id_index\`(\`map_object_id\`);`);
+
+    this.addSql(`create table \`sprite\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+
+    this.addSql(`create table \`item\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`description\` varchar(255) not null default '', \`item_type\` enum('WEAPON', 'HELMET', 'CHEST', 'LEGS', 'BOOTS', 'GLOVES', 'RING', 'NECKLACE') not null, \`stackable\` tinyint(1) not null default false, \`rarity\` enum('COMMON', 'UNCOMMON', 'RARE', 'EPIC', 'LEGENDARY') not null default 'COMMON', \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`item\` add index \`item_sprite_id_index\`(\`sprite_id\`);`);
+
+    this.addSql(`create table \`character_type\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`gender\` enum('MALE', 'FEMALE') not null, \`race\` enum('HUMAN', 'ELF', 'DWARF', 'ORC', 'GOBLIN') not null, \`is_selectable\` tinyint(1) not null default false, \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`character_type\` add index \`character_type_sprite_id_index\`(\`sprite_id\`);`);
+
+    this.addSql(`create table \`character_hair\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`gender\` varchar(255) not null default 'MALE', \`is_selectable\` tinyint(1) not null default false, \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`character_hair\` add index \`character_hair_sprite_id_index\`(\`sprite_id\`);`);
+
+    this.addSql(`create table \`sprite_action\` (\`id\` varchar(255) not null, \`sprite_id\` varchar(255) not null, \`action\` varchar(255) not null, \`sprites\` json null, \`origin_x\` int not null default 0, \`origin_y\` int not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`frame_rate\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`sprite_action\` add index \`sprite_action_sprite_id_index\`(\`sprite_id\`);`);
+
+    this.addSql(`create table \`tile\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+
+    this.addSql(`create table \`user\` (\`id\` varchar(255) not null, \`username\` varchar(255) not null, \`email\` varchar(255) not null, \`password\` varchar(255) not null, \`online\` tinyint(1) not null default false, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`user\` add unique \`user_username_unique\`(\`username\`);`);
+    this.addSql(`alter table \`user\` add unique \`user_email_unique\`(\`email\`);`);
+
+    this.addSql(`create table \`password_reset_token\` (\`id\` varchar(255) not null, \`user_id\` varchar(255) not null, \`token\` varchar(255) not null, \`created_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`password_reset_token\` add index \`password_reset_token_user_id_index\`(\`user_id\`);`);
+    this.addSql(`alter table \`password_reset_token\` add unique \`password_reset_token_token_unique\`(\`token\`);`);
+
+    this.addSql(`create table \`character\` (\`id\` varchar(255) not null, \`user_id\` varchar(255) not null, \`name\` varchar(255) not null, \`online\` tinyint(1) not null default false, \`role\` varchar(255) not null default 'player', \`map_id\` varchar(255) not null, \`position_x\` int not null default 0, \`position_y\` int not null default 0, \`rotation\` int not null default 0, \`character_type_id\` varchar(255) null, \`character_hair_id\` varchar(255) null, \`alignment\` int not null default 50, \`hitpoints\` int not null default 100, \`mana\` int not null default 100, \`level\` int not null default 1, \`experience\` int not null default 0, \`strength\` int not null default 10, \`dexterity\` int not null default 10, \`intelligence\` int not null default 10, \`wisdom\` int not null default 10, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`character\` add index \`character_user_id_index\`(\`user_id\`);`);
+    this.addSql(`alter table \`character\` add unique \`character_name_unique\`(\`name\`);`);
+    this.addSql(`alter table \`character\` add index \`character_map_id_index\`(\`map_id\`);`);
+    this.addSql(`alter table \`character\` add index \`character_character_type_id_index\`(\`character_type_id\`);`);
+    this.addSql(`alter table \`character\` add index \`character_character_hair_id_index\`(\`character_hair_id\`);`);
+
+    this.addSql(`create table \`chat\` (\`id\` varchar(255) not null, \`character_id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`message\` varchar(255) not null, \`created_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`chat\` add index \`chat_character_id_index\`(\`character_id\`);`);
+    this.addSql(`alter table \`chat\` add index \`chat_map_id_index\`(\`map_id\`);`);
+
+    this.addSql(`create table \`character_item\` (\`id\` varchar(255) not null, \`character_id\` varchar(255) not null, \`item_id\` varchar(255) not null, \`quantity\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`character_item\` add index \`character_item_character_id_index\`(\`character_id\`);`);
+    this.addSql(`alter table \`character_item\` add index \`character_item_item_id_index\`(\`item_id\`);`);
+
+    this.addSql(`create table \`character_equipment\` (\`id\` varchar(255) not null, \`slot\` enum('HEAD', 'BODY', 'ARMS', 'LEGS', 'NECK', 'RING') not null, \`character_id\` varchar(255) not null, \`character_item_id\` varchar(255) not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`);
+    this.addSql(`alter table \`character_equipment\` add index \`character_equipment_character_id_index\`(\`character_id\`);`);
+    this.addSql(`alter table \`character_equipment\` add index \`character_equipment_character_item_id_index\`(\`character_item_id\`);`);
+
+    this.addSql(`create table \`world\` (\`date\` datetime not null, \`rain_percentage\` int not null default 0, \`fog_density\` int not null default 0, primary key (\`date\`)) default character set utf8mb4 engine = InnoDB;`);
+
+    this.addSql(`alter table \`map_effect\` add constraint \`map_effect_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`map_event_tile\` add constraint \`map_event_tile_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`map_event_tile_teleport\` add constraint \`map_event_tile_teleport_map_event_tile_id_foreign\` foreign key (\`map_event_tile_id\`) references \`map_event_tile\` (\`id\`) on update cascade on delete cascade;`);
+    this.addSql(`alter table \`map_event_tile_teleport\` add constraint \`map_event_tile_teleport_to_map_id_foreign\` foreign key (\`to_map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`placed_map_object\` add constraint \`placed_map_object_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`);
+    this.addSql(`alter table \`placed_map_object\` add constraint \`placed_map_object_map_object_id_foreign\` foreign key (\`map_object_id\`) references \`map_object\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`item\` add constraint \`item_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`);
+
+    this.addSql(`alter table \`character_type\` add constraint \`character_type_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`);
+
+    this.addSql(`alter table \`character_hair\` add constraint \`character_hair_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`);
+
+    this.addSql(`alter table \`sprite_action\` add constraint \`sprite_action_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`password_reset_token\` add constraint \`password_reset_token_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`character\` add constraint \`character_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update cascade on delete cascade;`);
+    this.addSql(`alter table \`character\` add constraint \`character_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade;`);
+    this.addSql(`alter table \`character\` add constraint \`character_character_type_id_foreign\` foreign key (\`character_type_id\`) references \`character_type\` (\`id\`) on update cascade on delete set null;`);
+    this.addSql(`alter table \`character\` add constraint \`character_character_hair_id_foreign\` foreign key (\`character_hair_id\`) references \`character_hair\` (\`id\`) on update cascade on delete set null;`);
+
+    this.addSql(`alter table \`chat\` add constraint \`chat_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`);
+    this.addSql(`alter table \`chat\` add constraint \`chat_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`character_item\` add constraint \`character_item_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`);
+    this.addSql(`alter table \`character_item\` add constraint \`character_item_item_id_foreign\` foreign key (\`item_id\`) references \`item\` (\`id\`) on update cascade on delete cascade;`);
+
+    this.addSql(`alter table \`character_equipment\` add constraint \`character_equipment_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`);
+    this.addSql(`alter table \`character_equipment\` add constraint \`character_equipment_character_item_id_foreign\` foreign key (\`character_item_id\`) references \`character_item\` (\`id\`) on update cascade on delete cascade;`);
+  }
+
+}
diff --git a/src/application/types.ts b/src/application/types.ts
index 9a7bdcf..4d2a81b 100644
--- a/src/application/types.ts
+++ b/src/application/types.ts
@@ -37,7 +37,6 @@ export type AssetData = {
   updatedAt: Date
   originX?: number
   originY?: number
-  isAnimated?: boolean
   frameRate?: number
   frameWidth?: number
   frameHeight?: number
diff --git a/src/commands/init.ts b/src/commands/init.ts
index 19751d6..69640e8 100644
--- a/src/commands/init.ts
+++ b/src/commands/init.ts
@@ -89,8 +89,6 @@ export default class InitCommand extends BaseCommand {
       ])
       .setOriginX(0)
       .setOriginY(0)
-      .setIsAnimated(false)
-      .setIsLooping(false)
       .setFrameWidth(64)
       .setFrameHeight(94)
       .setFrameRate(0)
@@ -105,8 +103,6 @@ export default class InitCommand extends BaseCommand {
       ])
       .setOriginX(0)
       .setOriginY(0)
-      .setIsAnimated(false)
-      .setIsLooping(false)
       .setFrameWidth(64)
       .setFrameHeight(94)
       .setFrameRate(0)
@@ -124,8 +120,6 @@ export default class InitCommand extends BaseCommand {
       ])
       .setOriginX(0)
       .setOriginY(0)
-      .setIsAnimated(true)
-      .setIsLooping(false)
       .setFrameWidth(64)
       .setFrameHeight(94)
       .setFrameRate(7)
@@ -143,8 +137,6 @@ export default class InitCommand extends BaseCommand {
       ])
       .setOriginX(0)
       .setOriginY(0)
-      .setIsAnimated(true)
-      .setIsLooping(false)
       .setFrameWidth(64)
       .setFrameHeight(94)
       .setFrameRate(7)
@@ -175,8 +167,6 @@ export default class InitCommand extends BaseCommand {
       ])
       .setOriginX(0.5)
       .setOriginY(5.34)
-      .setIsAnimated(false)
-      .setIsLooping(false)
       .setFrameWidth(64)
       .setFrameHeight(18)
       .setFrameRate(0)
@@ -191,8 +181,6 @@ export default class InitCommand extends BaseCommand {
       ])
       .setOriginX(0.5)
       .setOriginY(4.34)
-      .setIsAnimated(false)
-      .setIsLooping(false)
       .setFrameWidth(64)
       .setFrameHeight(22)
       .setFrameRate(0)
@@ -216,8 +204,6 @@ export default class InitCommand extends BaseCommand {
         sprites: ['data:image/png;base64,...'],
         originX: 0,
         originY: 0,
-        isAnimated: false,
-        isLooping: false,
         frameWidth: 64,
         frameHeight: 94,
         frameRate: 0
diff --git a/src/entities/base/mapObject.ts b/src/entities/base/mapObject.ts
index a3fb7ae..b4ff2da 100644
--- a/src/entities/base/mapObject.ts
+++ b/src/entities/base/mapObject.ts
@@ -21,9 +21,6 @@ export class BaseMapObject extends BaseEntity {
   @Property({ type: 'decimal', precision: 10, scale: 2 })
   originY = 0
 
-  @Property()
-  isAnimated = false
-
   @Property()
   frameRate = 0
 
@@ -84,15 +81,6 @@ export class BaseMapObject extends BaseEntity {
     return this.originY
   }
 
-  setIsAnimated(isAnimated: boolean) {
-    this.isAnimated = isAnimated
-    return this
-  }
-
-  getIsAnimated() {
-    return this.isAnimated
-  }
-
   setFrameRate(frameRate: number) {
     this.frameRate = frameRate
     return this
diff --git a/src/entities/base/spriteAction.ts b/src/entities/base/spriteAction.ts
index ea2ea34..a84d081 100644
--- a/src/entities/base/spriteAction.ts
+++ b/src/entities/base/spriteAction.ts
@@ -25,12 +25,6 @@ export class BaseSpriteAction extends BaseEntity {
   @Property()
   originY = 0
 
-  @Property()
-  isAnimated = false
-
-  @Property()
-  isLooping = false
-
   @Property()
   frameWidth = 0
 
@@ -94,24 +88,6 @@ export class BaseSpriteAction extends BaseEntity {
     return this.originY
   }
 
-  setIsAnimated(isAnimated: boolean) {
-    this.isAnimated = isAnimated
-    return this
-  }
-
-  getIsAnimated() {
-    return this.isAnimated
-  }
-
-  setIsLooping(isLooping: boolean) {
-    this.isLooping = isLooping
-    return this
-  }
-
-  getIsLooping() {
-    return this.isLooping
-  }
-
   setFrameWidth(frameWidth: number) {
     this.frameWidth = frameWidth
     return this
diff --git a/src/entities/sprite.ts b/src/entities/sprite.ts
index d1b7c71..d484743 100644
--- a/src/entities/sprite.ts
+++ b/src/entities/sprite.ts
@@ -18,8 +18,6 @@ export class Sprite extends BaseSprite {
           action: spriteAction.getAction(),
           originX: spriteAction.getOriginX(),
           originY: spriteAction.getOriginY(),
-          isAnimated: spriteAction.getIsAnimated(),
-          isLooping: spriteAction.getIsLooping(),
           frameWidth: spriteAction.getFrameWidth(),
           frameHeight: spriteAction.getFrameHeight(),
           frameRate: spriteAction.getFrameRate(),
diff --git a/src/events/gameMaster/assetManager/mapObject/update.ts b/src/events/gameMaster/assetManager/mapObject/update.ts
index 3db32ca..5c92cc4 100644
--- a/src/events/gameMaster/assetManager/mapObject/update.ts
+++ b/src/events/gameMaster/assetManager/mapObject/update.ts
@@ -8,7 +8,6 @@ type Payload = {
   tags: string[]
   originX: number
   originY: number
-  isAnimated: boolean
   frameRate: number
   frameWidth: number
   frameHeight: number
@@ -33,7 +32,6 @@ export default class MapObjectUpdateEvent extends BaseEvent {
         .setTags(data.tags)
         .setOriginX(data.originX)
         .setOriginY(data.originY)
-        .setIsAnimated(data.isAnimated)
         .setFrameRate(data.frameRate)
         .setFrameWidth(data.frameWidth)
         .setFrameHeight(data.frameHeight)
diff --git a/src/events/gameMaster/assetManager/sprite/update.ts b/src/events/gameMaster/assetManager/sprite/update.ts
index 5787fa5..db9af24 100644
--- a/src/events/gameMaster/assetManager/sprite/update.ts
+++ b/src/events/gameMaster/assetManager/sprite/update.ts
@@ -369,8 +369,6 @@ export default class SpriteUpdateEvent extends BaseEvent {
       sprites: action.sprites,
       originX: action.originX,
       originY: action.originY,
-      isAnimated: action.isAnimated,
-      isLooping: action.isLooping,
       frameWidth: action.frameWidth,
       frameHeight: action.frameHeight,
       frameRate: action.frameRate