@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.
@@ -12644,7 +12644,7 @@ var uiColors = {
12644
12644
  blue: '#597DCE',
12645
12645
  darkBlue: '#30346D',
12646
12646
  brown: '#854C30',
12647
- lightGreen: '#88ed1c',
12647
+ lightGreen: '#66cd1c',
12648
12648
  brownGreen: '#346524'
12649
12649
  };
12650
12650
 
@@ -12844,7 +12844,31 @@ var CheckButton = function CheckButton(_ref) {
12844
12844
  var SingleShortcut = /*#__PURE__*/styled.button.withConfig({
12845
12845
  displayName: "SingleShortcut",
12846
12846
  componentId: "sc-vz5ev8-0"
12847
- })(["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);
12847
+ })(["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);
12848
+
12849
+ var useShortcutCooldown = function useShortcutCooldown(onShortcutCast) {
12850
+ var _useState = useState(0),
12851
+ shortcutCooldown = _useState[0],
12852
+ setShortcutCooldown = _useState[1];
12853
+ var cooldownTimeout = useRef(null);
12854
+ var handleShortcutCast = function handleShortcutCast(index) {
12855
+ console.log(shortcutCooldown);
12856
+ if (shortcutCooldown <= 0) setShortcutCooldown(1.5);
12857
+ onShortcutCast(index);
12858
+ };
12859
+ useEffect(function () {
12860
+ if (cooldownTimeout.current) clearTimeout(cooldownTimeout.current);
12861
+ if (shortcutCooldown > 0) {
12862
+ cooldownTimeout.current = setTimeout(function () {
12863
+ setShortcutCooldown(shortcutCooldown - 0.1);
12864
+ }, 100);
12865
+ }
12866
+ }, [shortcutCooldown]);
12867
+ return {
12868
+ shortcutCooldown: shortcutCooldown,
12869
+ handleShortcutCast: handleShortcutCast
12870
+ };
12871
+ };
12848
12872
 
12849
12873
  var CircularController = function CircularController(_ref) {
12850
12874
  var onActionClick = _ref.onActionClick,
@@ -12854,7 +12878,11 @@ var CircularController = function CircularController(_ref) {
12854
12878
  shortcuts = _ref.shortcuts,
12855
12879
  inventory = _ref.inventory,
12856
12880
  atlasIMG = _ref.atlasIMG,
12857
- atlasJSON = _ref.atlasJSON;
12881
+ atlasJSON = _ref.atlasJSON,
12882
+ spellCooldowns = _ref.spellCooldowns;
12883
+ var _useShortcutCooldown = useShortcutCooldown(onShortcutClick),
12884
+ handleShortcutCast = _useShortcutCooldown.handleShortcutCast,
12885
+ shortcutCooldown = _useShortcutCooldown.shortcutCooldown;
12858
12886
  var onTouchStart = function onTouchStart(e) {
12859
12887
  var target = e.target;
12860
12888
  target == null ? void 0 : target.classList.add('active');
@@ -12867,10 +12895,14 @@ var CircularController = function CircularController(_ref) {
12867
12895
  action();
12868
12896
  };
12869
12897
  var renderShortcut = function renderShortcut(i) {
12870
- var _shortcuts$i, _shortcuts$i2, _shortcuts$i4, _payload$manaCost;
12898
+ var _shortcuts$i, _shortcuts$i2, _shortcuts$i4, _spellCooldowns$paylo, _payload$manaCost;
12899
+ var buildClassName = function buildClassName(classBase, isOnCooldown) {
12900
+ return classBase + " " + (isOnCooldown ? 'onCooldown' : '');
12901
+ };
12871
12902
  var variant = '';
12872
12903
  if (i === 0) variant = 'top';else if (i >= 3) variant = "bottom-" + (i - 3);
12873
- var onShortcutClickBinded = ((_shortcuts$i = shortcuts[i]) == null ? void 0 : _shortcuts$i.type) !== ShortcutType.None ? onShortcutClick.bind(null, i) : function () {};
12904
+ var onShortcutClickBinded = ((_shortcuts$i = shortcuts[i]) == null ? void 0 : _shortcuts$i.type) !== ShortcutType.None ? handleShortcutCast.bind(null, i) : function () {};
12905
+ var isOnShortcutCooldown = shortcutCooldown > 0;
12874
12906
  if (((_shortcuts$i2 = shortcuts[i]) == null ? void 0 : _shortcuts$i2.type) === ShortcutType.Item) {
12875
12907
  var _shortcuts$i3;
12876
12908
  var _payload = (_shortcuts$i3 = shortcuts[i]) == null ? void 0 : _shortcuts$i3.payload;
@@ -12893,7 +12925,9 @@ var CircularController = function CircularController(_ref) {
12893
12925
  onTouchEnd: onTouchEnd.bind(null, onShortcutClickBinded),
12894
12926
  disabled: false,
12895
12927
  className: variant
12896
- }, _payload && React.createElement(SpriteFromAtlas, {
12928
+ }, isOnShortcutCooldown && React.createElement("span", {
12929
+ className: "cooldown"
12930
+ }, shortcutCooldown.toFixed(1)), _payload && React.createElement(SpriteFromAtlas, {
12897
12931
  atlasIMG: atlasIMG,
12898
12932
  atlasJSON: atlasJSON,
12899
12933
  spriteKey: getItemTextureKeyPath({
@@ -12912,18 +12946,23 @@ var CircularController = function CircularController(_ref) {
12912
12946
  pointerEvents: 'none'
12913
12947
  }
12914
12948
  }), React.createElement("span", {
12915
- className: "qty"
12949
+ className: buildClassName('qty', isOnShortcutCooldown)
12916
12950
  }, totalQty));
12917
12951
  }
12918
12952
  var payload = (_shortcuts$i4 = shortcuts[i]) == null ? void 0 : _shortcuts$i4.payload;
12953
+ var spellCooldown = !payload ? 0 : (_spellCooldowns$paylo = spellCooldowns == null ? void 0 : spellCooldowns[payload.magicWords.replaceAll(' ', '_')]) != null ? _spellCooldowns$paylo : shortcutCooldown;
12954
+ var cooldown = spellCooldown > shortcutCooldown ? spellCooldown : shortcutCooldown;
12955
+ var isOnCooldown = cooldown > 0 && !!payload;
12919
12956
  return React.createElement(StyledShortcut, {
12920
12957
  key: i,
12921
12958
  onTouchStart: onTouchStart,
12922
12959
  onTouchEnd: onTouchEnd.bind(null, onShortcutClickBinded),
12923
12960
  disabled: mana < ((_payload$manaCost = payload == null ? void 0 : payload.manaCost) != null ? _payload$manaCost : 0),
12924
12961
  className: variant
12925
- }, React.createElement("span", {
12926
- className: "mana"
12962
+ }, isOnCooldown && React.createElement("span", {
12963
+ className: "cooldown"
12964
+ }, cooldown.toFixed(cooldown < 10 ? 1 : 0)), React.createElement("span", {
12965
+ className: buildClassName('mana', isOnCooldown)
12927
12966
  }, payload && payload.manaCost), React.createElement("span", {
12928
12967
  className: "magicWords"
12929
12968
  }, payload == null ? void 0 : payload.magicWords.split(' ').map(function (word) {
@@ -13251,15 +13290,15 @@ var MobileItemTooltip = function MobileItemTooltip(_ref) {
13251
13290
  var Container$9 = /*#__PURE__*/styled.div.withConfig({
13252
13291
  displayName: "MobileItemTooltip__Container",
13253
13292
  componentId: "sc-ku4p1j-0"
13254
- })(["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;}"]);
13293
+ })(["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;}"]);
13255
13294
  var OptionsContainer = /*#__PURE__*/styled.div.withConfig({
13256
13295
  displayName: "MobileItemTooltip__OptionsContainer",
13257
13296
  componentId: "sc-ku4p1j-1"
13258
- })(["display:flex;flex-direction:column;gap:0.5rem;flex-wrap:wrap;@media (max-width:580px){flex-direction:row;justify-content:center;}"]);
13297
+ })(["display:flex;flex-direction:column;gap:0.5rem;flex-wrap:wrap;@media (max-width:640px){flex-direction:row;justify-content:center;}"]);
13259
13298
  var Option = /*#__PURE__*/styled.button.withConfig({
13260
13299
  displayName: "MobileItemTooltip__Option",
13261
13300
  componentId: "sc-ku4p1j-2"
13262
- })(["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;}"]);
13301
+ })(["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;}"]);
13263
13302
 
13264
13303
  var generateContextMenuListOptions = function generateContextMenuListOptions(actionsByTypeList) {
13265
13304
  var contextMenu = actionsByTypeList.map(function (action) {
@@ -13833,6 +13872,15 @@ var ItemInfo = function ItemInfo(_ref) {
13833
13872
  }
13834
13873
  return statistics;
13835
13874
  };
13875
+ var renderEntityEffects = function renderEntityEffects() {
13876
+ if (!item.entityEffects || !item.entityEffectChance) return null;
13877
+ return item.entityEffects.map(function (effect, index) {
13878
+ return React.createElement(Statistic, {
13879
+ key: index,
13880
+ "$isSpecial": true
13881
+ }, effect[0].toUpperCase() + effect.slice(1), " (", item.entityEffectChance, "%)");
13882
+ });
13883
+ };
13836
13884
  var renderAvaibleSlots = function renderAvaibleSlots() {
13837
13885
  if (!item.allowedEquipSlotType) return null;
13838
13886
  return item.allowedEquipSlotType.map(function (slotType, index) {
@@ -13856,12 +13904,20 @@ var ItemInfo = function ItemInfo(_ref) {
13856
13904
  item: item
13857
13905
  }, React.createElement(Header, null, React.createElement("div", null, React.createElement(Title$1, null, item.name), item.rarity !== 'Common' && React.createElement(Rarity, {
13858
13906
  item: item
13859
- }, item.rarity), React.createElement(Type, null, item.subType)), React.createElement(AllowedSlots, null, renderAvaibleSlots())), renderStatistics(), item.isTwoHanded && React.createElement(Statistic, null, "Two handed"), React.createElement(Description, null, item.description), item.maxStackSize && item.maxStackSize !== 1 && React.createElement(StackInfo, null, "x", Math.round(((_item$stackQty = item.stackQty) != null ? _item$stackQty : 1) * 100) / 100, "(", item.maxStackSize, ")"), renderMissingStatistic().length > 0 && React.createElement(MissingStatistics, null, React.createElement(Statistic, null, "Equipped Diff"), itemToCompare && renderMissingStatistic()));
13907
+ }, item.rarity), React.createElement(Type, null, item.subType)), React.createElement(AllowedSlots, null, renderAvaibleSlots())), item.minRequirements && React.createElement(LevelRequirement, null, React.createElement("div", {
13908
+ className: "title"
13909
+ }, "Requirements:"), React.createElement("div", null, "- Level: ", item.minRequirements.level), React.createElement("div", null, "-", ' ', item.minRequirements.skill.name[0].toUpperCase() + item.minRequirements.skill.name.slice(1), ": ", item.minRequirements.skill.level)), renderStatistics(), renderEntityEffects(), item.usableEffectDescription && React.createElement(Statistic, {
13910
+ "$isSpecial": true
13911
+ }, item.usableEffectDescription), item.equippedBuffDescription && React.createElement(Statistic, {
13912
+ "$isSpecial": true
13913
+ }, item.equippedBuffDescription), item.isTwoHanded && React.createElement(Statistic, {
13914
+ "$isSpecial": true
13915
+ }, "Two handed"), React.createElement(Description, null, item.description), item.maxStackSize && item.maxStackSize !== 1 && React.createElement(StackInfo, null, "x", Math.round(((_item$stackQty = item.stackQty) != null ? _item$stackQty : 1) * 100) / 100, "(", item.maxStackSize, ")"), renderMissingStatistic().length > 0 && React.createElement(MissingStatistics, null, React.createElement(Statistic, null, "Equipped Diff"), itemToCompare && renderMissingStatistic()));
13860
13916
  };
13861
13917
  var Container$b = /*#__PURE__*/styled.div.withConfig({
13862
13918
  displayName: "ItemInfo__Container",
13863
13919
  componentId: "sc-1xm4q8k-0"
13864
- })(["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) {
13920
+ })(["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) {
13865
13921
  var _rarityColor;
13866
13922
  var item = _ref2.item;
13867
13923
  return (_rarityColor = rarityColor(item)) != null ? _rarityColor : uiColors.lightGray;
@@ -13881,29 +13937,36 @@ var Type = /*#__PURE__*/styled.div.withConfig({
13881
13937
  displayName: "ItemInfo__Type",
13882
13938
  componentId: "sc-1xm4q8k-3"
13883
13939
  })(["font-size:", ";margin-top:0.2rem;color:", ";"], uiFonts.size.small, uiColors.lightGray);
13940
+ var LevelRequirement = /*#__PURE__*/styled.div.withConfig({
13941
+ displayName: "ItemInfo__LevelRequirement",
13942
+ componentId: "sc-1xm4q8k-4"
13943
+ })(["font-size:", ";margin-top:0.2rem;margin-bottom:1rem;color:", ";.title{margin-bottom:4px;}div{margin-bottom:2px;}"], uiFonts.size.small, uiColors.orange);
13884
13944
  var Statistic = /*#__PURE__*/styled.div.withConfig({
13885
13945
  displayName: "ItemInfo__Statistic",
13886
- componentId: "sc-1xm4q8k-4"
13887
- })(["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);
13946
+ componentId: "sc-1xm4q8k-5"
13947
+ })(["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) {
13948
+ var $isSpecial = _ref4.$isSpecial;
13949
+ return $isSpecial ? uiColors.darkYellow : 'inherit';
13950
+ }, uiColors.lightGreen, uiColors.cardinal);
13888
13951
  var Description = /*#__PURE__*/styled.div.withConfig({
13889
13952
  displayName: "ItemInfo__Description",
13890
- componentId: "sc-1xm4q8k-5"
13953
+ componentId: "sc-1xm4q8k-6"
13891
13954
  })(["margin-top:1.5rem;font-size:", ";color:", ";font-style:italic;"], uiFonts.size.small, uiColors.lightGray);
13892
13955
  var Header = /*#__PURE__*/styled.div.withConfig({
13893
13956
  displayName: "ItemInfo__Header",
13894
- componentId: "sc-1xm4q8k-6"
13957
+ componentId: "sc-1xm4q8k-7"
13895
13958
  })(["display:flex;align-items:center;justify-content:space-between;margin-bottom:0.5rem;"]);
13896
13959
  var AllowedSlots = /*#__PURE__*/styled.div.withConfig({
13897
13960
  displayName: "ItemInfo__AllowedSlots",
13898
- componentId: "sc-1xm4q8k-7"
13961
+ componentId: "sc-1xm4q8k-8"
13899
13962
  })(["display:flex;align-items:center;justify-content:center;gap:0.5rem;margin-left:auto;align-self:flex-start;"]);
13900
13963
  var StackInfo = /*#__PURE__*/styled.div.withConfig({
13901
13964
  displayName: "ItemInfo__StackInfo",
13902
- componentId: "sc-1xm4q8k-8"
13965
+ componentId: "sc-1xm4q8k-9"
13903
13966
  })(["width:100%;text-align:right;font-size:", ";color:", ";margin-top:1rem;"], uiFonts.size.small, uiColors.orange);
13904
13967
  var MissingStatistics = /*#__PURE__*/styled.div.withConfig({
13905
13968
  displayName: "ItemInfo__MissingStatistics",
13906
- componentId: "sc-1xm4q8k-9"
13969
+ componentId: "sc-1xm4q8k-10"
13907
13970
  })(["margin-top:1rem;color:", ";"], uiColors.cardinal);
13908
13971
 
13909
13972
  var itemSlotTypes = ['head', 'neck', 'leftHand', 'rightHand', 'ring', 'legs', 'boot', 'accessory', 'armor', 'inventory'];
@@ -13925,7 +13988,11 @@ var ItemInfoDisplay = function ItemInfoDisplay(_ref) {
13925
13988
  var allowedSlotTypeCamelCase = camelCase(item.allowedEquipSlotType[0]);
13926
13989
  var itemSubTypeCamelCase = camelCase(item.subType);
13927
13990
  var slotType = getSlotType(itemSlotTypes, allowedSlotTypeCamelCase, itemSubTypeCamelCase);
13928
- var itemFromEquipment = equipmentSet[slotType];
13991
+ var itemSubTypeFromEquipment = Object.values(equipmentSet).find(function (item) {
13992
+ var _item$subType;
13993
+ return camelCase((_item$subType = item == null ? void 0 : item.subType) != null ? _item$subType : '') === itemSubTypeCamelCase;
13994
+ });
13995
+ var itemFromEquipment = itemSubTypeFromEquipment ? itemSubTypeFromEquipment : equipmentSet[slotType];
13929
13996
  if (itemFromEquipment && (!item._id || itemFromEquipment._id !== item._id)) {
13930
13997
  return itemFromEquipment;
13931
13998
  }
@@ -13949,7 +14016,7 @@ var ItemInfoDisplay = function ItemInfoDisplay(_ref) {
13949
14016
  var Flex = /*#__PURE__*/styled.div.withConfig({
13950
14017
  displayName: "ItemInfoDisplay__Flex",
13951
14018
  componentId: "sc-1lftdo8-0"
13952
- })(["display:flex;gap:0.5rem;flex-direction:", ";@media (max-width:580px){flex-direction:column-reverse;align-items:center;}"], function (_ref2) {
14019
+ })(["display:flex;gap:0.5rem;flex-direction:", ";align-items:center;@media (max-width:640px){flex-direction:column-reverse;align-items:center;}"], function (_ref2) {
13953
14020
  var $isMobile = _ref2.$isMobile;
13954
14021
  return $isMobile ? 'row-reverse' : 'row';
13955
14022
  });
@@ -15815,15 +15882,19 @@ var Shortcuts = function Shortcuts(_ref) {
15815
15882
  isBlockedCastingByKeyboard = _ref$isBlockedCasting === void 0 ? false : _ref$isBlockedCasting,
15816
15883
  atlasJSON = _ref.atlasJSON,
15817
15884
  atlasIMG = _ref.atlasIMG,
15818
- inventory = _ref.inventory;
15885
+ inventory = _ref.inventory,
15886
+ spellCooldowns = _ref.spellCooldowns;
15819
15887
  var shortcutsRefs = useRef([]);
15888
+ var _useShortcutCooldown = useShortcutCooldown(onShortcutCast),
15889
+ handleShortcutCast = _useShortcutCooldown.handleShortcutCast,
15890
+ shortcutCooldown = _useShortcutCooldown.shortcutCooldown;
15820
15891
  useEffect(function () {
15821
15892
  var handleKeyDown = function handleKeyDown(e) {
15822
15893
  if (isBlockedCastingByKeyboard) return;
15823
15894
  var shortcutIndex = Number(e.key) - 1;
15824
15895
  if (shortcutIndex >= 0 && shortcutIndex <= 5) {
15825
15896
  var _shortcutsRefs$curren;
15826
- onShortcutCast(shortcutIndex);
15897
+ handleShortcutCast(shortcutIndex);
15827
15898
  (_shortcutsRefs$curren = shortcutsRefs.current[shortcutIndex]) == null ? void 0 : _shortcutsRefs$curren.classList.add('active');
15828
15899
  setTimeout(function () {
15829
15900
  var _shortcutsRefs$curren2;
@@ -15835,11 +15906,15 @@ var Shortcuts = function Shortcuts(_ref) {
15835
15906
  return function () {
15836
15907
  window.removeEventListener('keydown', handleKeyDown);
15837
15908
  };
15838
- }, [shortcuts, isBlockedCastingByKeyboard]);
15909
+ }, [shortcuts, isBlockedCastingByKeyboard, shortcutCooldown]);
15839
15910
  return React.createElement(List$1, null, Array.from({
15840
15911
  length: 6
15841
15912
  }).map(function (_, i) {
15842
- var _shortcuts$i, _shortcuts$i3, _payload$manaCost;
15913
+ var _shortcuts$i, _shortcuts$i3, _spellCooldowns$paylo, _payload$manaCost;
15914
+ var buildClassName = function buildClassName(classBase, isOnCooldown) {
15915
+ return classBase + " " + (isOnCooldown ? 'onCooldown' : '');
15916
+ };
15917
+ var isOnShortcutCooldown = shortcutCooldown > 0;
15843
15918
  if (((_shortcuts$i = shortcuts[i]) == null ? void 0 : _shortcuts$i.type) === ShortcutType.Item) {
15844
15919
  var _shortcuts$i2;
15845
15920
  var _payload = (_shortcuts$i2 = shortcuts[i]) == null ? void 0 : _shortcuts$i2.payload;
@@ -15856,12 +15931,14 @@ var Shortcuts = function Shortcuts(_ref) {
15856
15931
  var totalQty = _payload && inventory ? countItemFromInventory(_payload.key, inventory) : 0;
15857
15932
  return React.createElement(StyledShortcut$1, {
15858
15933
  key: i,
15859
- onPointerDown: onShortcutCast.bind(null, i),
15934
+ onPointerDown: handleShortcutCast.bind(null, i),
15860
15935
  disabled: false,
15861
15936
  ref: function ref(el) {
15862
15937
  if (el) shortcutsRefs.current[i] = el;
15863
15938
  }
15864
- }, _payload && React.createElement(SpriteFromAtlas, {
15939
+ }, isOnShortcutCooldown && React.createElement("span", {
15940
+ className: "cooldown"
15941
+ }, shortcutCooldown.toFixed(1)), _payload && React.createElement(SpriteFromAtlas, {
15865
15942
  atlasIMG: atlasIMG,
15866
15943
  atlasJSON: atlasJSON,
15867
15944
  spriteKey: getItemTextureKeyPath({
@@ -15873,27 +15950,32 @@ var Shortcuts = function Shortcuts(_ref) {
15873
15950
  width: 32,
15874
15951
  height: 32
15875
15952
  }), React.createElement("span", {
15876
- className: "qty"
15953
+ className: buildClassName('qty', isOnShortcutCooldown)
15877
15954
  }, totalQty), React.createElement("span", {
15878
- className: "keyboard"
15955
+ className: buildClassName('keyboard', isOnShortcutCooldown)
15879
15956
  }, i + 1));
15880
15957
  }
15881
15958
  var payload = (_shortcuts$i3 = shortcuts[i]) == null ? void 0 : _shortcuts$i3.payload;
15959
+ var spellCooldown = !payload ? 0 : (_spellCooldowns$paylo = spellCooldowns == null ? void 0 : spellCooldowns[payload.magicWords.replaceAll(' ', '_')]) != null ? _spellCooldowns$paylo : shortcutCooldown;
15960
+ var cooldown = spellCooldown > shortcutCooldown ? spellCooldown : shortcutCooldown;
15961
+ var isOnCooldown = cooldown > 0 && !!payload;
15882
15962
  return React.createElement(StyledShortcut$1, {
15883
15963
  key: i,
15884
- onPointerDown: onShortcutCast.bind(null, i),
15964
+ onPointerDown: handleShortcutCast.bind(null, i),
15885
15965
  disabled: mana < ((_payload$manaCost = payload == null ? void 0 : payload.manaCost) != null ? _payload$manaCost : 0),
15886
15966
  ref: function ref(el) {
15887
15967
  if (el) shortcutsRefs.current[i] = el;
15888
15968
  }
15889
- }, React.createElement("span", {
15890
- className: "mana"
15969
+ }, isOnCooldown && React.createElement("span", {
15970
+ className: "cooldown"
15971
+ }, cooldown.toFixed(cooldown < 10 ? 1 : 0)), React.createElement("span", {
15972
+ className: buildClassName('mana', isOnCooldown)
15891
15973
  }, payload && payload.manaCost), React.createElement("span", {
15892
15974
  className: "magicWords"
15893
15975
  }, payload == null ? void 0 : payload.magicWords.split(' ').map(function (word) {
15894
15976
  return word[0];
15895
15977
  })), React.createElement("span", {
15896
- className: "keyboard"
15978
+ className: buildClassName('keyboard', isOnCooldown)
15897
15979
  }, i + 1));
15898
15980
  }));
15899
15981
  };
@@ -16150,14 +16232,17 @@ var Spell = function Spell(_ref) {
16150
16232
  charMagicLevel = _ref.charMagicLevel,
16151
16233
  onPointerUp = _ref.onPointerUp,
16152
16234
  isSettingShortcut = _ref.isSettingShortcut,
16153
- minMagicLevelRequired = _ref.minMagicLevelRequired;
16235
+ minMagicLevelRequired = _ref.minMagicLevelRequired,
16236
+ activeCooldown = _ref.activeCooldown;
16154
16237
  var disabled = isSettingShortcut ? charMagicLevel < minMagicLevelRequired : manaCost > charMana || charMagicLevel < minMagicLevelRequired;
16155
16238
  return React.createElement(Container$k, {
16156
- disabled: disabled,
16239
+ disabled: disabled || (activeCooldown != null ? activeCooldown : 0) > 0,
16157
16240
  onPointerUp: onPointerUp == null ? void 0 : onPointerUp.bind(null, spellKey),
16158
16241
  isSettingShortcut: isSettingShortcut && !disabled,
16159
16242
  className: "spell"
16160
- }, disabled && React.createElement(Overlay, null, charMagicLevel < minMagicLevelRequired ? 'Low magic level' : manaCost > charMana && 'No mana'), React.createElement(SpellImage, null, magicWords.split(' ').map(function (word) {
16243
+ }, disabled && React.createElement(Overlay, null, charMagicLevel < minMagicLevelRequired ? 'Low magic level' : manaCost > charMana && 'No mana'), React.createElement(SpellImage, null, activeCooldown && activeCooldown > 0 ? React.createElement("span", {
16244
+ className: "cooldown"
16245
+ }, activeCooldown.toFixed(activeCooldown > 10 ? 0 : 1)) : null, magicWords.split(' ').map(function (word) {
16161
16246
  return word[0];
16162
16247
  })), React.createElement(Info, null, React.createElement(Title$6, null, React.createElement("span", null, name), React.createElement("span", {
16163
16248
  className: "spell"
@@ -16175,7 +16260,7 @@ var Container$k = /*#__PURE__*/styled.button.withConfig({
16175
16260
  var SpellImage = /*#__PURE__*/styled.div.withConfig({
16176
16261
  displayName: "Spell__SpellImage",
16177
16262
  componentId: "sc-j96fa2-1"
16178
- })(["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);
16263
+ })(["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);
16179
16264
  var Info = /*#__PURE__*/styled.span.withConfig({
16180
16265
  displayName: "Spell__Info",
16181
16266
  componentId: "sc-j96fa2-2"
@@ -16214,7 +16299,8 @@ var Spellbook = function Spellbook(_ref) {
16214
16299
  removeShortcut = _ref.removeShortcut,
16215
16300
  atlasIMG = _ref.atlasIMG,
16216
16301
  atlasJSON = _ref.atlasJSON,
16217
- scale = _ref.scale;
16302
+ scale = _ref.scale,
16303
+ spellCooldowns = _ref.spellCooldowns;
16218
16304
  var _useState = useState(''),
16219
16305
  search = _useState[0],
16220
16306
  setSearch = _useState[1];
@@ -16276,7 +16362,8 @@ var Spellbook = function Spellbook(_ref) {
16276
16362
  charMagicLevel: magicLevel,
16277
16363
  onPointerUp: settingShortcutIndex !== -1 ? setShortcut : onSpellClick,
16278
16364
  spellKey: spell.key,
16279
- isSettingShortcut: settingShortcutIndex !== -1
16365
+ isSettingShortcut: settingShortcutIndex !== -1,
16366
+ activeCooldown: spellCooldowns == null ? void 0 : spellCooldowns[spell.magicWords.replaceAll(' ', '_')]
16280
16367
  }, spell)));
16281
16368
  }))));
16282
16369
  };