@rpg-engine/long-bow 0.3.95 → 0.3.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,5 +9,6 @@ export declare type CircularControllerProps = {
9
9
  inventory?: IItemContainer | null;
10
10
  atlasIMG: any;
11
11
  atlasJSON: any;
12
+ spellCooldowns?: Record<string, number>;
12
13
  };
13
14
  export declare const CircularController: React.FC<CircularControllerProps>;
@@ -8,5 +8,6 @@ export declare type ShortcutsProps = {
8
8
  inventory?: IItemContainer | null;
9
9
  atlasJSON: any;
10
10
  atlasIMG: any;
11
+ spellCooldowns?: Record<string, number>;
11
12
  };
12
13
  export declare const Shortcuts: React.FC<ShortcutsProps>;
@@ -0,0 +1,4 @@
1
+ export declare const useShortcutCooldown: (onShortcutCast: (index: number) => void) => {
2
+ shortcutCooldown: number;
3
+ handleShortcutCast: (index: number) => void;
4
+ };
@@ -6,6 +6,7 @@ interface Props extends IRawSpell {
6
6
  onPointerUp?: (spellKey: string) => void;
7
7
  isSettingShortcut?: boolean;
8
8
  spellKey: string;
9
+ activeCooldown?: number;
9
10
  }
10
11
  export declare const Spell: React.FC<Props>;
11
12
  export {};
@@ -14,5 +14,6 @@ export interface ISpellbookProps {
14
14
  atlasIMG: any;
15
15
  atlasJSON: any;
16
16
  scale?: number;
17
+ spellCooldowns?: Record<string, number>;
17
18
  }
18
19
  export declare const Spellbook: React.FC<ISpellbookProps>;
@@ -12650,7 +12650,7 @@ var uiColors = {
12650
12650
  blue: '#597DCE',
12651
12651
  darkBlue: '#30346D',
12652
12652
  brown: '#854C30',
12653
- lightGreen: '#88ed1c',
12653
+ lightGreen: '#66cd1c',
12654
12654
  brownGreen: '#346524'
12655
12655
  };
12656
12656
 
@@ -12849,7 +12849,31 @@ var CheckButton = function CheckButton(_ref) {
12849
12849
  var SingleShortcut = /*#__PURE__*/styled.button.withConfig({
12850
12850
  displayName: "SingleShortcut",
12851
12851
  componentId: "sc-vz5ev8-0"
12852
- })(["width:3rem;height:3rem;background-color:", ";border:2px solid ", ";border-radius:50%;text-transform:uppercase;font-size:0.7rem;font-weight:bold;display:flex;align-items:center;justify-content:center;position:relative;span{pointer-events:none;}.mana{position:absolute;top:-5px;right:0;font-size:0.65rem;color:", ";}.qty{position:absolute;top:-5px;right:0;font-size:0.65rem;}.magicWords{margin-top:4px;}.keyboard{position:absolute;bottom:-5px;left:0;font-size:0.65rem;color:", ";}&:hover,&:focus{background-color:", ";}&:active{background-color:", ";border-color:", ";}&:disabled{opacity:0.5;}"], uiColors.lightGray, uiColors.darkGray, uiColors.blue, uiColors.yellow, uiColors.darkGray, uiColors.gray, uiColors.yellow);
12852
+ })(["width:3rem;height:3rem;background-color:", ";border:2px solid ", ";border-radius:50%;text-transform:uppercase;font-size:0.7rem;font-weight:bold;display:flex;align-items:center;justify-content:center;position:relative;span{pointer-events:none;}.mana{position:absolute;top:-5px;right:0;font-size:0.65rem;color:", ";}.qty{position:absolute;top:-5px;right:0;font-size:0.65rem;}.magicWords{margin-top:4px;}.keyboard{position:absolute;bottom:-5px;left:0;font-size:0.65rem;color:", ";}.onCooldown{color:", ";}.cooldown{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;border-radius:inherit;background-color:rgba(0 0 0 / 60%);font-size:0.7rem;display:flex;align-items:center;justify-content:center;color:", ";}&:hover,&:focus{background-color:", ";}&:active{background-color:", ";border-color:", ";}&:disabled{opacity:0.5;}"], uiColors.lightGray, uiColors.darkGray, uiColors.blue, uiColors.yellow, uiColors.gray, uiColors.darkYellow, uiColors.darkGray, uiColors.gray, uiColors.yellow);
12853
+
12854
+ var useShortcutCooldown = function useShortcutCooldown(onShortcutCast) {
12855
+ var _useState = React.useState(0),
12856
+ shortcutCooldown = _useState[0],
12857
+ setShortcutCooldown = _useState[1];
12858
+ var cooldownTimeout = React.useRef(null);
12859
+ var handleShortcutCast = function handleShortcutCast(index) {
12860
+ console.log(shortcutCooldown);
12861
+ if (shortcutCooldown <= 0) setShortcutCooldown(1.5);
12862
+ onShortcutCast(index);
12863
+ };
12864
+ React.useEffect(function () {
12865
+ if (cooldownTimeout.current) clearTimeout(cooldownTimeout.current);
12866
+ if (shortcutCooldown > 0) {
12867
+ cooldownTimeout.current = setTimeout(function () {
12868
+ setShortcutCooldown(shortcutCooldown - 0.1);
12869
+ }, 100);
12870
+ }
12871
+ }, [shortcutCooldown]);
12872
+ return {
12873
+ shortcutCooldown: shortcutCooldown,
12874
+ handleShortcutCast: handleShortcutCast
12875
+ };
12876
+ };
12853
12877
 
12854
12878
  var CircularController = function CircularController(_ref) {
12855
12879
  var onActionClick = _ref.onActionClick,
@@ -12859,7 +12883,11 @@ var CircularController = function CircularController(_ref) {
12859
12883
  shortcuts = _ref.shortcuts,
12860
12884
  inventory = _ref.inventory,
12861
12885
  atlasIMG = _ref.atlasIMG,
12862
- atlasJSON = _ref.atlasJSON;
12886
+ atlasJSON = _ref.atlasJSON,
12887
+ spellCooldowns = _ref.spellCooldowns;
12888
+ var _useShortcutCooldown = useShortcutCooldown(onShortcutClick),
12889
+ handleShortcutCast = _useShortcutCooldown.handleShortcutCast,
12890
+ shortcutCooldown = _useShortcutCooldown.shortcutCooldown;
12863
12891
  var onTouchStart = function onTouchStart(e) {
12864
12892
  var target = e.target;
12865
12893
  target == null ? void 0 : target.classList.add('active');
@@ -12872,10 +12900,14 @@ var CircularController = function CircularController(_ref) {
12872
12900
  action();
12873
12901
  };
12874
12902
  var renderShortcut = function renderShortcut(i) {
12875
- var _shortcuts$i, _shortcuts$i2, _shortcuts$i4, _payload$manaCost;
12903
+ var _shortcuts$i, _shortcuts$i2, _shortcuts$i4, _spellCooldowns$paylo, _payload$manaCost;
12904
+ var buildClassName = function buildClassName(classBase, isOnCooldown) {
12905
+ return classBase + " " + (isOnCooldown ? 'onCooldown' : '');
12906
+ };
12876
12907
  var variant = '';
12877
12908
  if (i === 0) variant = 'top';else if (i >= 3) variant = "bottom-" + (i - 3);
12878
- var onShortcutClickBinded = ((_shortcuts$i = shortcuts[i]) == null ? void 0 : _shortcuts$i.type) !== shared.ShortcutType.None ? onShortcutClick.bind(null, i) : function () {};
12909
+ var onShortcutClickBinded = ((_shortcuts$i = shortcuts[i]) == null ? void 0 : _shortcuts$i.type) !== shared.ShortcutType.None ? handleShortcutCast.bind(null, i) : function () {};
12910
+ var isOnShortcutCooldown = shortcutCooldown > 0;
12879
12911
  if (((_shortcuts$i2 = shortcuts[i]) == null ? void 0 : _shortcuts$i2.type) === shared.ShortcutType.Item) {
12880
12912
  var _shortcuts$i3;
12881
12913
  var _payload = (_shortcuts$i3 = shortcuts[i]) == null ? void 0 : _shortcuts$i3.payload;
@@ -12898,7 +12930,9 @@ var CircularController = function CircularController(_ref) {
12898
12930
  onTouchEnd: onTouchEnd.bind(null, onShortcutClickBinded),
12899
12931
  disabled: false,
12900
12932
  className: variant
12901
- }, _payload && React__default.createElement(SpriteFromAtlas, {
12933
+ }, isOnShortcutCooldown && React__default.createElement("span", {
12934
+ className: "cooldown"
12935
+ }, shortcutCooldown.toFixed(1)), _payload && React__default.createElement(SpriteFromAtlas, {
12902
12936
  atlasIMG: atlasIMG,
12903
12937
  atlasJSON: atlasJSON,
12904
12938
  spriteKey: shared.getItemTextureKeyPath({
@@ -12917,18 +12951,23 @@ var CircularController = function CircularController(_ref) {
12917
12951
  pointerEvents: 'none'
12918
12952
  }
12919
12953
  }), React__default.createElement("span", {
12920
- className: "qty"
12954
+ className: buildClassName('qty', isOnShortcutCooldown)
12921
12955
  }, totalQty));
12922
12956
  }
12923
12957
  var payload = (_shortcuts$i4 = shortcuts[i]) == null ? void 0 : _shortcuts$i4.payload;
12958
+ var spellCooldown = !payload ? 0 : (_spellCooldowns$paylo = spellCooldowns == null ? void 0 : spellCooldowns[payload.magicWords.replaceAll(' ', '_')]) != null ? _spellCooldowns$paylo : shortcutCooldown;
12959
+ var cooldown = spellCooldown > shortcutCooldown ? spellCooldown : shortcutCooldown;
12960
+ var isOnCooldown = cooldown > 0 && !!payload;
12924
12961
  return React__default.createElement(StyledShortcut, {
12925
12962
  key: i,
12926
12963
  onTouchStart: onTouchStart,
12927
12964
  onTouchEnd: onTouchEnd.bind(null, onShortcutClickBinded),
12928
12965
  disabled: mana < ((_payload$manaCost = payload == null ? void 0 : payload.manaCost) != null ? _payload$manaCost : 0),
12929
12966
  className: variant
12930
- }, React__default.createElement("span", {
12931
- className: "mana"
12967
+ }, isOnCooldown && React__default.createElement("span", {
12968
+ className: "cooldown"
12969
+ }, cooldown.toFixed(cooldown < 10 ? 1 : 0)), React__default.createElement("span", {
12970
+ className: buildClassName('mana', isOnCooldown)
12932
12971
  }, payload && payload.manaCost), React__default.createElement("span", {
12933
12972
  className: "magicWords"
12934
12973
  }, payload == null ? void 0 : payload.magicWords.split(' ').map(function (word) {
@@ -13256,15 +13295,15 @@ var MobileItemTooltip = function MobileItemTooltip(_ref) {
13256
13295
  var Container$9 = /*#__PURE__*/styled.div.withConfig({
13257
13296
  displayName: "MobileItemTooltip__Container",
13258
13297
  componentId: "sc-ku4p1j-0"
13259
- })(["position:absolute;z-index:100;left:0;top:0;width:100vw;height:100vh;background-color:rgba(0 0 0 / 0.5);display:flex;justify-content:center;align-items:center;gap:0.5rem;transition:opacity 0.08s;animation:fadeIn 0.1s forwards;@keyframes fadeIn{0%{opacity:0;}100%{opacity:0.92;}}@keyframes fadeOut{0%{opacity:0.92;}100%{opacity:0;}}&.fadeOut{animation:fadeOut 0.1s forwards;}@media (max-width:580px){flex-direction:column;}"]);
13298
+ })(["position:absolute;z-index:100;left:0;top:0;width:100vw;height:100vh;background-color:rgba(0 0 0 / 0.5);display:flex;justify-content:center;align-items:center;gap:0.5rem;transition:opacity 0.08s;animation:fadeIn 0.1s forwards;@keyframes fadeIn{0%{opacity:0;}100%{opacity:0.92;}}@keyframes fadeOut{0%{opacity:0.92;}100%{opacity:0;}}&.fadeOut{animation:fadeOut 0.1s forwards;}@media (max-width:640px){flex-direction:column;}"]);
13260
13299
  var OptionsContainer = /*#__PURE__*/styled.div.withConfig({
13261
13300
  displayName: "MobileItemTooltip__OptionsContainer",
13262
13301
  componentId: "sc-ku4p1j-1"
13263
- })(["display:flex;flex-direction:column;gap:0.5rem;flex-wrap:wrap;@media (max-width:580px){flex-direction:row;justify-content:center;}"]);
13302
+ })(["display:flex;flex-direction:column;gap:0.5rem;flex-wrap:wrap;@media (max-width:640px){flex-direction:row;justify-content:center;}"]);
13264
13303
  var Option = /*#__PURE__*/styled.button.withConfig({
13265
13304
  displayName: "MobileItemTooltip__Option",
13266
13305
  componentId: "sc-ku4p1j-2"
13267
- })(["padding:1rem;background-color:#333;color:white;border:none;border-radius:3px;width:8rem;transition:background-color 0.1s;&:hover{background-color:#555;}@media (max-width:580px){padding:1rem 0.5rem;}"]);
13306
+ })(["padding:1rem;background-color:#333;color:white;border:none;border-radius:3px;width:8rem;transition:background-color 0.1s;&:hover{background-color:#555;}@media (max-width:640px){padding:1rem 0.5rem;}"]);
13268
13307
 
13269
13308
  var generateContextMenuListOptions = function generateContextMenuListOptions(actionsByTypeList) {
13270
13309
  var contextMenu = actionsByTypeList.map(function (action) {
@@ -13838,6 +13877,15 @@ var ItemInfo = function ItemInfo(_ref) {
13838
13877
  }
13839
13878
  return statistics;
13840
13879
  };
13880
+ var renderEntityEffects = function renderEntityEffects() {
13881
+ if (!item.entityEffects || !item.entityEffectChance) return null;
13882
+ return item.entityEffects.map(function (effect, index) {
13883
+ return React__default.createElement(Statistic, {
13884
+ key: index,
13885
+ "$isSpecial": true
13886
+ }, effect[0].toUpperCase() + effect.slice(1), " (", item.entityEffectChance, "%)");
13887
+ });
13888
+ };
13841
13889
  var renderAvaibleSlots = function renderAvaibleSlots() {
13842
13890
  if (!item.allowedEquipSlotType) return null;
13843
13891
  return item.allowedEquipSlotType.map(function (slotType, index) {
@@ -13861,12 +13909,20 @@ var ItemInfo = function ItemInfo(_ref) {
13861
13909
  item: item
13862
13910
  }, React__default.createElement(Header, null, React__default.createElement("div", null, React__default.createElement(Title$1, null, item.name), item.rarity !== 'Common' && React__default.createElement(Rarity, {
13863
13911
  item: item
13864
- }, item.rarity), React__default.createElement(Type, null, item.subType)), React__default.createElement(AllowedSlots, null, renderAvaibleSlots())), renderStatistics(), item.isTwoHanded && React__default.createElement(Statistic, null, "Two handed"), React__default.createElement(Description, null, item.description), item.maxStackSize && item.maxStackSize !== 1 && React__default.createElement(StackInfo, null, "x", Math.round(((_item$stackQty = item.stackQty) != null ? _item$stackQty : 1) * 100) / 100, "(", item.maxStackSize, ")"), renderMissingStatistic().length > 0 && React__default.createElement(MissingStatistics, null, React__default.createElement(Statistic, null, "Equipped Diff"), itemToCompare && renderMissingStatistic()));
13912
+ }, item.rarity), React__default.createElement(Type, null, item.subType)), React__default.createElement(AllowedSlots, null, renderAvaibleSlots())), item.minRequirements && React__default.createElement(LevelRequirement, null, React__default.createElement("div", {
13913
+ className: "title"
13914
+ }, "Requirements:"), React__default.createElement("div", null, "- Level: ", item.minRequirements.level), React__default.createElement("div", null, "-", ' ', item.minRequirements.skill.name[0].toUpperCase() + item.minRequirements.skill.name.slice(1), ": ", item.minRequirements.skill.level)), renderStatistics(), renderEntityEffects(), item.usableEffectDescription && React__default.createElement(Statistic, {
13915
+ "$isSpecial": true
13916
+ }, item.usableEffectDescription), item.equippedBuffDescription && React__default.createElement(Statistic, {
13917
+ "$isSpecial": true
13918
+ }, item.equippedBuffDescription), item.isTwoHanded && React__default.createElement(Statistic, {
13919
+ "$isSpecial": true
13920
+ }, "Two handed"), React__default.createElement(Description, null, item.description), item.maxStackSize && item.maxStackSize !== 1 && React__default.createElement(StackInfo, null, "x", Math.round(((_item$stackQty = item.stackQty) != null ? _item$stackQty : 1) * 100) / 100, "(", item.maxStackSize, ")"), renderMissingStatistic().length > 0 && React__default.createElement(MissingStatistics, null, React__default.createElement(Statistic, null, "Equipped Diff"), itemToCompare && renderMissingStatistic()));
13865
13921
  };
13866
13922
  var Container$b = /*#__PURE__*/styled.div.withConfig({
13867
13923
  displayName: "ItemInfo__Container",
13868
13924
  componentId: "sc-1xm4q8k-0"
13869
- })(["color:white;background-color:#222;border-radius:5px;padding:0.5rem;font-size:", ";border:3px solid ", ";height:max-content;width:15rem;@media (max-width:580px){width:80vw;}"], uiFonts.size.small, function (_ref2) {
13925
+ })(["color:white;background-color:#222;border-radius:5px;padding:0.5rem;font-size:", ";border:3px solid ", ";height:max-content;width:18rem;@media (max-width:640px){width:80vw;}"], uiFonts.size.small, function (_ref2) {
13870
13926
  var _rarityColor;
13871
13927
  var item = _ref2.item;
13872
13928
  return (_rarityColor = rarityColor(item)) != null ? _rarityColor : uiColors.lightGray;
@@ -13886,29 +13942,36 @@ var Type = /*#__PURE__*/styled.div.withConfig({
13886
13942
  displayName: "ItemInfo__Type",
13887
13943
  componentId: "sc-1xm4q8k-3"
13888
13944
  })(["font-size:", ";margin-top:0.2rem;color:", ";"], uiFonts.size.small, uiColors.lightGray);
13945
+ var LevelRequirement = /*#__PURE__*/styled.div.withConfig({
13946
+ displayName: "ItemInfo__LevelRequirement",
13947
+ componentId: "sc-1xm4q8k-4"
13948
+ })(["font-size:", ";margin-top:0.2rem;margin-bottom:1rem;color:", ";.title{margin-bottom:4px;}div{margin-bottom:2px;}"], uiFonts.size.small, uiColors.orange);
13889
13949
  var Statistic = /*#__PURE__*/styled.div.withConfig({
13890
13950
  displayName: "ItemInfo__Statistic",
13891
- componentId: "sc-1xm4q8k-4"
13892
- })(["margin-bottom:0.4rem;width:max-content;.label{display:inline-block;margin-right:0.5rem;color:inherit;}.value{display:inline-block;color:inherit;}&.better,.better{color:", ";}&.worse,.worse{color:", ";}"], uiColors.lightGreen, uiColors.cardinal);
13951
+ componentId: "sc-1xm4q8k-5"
13952
+ })(["margin-bottom:0.4rem;width:100%;color:", ";.label{display:inline-block;margin-right:0.5rem;color:inherit;}.value{display:inline-block;color:inherit;}&.better,.better{color:", ";}&.worse,.worse{color:", ";}"], function (_ref4) {
13953
+ var $isSpecial = _ref4.$isSpecial;
13954
+ return $isSpecial ? uiColors.darkYellow : 'inherit';
13955
+ }, uiColors.lightGreen, uiColors.cardinal);
13893
13956
  var Description = /*#__PURE__*/styled.div.withConfig({
13894
13957
  displayName: "ItemInfo__Description",
13895
- componentId: "sc-1xm4q8k-5"
13958
+ componentId: "sc-1xm4q8k-6"
13896
13959
  })(["margin-top:1.5rem;font-size:", ";color:", ";font-style:italic;"], uiFonts.size.small, uiColors.lightGray);
13897
13960
  var Header = /*#__PURE__*/styled.div.withConfig({
13898
13961
  displayName: "ItemInfo__Header",
13899
- componentId: "sc-1xm4q8k-6"
13962
+ componentId: "sc-1xm4q8k-7"
13900
13963
  })(["display:flex;align-items:center;justify-content:space-between;margin-bottom:0.5rem;"]);
13901
13964
  var AllowedSlots = /*#__PURE__*/styled.div.withConfig({
13902
13965
  displayName: "ItemInfo__AllowedSlots",
13903
- componentId: "sc-1xm4q8k-7"
13966
+ componentId: "sc-1xm4q8k-8"
13904
13967
  })(["display:flex;align-items:center;justify-content:center;gap:0.5rem;margin-left:auto;align-self:flex-start;"]);
13905
13968
  var StackInfo = /*#__PURE__*/styled.div.withConfig({
13906
13969
  displayName: "ItemInfo__StackInfo",
13907
- componentId: "sc-1xm4q8k-8"
13970
+ componentId: "sc-1xm4q8k-9"
13908
13971
  })(["width:100%;text-align:right;font-size:", ";color:", ";margin-top:1rem;"], uiFonts.size.small, uiColors.orange);
13909
13972
  var MissingStatistics = /*#__PURE__*/styled.div.withConfig({
13910
13973
  displayName: "ItemInfo__MissingStatistics",
13911
- componentId: "sc-1xm4q8k-9"
13974
+ componentId: "sc-1xm4q8k-10"
13912
13975
  })(["margin-top:1rem;color:", ";"], uiColors.cardinal);
13913
13976
 
13914
13977
  var itemSlotTypes = ['head', 'neck', 'leftHand', 'rightHand', 'ring', 'legs', 'boot', 'accessory', 'armor', 'inventory'];
@@ -13930,7 +13993,11 @@ var ItemInfoDisplay = function ItemInfoDisplay(_ref) {
13930
13993
  var allowedSlotTypeCamelCase = lodash.camelCase(item.allowedEquipSlotType[0]);
13931
13994
  var itemSubTypeCamelCase = lodash.camelCase(item.subType);
13932
13995
  var slotType = getSlotType(itemSlotTypes, allowedSlotTypeCamelCase, itemSubTypeCamelCase);
13933
- var itemFromEquipment = equipmentSet[slotType];
13996
+ var itemSubTypeFromEquipment = Object.values(equipmentSet).find(function (item) {
13997
+ var _item$subType;
13998
+ return lodash.camelCase((_item$subType = item == null ? void 0 : item.subType) != null ? _item$subType : '') === itemSubTypeCamelCase;
13999
+ });
14000
+ var itemFromEquipment = itemSubTypeFromEquipment ? itemSubTypeFromEquipment : equipmentSet[slotType];
13934
14001
  if (itemFromEquipment && (!item._id || itemFromEquipment._id !== item._id)) {
13935
14002
  return itemFromEquipment;
13936
14003
  }
@@ -13954,7 +14021,7 @@ var ItemInfoDisplay = function ItemInfoDisplay(_ref) {
13954
14021
  var Flex = /*#__PURE__*/styled.div.withConfig({
13955
14022
  displayName: "ItemInfoDisplay__Flex",
13956
14023
  componentId: "sc-1lftdo8-0"
13957
- })(["display:flex;gap:0.5rem;flex-direction:", ";@media (max-width:580px){flex-direction:column-reverse;align-items:center;}"], function (_ref2) {
14024
+ })(["display:flex;gap:0.5rem;flex-direction:", ";align-items:center;@media (max-width:640px){flex-direction:column-reverse;align-items:center;}"], function (_ref2) {
13958
14025
  var $isMobile = _ref2.$isMobile;
13959
14026
  return $isMobile ? 'row-reverse' : 'row';
13960
14027
  });
@@ -15818,15 +15885,19 @@ var Shortcuts = function Shortcuts(_ref) {
15818
15885
  isBlockedCastingByKeyboard = _ref$isBlockedCasting === void 0 ? false : _ref$isBlockedCasting,
15819
15886
  atlasJSON = _ref.atlasJSON,
15820
15887
  atlasIMG = _ref.atlasIMG,
15821
- inventory = _ref.inventory;
15888
+ inventory = _ref.inventory,
15889
+ spellCooldowns = _ref.spellCooldowns;
15822
15890
  var shortcutsRefs = React.useRef([]);
15891
+ var _useShortcutCooldown = useShortcutCooldown(onShortcutCast),
15892
+ handleShortcutCast = _useShortcutCooldown.handleShortcutCast,
15893
+ shortcutCooldown = _useShortcutCooldown.shortcutCooldown;
15823
15894
  React.useEffect(function () {
15824
15895
  var handleKeyDown = function handleKeyDown(e) {
15825
15896
  if (isBlockedCastingByKeyboard) return;
15826
15897
  var shortcutIndex = Number(e.key) - 1;
15827
15898
  if (shortcutIndex >= 0 && shortcutIndex <= 5) {
15828
15899
  var _shortcutsRefs$curren;
15829
- onShortcutCast(shortcutIndex);
15900
+ handleShortcutCast(shortcutIndex);
15830
15901
  (_shortcutsRefs$curren = shortcutsRefs.current[shortcutIndex]) == null ? void 0 : _shortcutsRefs$curren.classList.add('active');
15831
15902
  setTimeout(function () {
15832
15903
  var _shortcutsRefs$curren2;
@@ -15838,11 +15909,15 @@ var Shortcuts = function Shortcuts(_ref) {
15838
15909
  return function () {
15839
15910
  window.removeEventListener('keydown', handleKeyDown);
15840
15911
  };
15841
- }, [shortcuts, isBlockedCastingByKeyboard]);
15912
+ }, [shortcuts, isBlockedCastingByKeyboard, shortcutCooldown]);
15842
15913
  return React__default.createElement(List$1, null, Array.from({
15843
15914
  length: 6
15844
15915
  }).map(function (_, i) {
15845
- var _shortcuts$i, _shortcuts$i3, _payload$manaCost;
15916
+ var _shortcuts$i, _shortcuts$i3, _spellCooldowns$paylo, _payload$manaCost;
15917
+ var buildClassName = function buildClassName(classBase, isOnCooldown) {
15918
+ return classBase + " " + (isOnCooldown ? 'onCooldown' : '');
15919
+ };
15920
+ var isOnShortcutCooldown = shortcutCooldown > 0;
15846
15921
  if (((_shortcuts$i = shortcuts[i]) == null ? void 0 : _shortcuts$i.type) === shared.ShortcutType.Item) {
15847
15922
  var _shortcuts$i2;
15848
15923
  var _payload = (_shortcuts$i2 = shortcuts[i]) == null ? void 0 : _shortcuts$i2.payload;
@@ -15859,12 +15934,14 @@ var Shortcuts = function Shortcuts(_ref) {
15859
15934
  var totalQty = _payload && inventory ? countItemFromInventory(_payload.key, inventory) : 0;
15860
15935
  return React__default.createElement(StyledShortcut$1, {
15861
15936
  key: i,
15862
- onPointerDown: onShortcutCast.bind(null, i),
15937
+ onPointerDown: handleShortcutCast.bind(null, i),
15863
15938
  disabled: false,
15864
15939
  ref: function ref(el) {
15865
15940
  if (el) shortcutsRefs.current[i] = el;
15866
15941
  }
15867
- }, _payload && React__default.createElement(SpriteFromAtlas, {
15942
+ }, isOnShortcutCooldown && React__default.createElement("span", {
15943
+ className: "cooldown"
15944
+ }, shortcutCooldown.toFixed(1)), _payload && React__default.createElement(SpriteFromAtlas, {
15868
15945
  atlasIMG: atlasIMG,
15869
15946
  atlasJSON: atlasJSON,
15870
15947
  spriteKey: shared.getItemTextureKeyPath({
@@ -15876,27 +15953,32 @@ var Shortcuts = function Shortcuts(_ref) {
15876
15953
  width: 32,
15877
15954
  height: 32
15878
15955
  }), React__default.createElement("span", {
15879
- className: "qty"
15956
+ className: buildClassName('qty', isOnShortcutCooldown)
15880
15957
  }, totalQty), React__default.createElement("span", {
15881
- className: "keyboard"
15958
+ className: buildClassName('keyboard', isOnShortcutCooldown)
15882
15959
  }, i + 1));
15883
15960
  }
15884
15961
  var payload = (_shortcuts$i3 = shortcuts[i]) == null ? void 0 : _shortcuts$i3.payload;
15962
+ var spellCooldown = !payload ? 0 : (_spellCooldowns$paylo = spellCooldowns == null ? void 0 : spellCooldowns[payload.magicWords.replaceAll(' ', '_')]) != null ? _spellCooldowns$paylo : shortcutCooldown;
15963
+ var cooldown = spellCooldown > shortcutCooldown ? spellCooldown : shortcutCooldown;
15964
+ var isOnCooldown = cooldown > 0 && !!payload;
15885
15965
  return React__default.createElement(StyledShortcut$1, {
15886
15966
  key: i,
15887
- onPointerDown: onShortcutCast.bind(null, i),
15967
+ onPointerDown: handleShortcutCast.bind(null, i),
15888
15968
  disabled: mana < ((_payload$manaCost = payload == null ? void 0 : payload.manaCost) != null ? _payload$manaCost : 0),
15889
15969
  ref: function ref(el) {
15890
15970
  if (el) shortcutsRefs.current[i] = el;
15891
15971
  }
15892
- }, React__default.createElement("span", {
15893
- className: "mana"
15972
+ }, isOnCooldown && React__default.createElement("span", {
15973
+ className: "cooldown"
15974
+ }, cooldown.toFixed(cooldown < 10 ? 1 : 0)), React__default.createElement("span", {
15975
+ className: buildClassName('mana', isOnCooldown)
15894
15976
  }, payload && payload.manaCost), React__default.createElement("span", {
15895
15977
  className: "magicWords"
15896
15978
  }, payload == null ? void 0 : payload.magicWords.split(' ').map(function (word) {
15897
15979
  return word[0];
15898
15980
  })), React__default.createElement("span", {
15899
- className: "keyboard"
15981
+ className: buildClassName('keyboard', isOnCooldown)
15900
15982
  }, i + 1));
15901
15983
  }));
15902
15984
  };
@@ -16153,14 +16235,17 @@ var Spell = function Spell(_ref) {
16153
16235
  charMagicLevel = _ref.charMagicLevel,
16154
16236
  onPointerUp = _ref.onPointerUp,
16155
16237
  isSettingShortcut = _ref.isSettingShortcut,
16156
- minMagicLevelRequired = _ref.minMagicLevelRequired;
16238
+ minMagicLevelRequired = _ref.minMagicLevelRequired,
16239
+ activeCooldown = _ref.activeCooldown;
16157
16240
  var disabled = isSettingShortcut ? charMagicLevel < minMagicLevelRequired : manaCost > charMana || charMagicLevel < minMagicLevelRequired;
16158
16241
  return React__default.createElement(Container$k, {
16159
- disabled: disabled,
16242
+ disabled: disabled || (activeCooldown != null ? activeCooldown : 0) > 0,
16160
16243
  onPointerUp: onPointerUp == null ? void 0 : onPointerUp.bind(null, spellKey),
16161
16244
  isSettingShortcut: isSettingShortcut && !disabled,
16162
16245
  className: "spell"
16163
- }, disabled && React__default.createElement(Overlay, null, charMagicLevel < minMagicLevelRequired ? 'Low magic level' : manaCost > charMana && 'No mana'), React__default.createElement(SpellImage, null, magicWords.split(' ').map(function (word) {
16246
+ }, disabled && React__default.createElement(Overlay, null, charMagicLevel < minMagicLevelRequired ? 'Low magic level' : manaCost > charMana && 'No mana'), React__default.createElement(SpellImage, null, activeCooldown && activeCooldown > 0 ? React__default.createElement("span", {
16247
+ className: "cooldown"
16248
+ }, activeCooldown.toFixed(activeCooldown > 10 ? 0 : 1)) : null, magicWords.split(' ').map(function (word) {
16164
16249
  return word[0];
16165
16250
  })), React__default.createElement(Info, null, React__default.createElement(Title$6, null, React__default.createElement("span", null, name), React__default.createElement("span", {
16166
16251
  className: "spell"
@@ -16178,7 +16263,7 @@ var Container$k = /*#__PURE__*/styled.button.withConfig({
16178
16263
  var SpellImage = /*#__PURE__*/styled.div.withConfig({
16179
16264
  displayName: "Spell__SpellImage",
16180
16265
  componentId: "sc-j96fa2-1"
16181
- })(["width:4rem;height:4rem;font-size:", ";font-weight:bold;background-color:", ";color:", ";display:flex;justify-content:center;align-items:center;text-transform:uppercase;"], uiFonts.size.xLarge, uiColors.darkGray, uiColors.lightGray);
16266
+ })(["width:4rem;height:4rem;font-size:", ";font-weight:bold;background-color:", ";color:", ";display:flex;justify-content:center;align-items:center;text-transform:uppercase;position:relative;overflow:hidden;.cooldown{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0 0 0 / 20%);color:", ";font-weight:bold;display:flex;justify-content:center;align-items:center;}"], uiFonts.size.xLarge, uiColors.darkGray, uiColors.lightGray, uiColors.darkYellow);
16182
16267
  var Info = /*#__PURE__*/styled.span.withConfig({
16183
16268
  displayName: "Spell__Info",
16184
16269
  componentId: "sc-j96fa2-2"
@@ -16217,7 +16302,8 @@ var Spellbook = function Spellbook(_ref) {
16217
16302
  removeShortcut = _ref.removeShortcut,
16218
16303
  atlasIMG = _ref.atlasIMG,
16219
16304
  atlasJSON = _ref.atlasJSON,
16220
- scale = _ref.scale;
16305
+ scale = _ref.scale,
16306
+ spellCooldowns = _ref.spellCooldowns;
16221
16307
  var _useState = React.useState(''),
16222
16308
  search = _useState[0],
16223
16309
  setSearch = _useState[1];
@@ -16279,7 +16365,8 @@ var Spellbook = function Spellbook(_ref) {
16279
16365
  charMagicLevel: magicLevel,
16280
16366
  onPointerUp: settingShortcutIndex !== -1 ? setShortcut : onSpellClick,
16281
16367
  spellKey: spell.key,
16282
- isSettingShortcut: settingShortcutIndex !== -1
16368
+ isSettingShortcut: settingShortcutIndex !== -1,
16369
+ activeCooldown: spellCooldowns == null ? void 0 : spellCooldowns[spell.magicWords.replaceAll(' ', '_')]
16283
16370
  }, spell)));
16284
16371
  }))));
16285
16372
  };