From 916849609b1d2b9790a97473f795bfc7d75d7894 Mon Sep 17 00:00:00 2001 From: Adam Balan Date: Fri, 27 Dec 2024 11:51:09 -0700 Subject: [PATCH] Playing around with a new equipment idea --- package.json | 1 + public/pixel-art/equipment-section/body.png | Bin 0 -> 489 bytes public/pixel-art/equipment-section/feet.png | Bin 0 -> 488 bytes public/pixel-art/equipment-section/head.png | Bin 0 -> 602 bytes .../pixel-art/equipment-section/left-arm.png | Bin 0 -> 391 bytes .../pixel-art/equipment-section/left-hand.png | Bin 0 -> 347 bytes .../pixel-art/equipment-section/leggings.png | Bin 0 -> 336 bytes .../equipment-section/nothing-equipped.png | Bin 0 -> 251 bytes .../pixel-art/equipment-section/right-arm.png | Bin 0 -> 385 bytes .../equipment-section/right-hand.png | Bin 0 -> 352 bytes .../body/body-armour-cosmic.gif | Bin 0 -> 9888 bytes .../body/body-armour-holy.png | Bin 0 -> 707 bytes .../body/body-armour-mythical.gif | Bin 0 -> 9788 bytes .../body/body-armour-normal.png | Bin 0 -> 628 bytes .../body/body-armour-one-enchant.png | Bin 0 -> 717 bytes .../body/body-armour-two-enchants.png | Bin 0 -> 725 bytes .../body/body-armour-unique.gif | Bin 0 -> 9917 bytes resources/js/dts/vite.d.ts | 1 - .../item-name/item-name-coloration-text.tsx | 4 - .../enums/equipment-position-paths.ts | 159 +++++++++++++++ .../equipped-section/enums/equipment-types.ts | 43 ++++ .../equipped-section/enums/position-paths.ts | 74 +++++++ .../equipped-section/styles/border-styles.ts | 26 +++ .../tabs/inventory-tabs/equipped-table.tsx | 190 +++++++++--------- tailwind.config.js | 2 +- yarn.lock | 5 + 26 files changed, 399 insertions(+), 106 deletions(-) create mode 100644 public/pixel-art/equipment-section/body.png create mode 100644 public/pixel-art/equipment-section/feet.png create mode 100644 public/pixel-art/equipment-section/head.png create mode 100644 public/pixel-art/equipment-section/left-arm.png create mode 100644 public/pixel-art/equipment-section/left-hand.png create mode 100644 public/pixel-art/equipment-section/leggings.png create mode 100644 public/pixel-art/equipment-section/nothing-equipped.png create mode 100644 public/pixel-art/equipment-section/right-arm.png create mode 100644 public/pixel-art/equipment-section/right-hand.png create mode 100644 public/pixel-art/equipped-sections/body/body-armour-cosmic.gif create mode 100644 public/pixel-art/equipped-sections/body/body-armour-holy.png create mode 100644 public/pixel-art/equipped-sections/body/body-armour-mythical.gif create mode 100644 public/pixel-art/equipped-sections/body/body-armour-normal.png create mode 100644 public/pixel-art/equipped-sections/body/body-armour-one-enchant.png create mode 100644 public/pixel-art/equipped-sections/body/body-armour-two-enchants.png create mode 100644 public/pixel-art/equipped-sections/body/body-armour-unique.gif create mode 100644 resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-position-paths.ts create mode 100644 resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-types.ts create mode 100644 resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/position-paths.ts create mode 100644 resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/styles/border-styles.ts diff --git a/package.json b/package.json index 40fb82507..960f5451f 100755 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "rpg-awesome": "^0.2.0", "styled-components": "^6.1.8", "tailwindcss-classnames": "^3.0.2", + "ts-pattern": "^5.6.0", "tsyringe": "^4.8.0" }, "type": "module" diff --git a/public/pixel-art/equipment-section/body.png b/public/pixel-art/equipment-section/body.png new file mode 100644 index 0000000000000000000000000000000000000000..74ca33d7e982afefc854fe52863b96c61730311c GIT binary patch literal 489 zcmVPx$qe(S_0gOy)J5G8IcJ1IB54Tr)V6a@R9k*_Q{c)8nij@rhv0a9Qyz=7T>zM-~Hya&$#70kF;=*M zzZ^{Y|1s96!=>su#nbZ}yuNSY`tn@0)4HlCLMjvqr6Q!5^bD;c)NKB|5FM1jAqr6z zf%ut*+QY@!scMr=V7Xd5>vPO0MACQV|I`3xA(c*x2DIA)%-oDDdNBV5(uXK&Al|o% zF-d@Pgln_b0s0!G+ejLS+pjiNCC4pk#-nq9G!s}xx@-|*R=R%p5g_e$2y2rv5ulFg fjp9*F+mrAK*hu|kTqmcM00000NkvXXu0mjfvozeZ literal 0 HcmV?d00001 diff --git a/public/pixel-art/equipment-section/feet.png b/public/pixel-art/equipment-section/feet.png new file mode 100644 index 0000000000000000000000000000000000000000..524034871983454b936d2ebb198189c13778c21e GIT binary patch literal 488 zcmVP)Px$qDe$SR9J=0SD}u=Kop#k6DSf)RS(f~4GzTzVEF}X4GA8NC&6H`NF3nU{b6BMo|F57gMx7!C?Xvekm&6_vd&Mp>8*ev|K+iAmfZ2WxN<)3gkUND|6EmUB) zn&qQmU%D5>DZ(U0cDrLTUrQV8nSbFK)}fkY>w_8hPP-t+=G7fjO&P%hN& zK=T9yaf))9QOU-E%ApH3G6!78E(mnT^eS*UTEJrhiXu_SNklaPRSsPuN)CicihPx%6iGxuR9J=8RXt0?P!v6ikhX(%F;HlSR;)us5nM#*=GgWJxauMZaq>5~3BgUo zMQ2UNEFx-`LQ$%qq7Di|RZxevS&V}uD~Nk#j_JmOP9I(V$R4>1@t@zPmc70$Bchp@hToK9`Fp zfT_4u-6YWA_He0n4NiQyr)L$cL}65tgf o!g1|dnmn`sM}){9hP)^62^miMe^c!ug#Z8m07*qoM6N<$f-zVQ5&!@I literal 0 HcmV?d00001 diff --git a/public/pixel-art/equipment-section/left-arm.png b/public/pixel-art/equipment-section/left-arm.png new file mode 100644 index 0000000000000000000000000000000000000000..9629bea809a5a627b9adb61585f0dc5a402048d0 GIT binary patch literal 391 zcmV;20eJq2P)Px$K}keGR9J=WmoW;$KoCWLL_9)3(8g4DsXT&>U}5bQ0v<*13f2~ajYqJu5UjLO z5OM^YSjfb2O>}12RRaEU+3bHiyE`)pAk=a;$vUm@Wjt!%#~RHT0I*ujF-)d`bY0Oz z)0|96WKPmR)FhKkaYNHwD>Xp3*T?m;bz&|8;NkD~`l3Y#qcN7VN#+EAMCLAcuLAI; zKR|T=_M0_;$K|8T=pA5~OoQV&eS-KTubFVaSvz}zRsevz@QVTXF?<5iRzs@@98M_? zr!IVIi`M l$KbUblXzL?#mL4S0B-9|hn>lBP9FdO002ovPDHLkV1njerndk9 literal 0 HcmV?d00001 diff --git a/public/pixel-art/equipment-section/left-hand.png b/public/pixel-art/equipment-section/left-hand.png new file mode 100644 index 0000000000000000000000000000000000000000..52021f8847cedeb93bd6c66b37b752a1f37c740a GIT binary patch literal 347 zcmV-h0i^zkP)Px$6-h)vR9J=Wm$3@MFc60SiueeEpo^{@Tzvr7f)64%`xJt!PvPnVxHvetwo3~_ zUO;fEQ!vz${ufU=*nbKnx%=*tUM~?yJuZiGFq#7Zp7-m=e3}~oK)l*UtW5x*7Q4<} zRY5`^dh9}pj{8m73czeK6z};-20DNapab|{09%S%0SIvp0Db9(x<8>+Rv1jjvT`f} zu+BrH{TkqOzIo@R(Nh3!FR)z1s?h^PL(IQ!XR1i8tsd|g1WBAC#Er>?f?^c zsOSv1XU~jTQ5i^cgRFQP_l?!-fa{!vkf`wpqz0uD{|np{Gh-D1Yf#%c1rSnRRRN@L tJ#~N(*^8@QinW~swe@r5U;uin_002ovPDHLkV1ij=jd1_~ literal 0 HcmV?d00001 diff --git a/public/pixel-art/equipment-section/leggings.png b/public/pixel-art/equipment-section/leggings.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4a947759e77b234529dbc6df4e5031a9d91b90 GIT binary patch literal 336 zcmV-W0k8gvP)Px$3Q0skR9J=Wmaz?kFc3w*qs-unG^Aw#2B2jVq>O^ZCbSH|0<_RT&I7wC08L^S-Pu`-e#9pfZ2w*R<0CZB<7PqdO2^;`U0IYowZR@$40I*&PbL*U! z%yh#^yB+7HF8dV#nd{bw+cdpD_s1l*1k@9n&Ws-5wJV$Gch1Z8n%M-VJCL3U>F%un zzNcAQVEHUWVPH*(gR&;zd-|iAPa&rIk9$BmlnjTFp;t1L42O|7fIYPPP3U$42fzUU i{Qe~@`Q1-oYuy3l9EPs$T#N$%0000Px#wMj%lR9J=Wlv@sjAPhy3u%fQTWwI8w#C(w;b1#*#8k6ZsOl_3MuqikL!kJFCW20rPx$J4r-AR9J=Wm$3@MFc60Siu4f*1-sbEt&@-7A~-nr6$*V6!B=p0D7g3tPHs-R zC% z`v9>(T~k65Cf$%ope>vVwAK^0NxuY4ZbSBw2{gZs=p2w9#r-OQ38E4J%`aqW`T>Is fR2vhU-~jLfpY@koIpj)t00000NkvXXu0mjfQ^K8Z literal 0 HcmV?d00001 diff --git a/public/pixel-art/equipment-section/right-hand.png b/public/pixel-art/equipment-section/right-hand.png new file mode 100644 index 0000000000000000000000000000000000000000..c57643280f1d200f9a80c166aa169eccc0c8334a GIT binary patch literal 352 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 P1g(B;F@+H*B#nOqbEpNV literal 0 HcmV?d00001 diff --git a/public/pixel-art/equipped-sections/body/body-armour-holy.png b/public/pixel-art/equipped-sections/body/body-armour-holy.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5bf7436e480c9971b05a79ee56203da2eadd9e GIT binary patch literal 707 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 literal 0 HcmV?d00001 diff --git a/resources/js/dts/vite.d.ts b/resources/js/dts/vite.d.ts index e9783143a..122bb504e 100644 --- a/resources/js/dts/vite.d.ts +++ b/resources/js/dts/vite.d.ts @@ -3,7 +3,6 @@ interface ImportMetaEnv { readonly VITE_BASE_URL: string; - // Add other environment variables here as needed } interface ImportMeta { diff --git a/resources/js/game/components/items/item-name/item-name-coloration-text.tsx b/resources/js/game/components/items/item-name/item-name-coloration-text.tsx index e7219d21f..374747be1 100755 --- a/resources/js/game/components/items/item-name/item-name-coloration-text.tsx +++ b/resources/js/game/components/items/item-name/item-name-coloration-text.tsx @@ -35,10 +35,6 @@ export default class ItemNameColorationText extends React.Component< return "text-amber-600 dark:text-amber-500"; } - if (item.is_mythic) { - return "text-amber-600 dark:text-amber-500"; - } - if (item.is_unique) { return "text-green-700 dark:text-green-600"; } diff --git a/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-position-paths.ts b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-position-paths.ts new file mode 100644 index 000000000..8e5da3a42 --- /dev/null +++ b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-position-paths.ts @@ -0,0 +1,159 @@ +import { EquipmentTypes } from "./equipment-types"; +import { defaultPositionImage, Position } from "./position-paths"; + +const basePath: string = import.meta.env.VITE_BASE_IMAGE_URL; +const equipmentSection: string = `${basePath}/pixel-art/equipped-sections`; + +export const positionEquipmentPaths: Record< + Position, + Record +> = { + [Position.HELMET]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/helmet/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/helmet/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/helmet/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/helmet/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/helmet/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/helmet/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/helmet/cosmic.png`, + }, + [Position.BODY]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/body/body-armour-normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/body/body-armour-one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/body/body-armour-two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/body/body-armour-holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/body/body-armour-unique.gif`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/body/body-armour-mythical.gif`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/body/body-armour-cosmic.gif`, + }, + [Position.SLEEVES_LEFT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/sleeves_left/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/sleeves_left/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/sleeves_left/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/sleeves_left/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/sleeves_left/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/sleeves_left/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/sleeves_left/cosmic.png`, + }, + [Position.SLEEVES_RIGHT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/sleeves_right/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/sleeves_right/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/sleeves_right/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/sleeves_right/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/sleeves_right/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/sleeves_right/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/sleeves_right/cosmic.png`, + }, + [Position.LEGGINGS]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/leggings/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/leggings/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/leggings/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/leggings/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/leggings/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/leggings/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/leggings/cosmic.png`, + }, + [Position.FEET]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/feet/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/feet/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/feet/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/feet/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/feet/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/feet/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/feet/cosmic.png`, + }, + [Position.GLOVES_RIGHT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/gloves_right/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/gloves_right/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/gloves_right/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/gloves_right/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/gloves_right/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/gloves_right/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/gloves_right/cosmic.png`, + }, + [Position.GLOVES_LEFT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/gloves_left/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/gloves_left/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/gloves_left/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/gloves_left/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/gloves_left/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/gloves_left/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/gloves_left/cosmic.png`, + }, + [Position.WEAPON_LEFT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/weapon_left/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/weapon_left/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/weapon_left/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/weapon_left/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/weapon_left/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/weapon_left/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/weapon_left/cosmic.png`, + }, + [Position.WEAPON_RIGHT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/weapon_right/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/weapon_right/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/weapon_right/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/weapon_right/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/weapon_right/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/weapon_right/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/weapon_right/cosmic.png`, + }, + [Position.SPELL_LEFT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/spell_left/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/spell_left/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/spell_left/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/spell_left/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/spell_left/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/spell_left/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/spell_left/cosmic.png`, + }, + [Position.SPELL_RIGHT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/spell_right/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/spell_right/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/spell_right/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/spell_right/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/spell_right/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/spell_right/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/spell_right/cosmic.png`, + }, + [Position.RING_LEFT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/ring_left/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/ring_left/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/ring_left/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/ring_left/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/ring_left/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/ring_left/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/ring_left/cosmic.png`, + }, + [Position.RING_RIGHT]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/ring_right/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/ring_right/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/ring_right/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/ring_right/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/ring_right/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/ring_right/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/ring_right/cosmic.png`, + }, + [Position.TRINKET]: { + [EquipmentTypes.NORMAL]: `${equipmentSection}/trinket/normal.png`, + [EquipmentTypes.ONE_ENCHANT]: `${equipmentSection}/trinket/one-enchant.png`, + [EquipmentTypes.TWO_ENCHANTS]: `${equipmentSection}/trinket/two-enchants.png`, + [EquipmentTypes.HOLY]: `${equipmentSection}/trinket/holy.png`, + [EquipmentTypes.UNIQUE]: `${equipmentSection}/trinket/unique.png`, + [EquipmentTypes.MYTHICAL]: `${equipmentSection}/trinket/mythical.png`, + [EquipmentTypes.COSMIC]: `${equipmentSection}/trinket/cosmic.png`, + }, +}; + +export const getEquipmentImagePath = ( + position: Position, + equipmentType: EquipmentTypes, +): string => { + const equipmentPaths = positionEquipmentPaths[position]; + + if (equipmentPaths && equipmentPaths[equipmentType]) { + return equipmentPaths[equipmentType]; + } + + return defaultPositionImage[position]; +}; diff --git a/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-types.ts b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-types.ts new file mode 100644 index 000000000..4d523bbb1 --- /dev/null +++ b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/equipment-types.ts @@ -0,0 +1,43 @@ +import { ItemForColorizationDefinition } from "../../../../../../../components/items/item-name/types/item-name-coloration-text-props"; +import ItemDetails from "../../../../modals/components/item-details"; +import InventoryDetails from "../../../../../../../lib/game/character-sheet/types/inventory/inventory-details"; + +export enum EquipmentTypes { + NORMAL = "normal", + ONE_ENCHANT = "one_enchant", + TWO_ENCHANTS = "two_enchants", + HOLY = "holy", + UNIQUE = "unique", + MYTHICAL = "mythical", + COSMIC = "cosmic", +} + +export const determineEquipmentType = ( + item: InventoryDetails, +): EquipmentTypes => { + if (item.is_cosmic) { + return EquipmentTypes.COSMIC; + } + + if (item.is_mythic) { + return EquipmentTypes.MYTHICAL; + } + + if (item.is_unique) { + return EquipmentTypes.UNIQUE; + } + + if (item.has_holy_stacks_applied > 0) { + return EquipmentTypes.HOLY; + } + + if (item.attached_affixes_count > 1) { + return EquipmentTypes.TWO_ENCHANTS; + } + + if (item.attached_affixes_count > 0) { + return EquipmentTypes.ONE_ENCHANT; + } + + return EquipmentTypes.NORMAL; +}; diff --git a/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/position-paths.ts b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/position-paths.ts new file mode 100644 index 000000000..3252008a8 --- /dev/null +++ b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/enums/position-paths.ts @@ -0,0 +1,74 @@ +const basePath: string = import.meta.env.VITE_BASE_IMAGE_URL; +const equipmentSection: string = `${basePath}/pixel-art/equipment-section`; + +export enum Position { + HELMET = "HELMET", + SLEEVES_LEFT = "SLEEVES_LEFT", + SLEEVES_RIGHT = "SLEEVES_RIGHT", + GLOVES_LEFT = "GLOVES_LEFT", + GLOVES_RIGHT = "GLOVES_RIGHT", + LEGGINGS = "LEGGINGS", + BODY = "BODY", + FEET = "FEET", + WEAPON_RIGHT = "WEAPON_RIGHT", + WEAPON_LEFT = "WEAPON_LEFT", + RING_RIGHT = "RING_RIGHT", + RING_LEFT = "RING_LEFT", + SPELL_RIGHT = "SPELL_RIGHT", + SPELL_LEFT = "SPELL_LEFT", + TRINKET = "TRINKET", +} + +export const defaultPositionImage: Record = { + [Position.HELMET]: `${equipmentSection}/head.png`, + [Position.BODY]: `${equipmentSection}/body.png`, + [Position.SLEEVES_LEFT]: `${equipmentSection}/left-arm.png`, + [Position.SLEEVES_RIGHT]: `${equipmentSection}/right-arm.png`, + [Position.LEGGINGS]: `${equipmentSection}/leggings.png`, + [Position.FEET]: `${equipmentSection}/feet.png`, + [Position.GLOVES_RIGHT]: `${equipmentSection}/right-hand.png`, + [Position.GLOVES_LEFT]: `${equipmentSection}/left-hand.png`, + [Position.WEAPON_LEFT]: `${equipmentSection}/nothing-equipped.png`, + [Position.WEAPON_RIGHT]: `${equipmentSection}/nothing-equipped.png`, + [Position.SPELL_LEFT]: `${equipmentSection}/nothing-equipped.png`, + [Position.SPELL_RIGHT]: `${equipmentSection}/nothing-equipped.png`, + [Position.RING_LEFT]: `${equipmentSection}/nothing-equipped.png`, + [Position.RING_RIGHT]: `${equipmentSection}/nothing-equipped.png`, + [Position.TRINKET]: `${equipmentSection}/nothing-equipped.png`, +}; + +export const defaultPositionImageAlt: Record = { + [Position.HELMET]: "Helmet", + [Position.BODY]: "Body", + [Position.SLEEVES_LEFT]: "Left Sleeves", + [Position.SLEEVES_RIGHT]: "Right Sleeves", + [Position.GLOVES_LEFT]: "Left Gloves", + [Position.GLOVES_RIGHT]: "Right Gloves", + [Position.LEGGINGS]: "Leggings", + [Position.FEET]: "Feet", + [Position.WEAPON_RIGHT]: "Right Weapon", + [Position.WEAPON_LEFT]: "Left Weapon", + [Position.SPELL_RIGHT]: "Right Spell", + [Position.SPELL_LEFT]: "Left Spell", + [Position.RING_RIGHT]: "Right Ring", + [Position.RING_LEFT]: "Left Ring", + [Position.TRINKET]: "Trinket", +}; + +export const positionTypeMap: Record = { + [Position.HELMET]: "helmet", + [Position.BODY]: "body", + [Position.SLEEVES_LEFT]: "sleeves", + [Position.SLEEVES_RIGHT]: "sleeves", + [Position.GLOVES_LEFT]: "gloves", + [Position.GLOVES_RIGHT]: "gloves", + [Position.LEGGINGS]: "leggings", + [Position.FEET]: "feet", + [Position.WEAPON_RIGHT]: "weapon", + [Position.WEAPON_LEFT]: "weapon", + [Position.SPELL_RIGHT]: "spell-one", + [Position.SPELL_LEFT]: "spell-two", + [Position.RING_RIGHT]: "ring-one", + [Position.RING_LEFT]: "ring-two", + [Position.TRINKET]: "trinket", +}; diff --git a/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/styles/border-styles.ts b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/styles/border-styles.ts new file mode 100644 index 000000000..ba8037fd6 --- /dev/null +++ b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-section/styles/border-styles.ts @@ -0,0 +1,26 @@ +import { EquipmentTypes } from "../enums/equipment-types"; +import { match } from "ts-pattern"; + +export const borderStyles = (equipmentType: EquipmentTypes): string => { + return match(equipmentType) + .with(EquipmentTypes.NORMAL, () => "") + .with(EquipmentTypes.ONE_ENCHANT, () => "border-blue-500") + .with( + EquipmentTypes.TWO_ENCHANTS, + () => "border-fuchsia-800 dark:border-fuchsia-300", + ) + .with(EquipmentTypes.HOLY, () => "border-sky-700 dark:border-sky-300") + .with( + EquipmentTypes.UNIQUE, + () => "border-green-700 dark:border-green-600", + ) + .with( + EquipmentTypes.MYTHICAL, + () => "border-amber-600 dark:border-amber-500", + ) + .with( + EquipmentTypes.COSMIC, + () => "border-cosmic-colors-700 dark:border-cosmic-colors-60", + ) + .otherwise(() => ""); +}; diff --git a/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-table.tsx b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-table.tsx index 67a9771b0..61408ea85 100755 --- a/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-table.tsx +++ b/resources/js/game/sections/character-sheet/components/tabs/inventory-tabs/equipped-table.tsx @@ -1,20 +1,22 @@ -import React, { Fragment, ReactNode } from "react"; -import Table from "../../../../../components/ui/data-tables/table"; -import { BuildInventoryTableColumns } from "../../../../../lib/game/character-sheet/helpers/inventory/build-inventory-table-columns"; +import React, { ReactNode } from "react"; import InventoryDetails from "../../../../../lib/game/character-sheet/types/inventory/inventory-details"; import ActionsInterface from "../../../../../lib/game/character-sheet/helpers/inventory/actions-interface"; import DangerButton from "../../../../../components/ui/buttons/danger-button"; -import DropDown from "../../../../../components/ui/drop-down/drop-down"; -import LoadingProgressBar from "../../../../../components/ui/progress-bars/loading-progress-bar"; import Ajax from "../../../../../lib/ajax/ajax"; import { AxiosError, AxiosResponse } from "axios"; import { isEqual } from "lodash"; import EquippedInventoryTabProps from "../../../../../lib/game/character-sheet/types/tabs/equipped-inventory-tab-props"; import EquippedTableState from "../../../../../lib/game/character-sheet/types/tables/equipped-table-state"; -import SuccessAlert from "../../../../../components/ui/alerts/simple-alerts/success-alert"; import UsableItemsDetails from "../../../../../lib/game/character-sheet/types/inventory/usable-items-details"; -import InventoryUseDetails from "../../modals/inventory-item-details"; -import DangerAlert from "../../../../../components/ui/alerts/simple-alerts/danger-alert"; +import { + defaultPositionImage, + defaultPositionImageAlt, + Position, + positionTypeMap, +} from "./equipped-section/enums/position-paths"; +import { determineEquipmentType } from "./equipped-section/enums/equipment-types"; +import { getEquipmentImagePath } from "./equipped-section/enums/equipment-position-paths"; +import { borderStyles } from "./equipped-section/styles/border-styles"; export default class EquippedTable extends React.Component @@ -275,106 +277,94 @@ export default class EquippedTable ); } + handleClick(itemName: string) { + console.log(itemName); + } + + renderSlot(name: string, position: Position) { + let path = defaultPositionImage[position]; + const altText = defaultPositionImageAlt[position]; + + const itemType = positionTypeMap[position]; + + console.log(itemType); + + const item = this.state.data.find((item: InventoryDetails) => { + return item.type === itemType; + }); + + let itemName = "Sample"; + + if (!item) { + return ( +
this.handleClick(itemName)} + onMouseOver={(e: React.MouseEvent) => { + e.currentTarget.title = `${name}: ${itemName}`; + }} + aria-label={`${name}: ${itemName}`} + > + {altText} +
+ ); + } + + const itemEquipmentType = determineEquipmentType(item); + + path = getEquipmentImagePath(position, itemEquipmentType); + itemName = item.item_name; + + const borderClasses = borderStyles(itemEquipmentType); + + return ( +
this.handleClick(itemName)} + onMouseOver={(e: React.MouseEvent) => { + e.currentTarget.title = `${name}: ${itemName}`; + }} + aria-label={`${name}: ${itemName}`} + > + {altText} +
+ ); + } + render() { + console.log(this.state.data); return ( - - {this.state.success_message !== null ? ( - - {this.state.success_message} - - ) : null} - - {this.state.error_message !== null ? ( - - {this.state.error_message} - - ) : null} -
-
-
- +
+
+
+
{this.renderSlot("Head", Position.HELMET)}
+ +
+ {this.renderSlot("Sleeves", Position.SLEEVES_LEFT)} + {this.renderSlot("Body", Position.BODY)} + {this.renderSlot("Sleeves", Position.SLEEVES_RIGHT)}
- {this.hasEmptySet() && ( -
- -
- )} - - {this.props.is_set_equipped && ( -
- Set Equipped. -
- )} - -
- +
+ {this.renderSlot("Gloves", Position.GLOVES_LEFT)} + {this.renderSlot("Leggings", Position.LEGGINGS)} + {this.renderSlot("Gloves", Position.GLOVES_RIGHT)}
-
- {this.state.loading ? ( - - ) : null} -
+
{this.renderSlot("Feet", Position.FEET)}
+
- {this.state.view_item && this.state.item_id !== null ? ( - - ) : null} - -
- +
+ {this.renderSlot("Weapon", Position.WEAPON_LEFT)} + {this.renderSlot("Weapon", Position.WEAPON_RIGHT)} + {this.renderSlot("Ring", Position.RING_LEFT)} + {this.renderSlot("Ring", Position.RING_RIGHT)} + {this.renderSlot("Spell", Position.SPELL_LEFT)} + {this.renderSlot("Spell", Position.SPELL_RIGHT)} + {this.renderSlot("Trinket", Position.TRINKET)} +
- + ); } } diff --git a/tailwind.config.js b/tailwind.config.js index ae2d77d13..b67dc2892 100755 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -6,7 +6,7 @@ import tailwindcssDir from "tailwindcss-dir"; export default { mode: 'jit', content: [ - './resources/**/*.{js,vue,blade.php,jsx,tsx}', + './resources/**/*.{js,vue,blade.php,jsx,tsx,ts}', './app/Flare/View/Livewire/**/*.php', './vendor/rappasoft/laravel-livewire-tables/resources/views/**/*.blade.php' ], diff --git a/yarn.lock b/yarn.lock index 21586ec52..8f8144031 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6359,6 +6359,11 @@ ts-loader@9.5.1: semver "^7.3.4" source-map "^0.7.4" +ts-pattern@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-5.6.0.tgz#831516bbb9041499c5525e8976d8fc6b68ac8bb9" + integrity sha512-SL8u60X5+LoEy9tmQHWCdPc2hhb2pKI6I1tU5Jue3v8+iRqZdcT3mWPwKKJy1fMfky6uha82c8ByHAE8PMhKHw== + ts-toolbelt@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5"