@rpg-engine/long-bow 0.1.91 → 0.1.92

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.
Files changed (88) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +181 -181
  3. package/dist/components/Item/Inventory/itemContainerHelper.d.ts +2 -2
  4. package/dist/long-bow.cjs.development.js +49 -2
  5. package/dist/long-bow.cjs.development.js.map +1 -1
  6. package/dist/long-bow.cjs.production.min.js +1 -1
  7. package/dist/long-bow.cjs.production.min.js.map +1 -1
  8. package/dist/long-bow.esm.js +49 -2
  9. package/dist/long-bow.esm.js.map +1 -1
  10. package/package.json +98 -98
  11. package/src/components/Abstractions/SlotsContainer.tsx +42 -42
  12. package/src/components/Button.tsx +30 -30
  13. package/src/components/Chat/Chat.tsx +193 -193
  14. package/src/components/CheckButton.tsx +65 -65
  15. package/src/components/DraggableContainer.tsx +150 -150
  16. package/src/components/Dropdown.tsx +57 -57
  17. package/src/components/Equipment/EquipmentSet.tsx +134 -134
  18. package/src/components/Input.tsx +11 -11
  19. package/src/components/Item/Cards/ItemTooltip.tsx +32 -32
  20. package/src/components/Item/Inventory/ItemContainer.tsx +65 -65
  21. package/src/components/Item/Inventory/ItemContainerTypes.ts +4 -4
  22. package/src/components/Item/Inventory/ItemSlot.tsx +199 -199
  23. package/src/components/Item/Inventory/itemContainerHelper.ts +94 -81
  24. package/src/components/ListMenu.tsx +65 -65
  25. package/src/components/Multitab/Tab.tsx +57 -57
  26. package/src/components/Multitab/TabBody.tsx +13 -13
  27. package/src/components/Multitab/TabsContainer.tsx +97 -97
  28. package/src/components/NPCDialog/NPCDialog.tsx +145 -145
  29. package/src/components/NPCDialog/NPCDialogText.tsx +53 -53
  30. package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +239 -239
  31. package/src/components/ProgressBar.tsx +91 -91
  32. package/src/components/PropertySelect/PropertySelect.tsx +101 -101
  33. package/src/components/PropertySelect/img/ui-arrows/arrow01-left-clicked.png +0 -0
  34. package/src/components/PropertySelect/img/ui-arrows/arrow01-left.png +0 -0
  35. package/src/components/PropertySelect/img/ui-arrows/arrow01-right-clicked.png +0 -0
  36. package/src/components/PropertySelect/img/ui-arrows/arrow01-right.png +0 -0
  37. package/src/components/PropertySelect/img/ui-arrows/arrow02-left-clicked.png +0 -0
  38. package/src/components/PropertySelect/img/ui-arrows/arrow02-left.png +0 -0
  39. package/src/components/PropertySelect/img/ui-arrows/arrow02-right-clicked.png +0 -0
  40. package/src/components/PropertySelect/img/ui-arrows/arrow02-right.png +0 -0
  41. package/src/components/QuestInfo/QuestInfo.tsx +143 -143
  42. package/src/components/RPGUIContainer.tsx +47 -47
  43. package/src/components/RPGUIRoot.tsx +14 -14
  44. package/src/components/RadioButton.tsx +53 -53
  45. package/src/components/RangeSlider.tsx +68 -68
  46. package/src/components/RelativeListMenu.tsx +83 -83
  47. package/src/components/ScrollList.tsx +77 -77
  48. package/src/components/SimpleProgressBar.tsx +62 -62
  49. package/src/components/SkillProgressBar.tsx +123 -123
  50. package/src/components/SkillsContainer.tsx +196 -196
  51. package/src/components/TextArea.tsx +11 -11
  52. package/src/components/Truncate.tsx +25 -25
  53. package/src/components/shared/Column.tsx +16 -16
  54. package/src/components/shared/SpriteFromAtlas.tsx +99 -99
  55. package/src/components/typography/DynamicText.tsx +49 -49
  56. package/src/constants/uiColors.ts +10 -10
  57. package/src/hooks/useEventListener.ts +21 -21
  58. package/src/hooks/useOutsideAlerter.ts +25 -25
  59. package/src/index.tsx +25 -25
  60. package/src/libs/StringHelpers.ts +3 -3
  61. package/src/mocks/atlas/icons/icons.json +735 -735
  62. package/src/mocks/atlas/items/items.json +5215 -5215
  63. package/src/mocks/equipmentSet.mocks.ts +347 -347
  64. package/src/mocks/itemContainer.mocks.ts +249 -249
  65. package/src/mocks/skills.mocks.ts +122 -122
  66. package/src/stories/Button.stories.tsx +36 -36
  67. package/src/stories/Chat.stories.tsx +170 -170
  68. package/src/stories/CheckButton.stories.tsx +48 -48
  69. package/src/stories/DraggableContainer.stories.tsx +28 -28
  70. package/src/stories/Dropdown.stories.tsx +46 -46
  71. package/src/stories/EquipmentSet.stories.tsx +50 -50
  72. package/src/stories/ItemContainer.stories.tsx +50 -50
  73. package/src/stories/ListMenu.stories.tsx +56 -56
  74. package/src/stories/Multitab.stories.tsx +51 -51
  75. package/src/stories/NPCDialog.stories.tsx +130 -130
  76. package/src/stories/ProgressBar.stories.tsx +23 -23
  77. package/src/stories/PropertySelect.stories.tsx +41 -41
  78. package/src/stories/QuestInfo.stories.tsx +76 -76
  79. package/src/stories/RPGUIContainers.stories.tsx +42 -42
  80. package/src/stories/RadioButton.stories.tsx +49 -49
  81. package/src/stories/RangeSlider.stories.tsx +60 -60
  82. package/src/stories/ScrollList.stories.tsx +85 -85
  83. package/src/stories/SimpleProgressBar.stories.tsx +22 -22
  84. package/src/stories/SkillProgressBar.stories.tsx +30 -30
  85. package/src/stories/SkillsContainer.stories.tsx +31 -31
  86. package/src/stories/Text.stories.tsx +42 -42
  87. package/src/types/eventTypes.ts +4 -4
  88. package/src/types/index.d.ts +2 -2
@@ -1,150 +1,150 @@
1
- import React, { useEffect, useRef } from 'react';
2
- import Draggable, { DraggableData } from 'react-draggable';
3
- import styled from 'styled-components';
4
- import { useOutsideClick } from '../hooks/useOutsideAlerter';
5
- import { IPosition } from '../types/eventTypes';
6
- import { RPGUIContainerTypes } from './RPGUIContainer';
7
-
8
- export interface IDraggableContainerProps {
9
- children: React.ReactNode;
10
- width?: string;
11
- height?: string;
12
- className?: string;
13
- type?: RPGUIContainerTypes;
14
- title?: string;
15
- imgSrc?: string;
16
- imgWidth?: string;
17
- onCloseButton?: () => void;
18
- cancelDrag?: string;
19
- onPositionChange?: (position: IPosition) => void;
20
- onOutsideClick?: () => void;
21
- }
22
-
23
- export const DraggableContainer: React.FC<IDraggableContainerProps> = ({
24
- children,
25
- width = '50%',
26
- height,
27
- className,
28
- type = RPGUIContainerTypes.FramedGold,
29
- onCloseButton,
30
- title,
31
- imgSrc,
32
- imgWidth = '20px',
33
- cancelDrag,
34
- onPositionChange,
35
- onOutsideClick,
36
- }) => {
37
- const draggableRef = useRef(null);
38
-
39
- useOutsideClick(draggableRef, 'item-container');
40
-
41
- useEffect(() => {
42
- document.addEventListener('clickOutside', event => {
43
- const e = event as CustomEvent;
44
-
45
- if (e.detail.id === 'item-container') {
46
- if (onOutsideClick) {
47
- onOutsideClick();
48
- }
49
- }
50
- });
51
-
52
- return () => {
53
- document.removeEventListener('clickOutside', _e => {});
54
- };
55
- }, []);
56
-
57
- return (
58
- <Draggable
59
- cancel={`.container-close,${cancelDrag}`}
60
- onDrag={(_e, data: DraggableData) => {
61
- if (onPositionChange) {
62
- onPositionChange({
63
- x: data.x,
64
- y: data.y,
65
- });
66
- }
67
- }}
68
- >
69
- <Container
70
- ref={draggableRef}
71
- width={width}
72
- height={height || 'auto'}
73
- className={`rpgui-container ${type} ${className}`}
74
- >
75
- {title && (
76
- <TitleContainer className="drag-handler">
77
- <Title>
78
- {imgSrc && <Icon src={imgSrc} width={imgWidth} />}
79
- {title}
80
- </Title>
81
- </TitleContainer>
82
- )}
83
- {onCloseButton && (
84
- <CloseButton
85
- className="container-close"
86
- onClick={onCloseButton}
87
- onTouchStart={onCloseButton}
88
- >
89
- X
90
- </CloseButton>
91
- )}
92
-
93
- {children}
94
- </Container>
95
- </Draggable>
96
- );
97
- };
98
-
99
- interface IContainerProps {
100
- width: string;
101
- height: string;
102
- }
103
-
104
- const Container = styled.div<IContainerProps>`
105
- height: ${props => props.height};
106
- width: ${({ width }) => width};
107
- display: flex;
108
- flex-wrap: wrap;
109
- image-rendering: pixelated;
110
-
111
- &.rpgui-container {
112
- padding-top: 1.5rem;
113
- }
114
- `;
115
-
116
- const CloseButton = styled.div`
117
- position: absolute;
118
- top: 3px;
119
- right: 0px;
120
- color: white;
121
- z-index: 22;
122
- font-size: 0.8rem;
123
- `;
124
-
125
- const TitleContainer = styled.div`
126
- width: 100%;
127
- height: 100%;
128
- display: flex;
129
- flex-wrap: wrap;
130
- justify-content: flex-start;
131
- align-items: center;
132
- `;
133
-
134
- const Title = styled.h1`
135
- color: white;
136
- z-index: 22;
137
- font-size: 0.6rem;
138
- `;
139
-
140
- interface ICustomIconProps {
141
- width: string;
142
- }
143
-
144
- const Icon = styled.img`
145
- color: white;
146
- z-index: 22;
147
- font-size: 10px;
148
- width: ${(props: ICustomIconProps) => props.width};
149
- margin-right: 0.5rem;
150
- `;
1
+ import React, { useEffect, useRef } from 'react';
2
+ import Draggable, { DraggableData } from 'react-draggable';
3
+ import styled from 'styled-components';
4
+ import { useOutsideClick } from '../hooks/useOutsideAlerter';
5
+ import { IPosition } from '../types/eventTypes';
6
+ import { RPGUIContainerTypes } from './RPGUIContainer';
7
+
8
+ export interface IDraggableContainerProps {
9
+ children: React.ReactNode;
10
+ width?: string;
11
+ height?: string;
12
+ className?: string;
13
+ type?: RPGUIContainerTypes;
14
+ title?: string;
15
+ imgSrc?: string;
16
+ imgWidth?: string;
17
+ onCloseButton?: () => void;
18
+ cancelDrag?: string;
19
+ onPositionChange?: (position: IPosition) => void;
20
+ onOutsideClick?: () => void;
21
+ }
22
+
23
+ export const DraggableContainer: React.FC<IDraggableContainerProps> = ({
24
+ children,
25
+ width = '50%',
26
+ height,
27
+ className,
28
+ type = RPGUIContainerTypes.FramedGold,
29
+ onCloseButton,
30
+ title,
31
+ imgSrc,
32
+ imgWidth = '20px',
33
+ cancelDrag,
34
+ onPositionChange,
35
+ onOutsideClick,
36
+ }) => {
37
+ const draggableRef = useRef(null);
38
+
39
+ useOutsideClick(draggableRef, 'item-container');
40
+
41
+ useEffect(() => {
42
+ document.addEventListener('clickOutside', event => {
43
+ const e = event as CustomEvent;
44
+
45
+ if (e.detail.id === 'item-container') {
46
+ if (onOutsideClick) {
47
+ onOutsideClick();
48
+ }
49
+ }
50
+ });
51
+
52
+ return () => {
53
+ document.removeEventListener('clickOutside', _e => {});
54
+ };
55
+ }, []);
56
+
57
+ return (
58
+ <Draggable
59
+ cancel={`.container-close,${cancelDrag}`}
60
+ onDrag={(_e, data: DraggableData) => {
61
+ if (onPositionChange) {
62
+ onPositionChange({
63
+ x: data.x,
64
+ y: data.y,
65
+ });
66
+ }
67
+ }}
68
+ >
69
+ <Container
70
+ ref={draggableRef}
71
+ width={width}
72
+ height={height || 'auto'}
73
+ className={`rpgui-container ${type} ${className}`}
74
+ >
75
+ {title && (
76
+ <TitleContainer className="drag-handler">
77
+ <Title>
78
+ {imgSrc && <Icon src={imgSrc} width={imgWidth} />}
79
+ {title}
80
+ </Title>
81
+ </TitleContainer>
82
+ )}
83
+ {onCloseButton && (
84
+ <CloseButton
85
+ className="container-close"
86
+ onClick={onCloseButton}
87
+ onTouchStart={onCloseButton}
88
+ >
89
+ X
90
+ </CloseButton>
91
+ )}
92
+
93
+ {children}
94
+ </Container>
95
+ </Draggable>
96
+ );
97
+ };
98
+
99
+ interface IContainerProps {
100
+ width: string;
101
+ height: string;
102
+ }
103
+
104
+ const Container = styled.div<IContainerProps>`
105
+ height: ${props => props.height};
106
+ width: ${({ width }) => width};
107
+ display: flex;
108
+ flex-wrap: wrap;
109
+ image-rendering: pixelated;
110
+
111
+ &.rpgui-container {
112
+ padding-top: 1.5rem;
113
+ }
114
+ `;
115
+
116
+ const CloseButton = styled.div`
117
+ position: absolute;
118
+ top: 3px;
119
+ right: 0px;
120
+ color: white;
121
+ z-index: 22;
122
+ font-size: 0.8rem;
123
+ `;
124
+
125
+ const TitleContainer = styled.div`
126
+ width: 100%;
127
+ height: 100%;
128
+ display: flex;
129
+ flex-wrap: wrap;
130
+ justify-content: flex-start;
131
+ align-items: center;
132
+ `;
133
+
134
+ const Title = styled.h1`
135
+ color: white;
136
+ z-index: 22;
137
+ font-size: 0.6rem;
138
+ `;
139
+
140
+ interface ICustomIconProps {
141
+ width: string;
142
+ }
143
+
144
+ const Icon = styled.img`
145
+ color: white;
146
+ z-index: 22;
147
+ font-size: 10px;
148
+ width: ${(props: ICustomIconProps) => props.width};
149
+ margin-right: 0.5rem;
150
+ `;
@@ -1,57 +1,57 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { v4 as uuidv4 } from 'uuid';
3
- import { _RPGUI } from './RPGUIRoot';
4
-
5
- export interface IOptionsProps {
6
- id: number;
7
- value: string;
8
- option: string;
9
- }
10
-
11
- export interface IDropdownProps {
12
- options: IOptionsProps[];
13
- width?: string;
14
- onChange: (value: string) => void;
15
- }
16
-
17
- export const Dropdown: React.FC<IDropdownProps> = ({
18
- options,
19
- width,
20
- onChange,
21
- }) => {
22
- const dropdownId = uuidv4();
23
-
24
- const [selectedValue, setSelectedValue] = useState<string>('');
25
-
26
- useEffect(() => {
27
- const element = document.getElementById(`rpgui-dropdown-${dropdownId}`);
28
- const dropdownValue = _RPGUI.get_value(element);
29
- setSelectedValue(dropdownValue);
30
-
31
- element?.addEventListener('change', (event: any) => {
32
- setSelectedValue(event?.target.value);
33
- });
34
- }, []);
35
-
36
- useEffect(() => {
37
- if (selectedValue) {
38
- onChange(selectedValue);
39
- }
40
- }, [selectedValue]);
41
-
42
- return (
43
- <select
44
- id={`rpgui-dropdown-${dropdownId}`}
45
- style={{ width: width }}
46
- className="rpgui-dropdown"
47
- >
48
- {options.map(option => {
49
- return (
50
- <option key={option.id} value={option.value}>
51
- {option.option}
52
- </option>
53
- );
54
- })}
55
- </select>
56
- );
57
- };
1
+ import React, { useEffect, useState } from 'react';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { _RPGUI } from './RPGUIRoot';
4
+
5
+ export interface IOptionsProps {
6
+ id: number;
7
+ value: string;
8
+ option: string;
9
+ }
10
+
11
+ export interface IDropdownProps {
12
+ options: IOptionsProps[];
13
+ width?: string;
14
+ onChange: (value: string) => void;
15
+ }
16
+
17
+ export const Dropdown: React.FC<IDropdownProps> = ({
18
+ options,
19
+ width,
20
+ onChange,
21
+ }) => {
22
+ const dropdownId = uuidv4();
23
+
24
+ const [selectedValue, setSelectedValue] = useState<string>('');
25
+
26
+ useEffect(() => {
27
+ const element = document.getElementById(`rpgui-dropdown-${dropdownId}`);
28
+ const dropdownValue = _RPGUI.get_value(element);
29
+ setSelectedValue(dropdownValue);
30
+
31
+ element?.addEventListener('change', (event: any) => {
32
+ setSelectedValue(event?.target.value);
33
+ });
34
+ }, []);
35
+
36
+ useEffect(() => {
37
+ if (selectedValue) {
38
+ onChange(selectedValue);
39
+ }
40
+ }, [selectedValue]);
41
+
42
+ return (
43
+ <select
44
+ id={`rpgui-dropdown-${dropdownId}`}
45
+ style={{ width: width }}
46
+ className="rpgui-dropdown"
47
+ >
48
+ {options.map(option => {
49
+ return (
50
+ <option key={option.id} value={option.value}>
51
+ {option.option}
52
+ </option>
53
+ );
54
+ })}
55
+ </select>
56
+ );
57
+ };
@@ -1,134 +1,134 @@
1
- import {
2
- IEquipmentSet,
3
- IItem,
4
- IItemContainer,
5
- ItemSlotType,
6
- } from '@rpg-engine/shared';
7
- import React from 'react';
8
- import styled from 'styled-components';
9
- import { DraggableContainer } from '../DraggableContainer';
10
- import { SlotContainerType } from '../Item/Inventory/ItemContainerTypes';
11
- import { ItemSlot } from '../Item/Inventory/ItemSlot';
12
- import { RPGUIContainerTypes } from '../RPGUIContainer';
13
-
14
- export interface IEquipmentSetProps {
15
- equipmentSet: IEquipmentSet;
16
- onClose?: () => void;
17
- onItemClick?: (
18
- item: IItem,
19
- slotContainerType: SlotContainerType | null
20
- ) => void;
21
- onMouseOver?: (e: any, slotIndex: number, item: IItem | null) => void;
22
- onSelected?: (optionId: string) => void;
23
- initialPosition?: { x: number; y: number };
24
- }
25
-
26
- export const EquipmentSet: React.FC<IEquipmentSetProps> = ({
27
- equipmentSet,
28
- onClose,
29
- onMouseOver,
30
- onSelected,
31
- onItemClick,
32
- }) => {
33
- const {
34
- neck,
35
- leftHand,
36
- ring,
37
- head,
38
- armor,
39
- legs,
40
- boot,
41
- inventory,
42
- rightHand,
43
- accessory,
44
- } = equipmentSet;
45
-
46
- const equipmentData = [
47
- neck,
48
- leftHand,
49
- ring,
50
- head,
51
- armor,
52
- legs,
53
- boot,
54
- inventory,
55
- rightHand,
56
- accessory,
57
- ];
58
-
59
- const equipmentMaskSlots = [
60
- ItemSlotType.Neck,
61
- ItemSlotType.LeftHand,
62
- ItemSlotType.Ring,
63
- ItemSlotType.Head,
64
- ItemSlotType.Torso,
65
- ItemSlotType.Legs,
66
- ItemSlotType.Feet,
67
- ItemSlotType.Inventory,
68
- ItemSlotType.RightHand,
69
- ItemSlotType.Accessory,
70
- ];
71
-
72
- const onRenderEquipmentSlotRange = (start: number, end: number) => {
73
- const equipmentRange = equipmentData.slice(start, end);
74
- const slotMaksRange = equipmentMaskSlots.slice(start, end);
75
-
76
- return equipmentRange.map((data, i) => {
77
- const item = data as IItem;
78
- const itemContainer =
79
- (item && (item.itemContainer as IItemContainer)) ?? null;
80
- return (
81
- <ItemSlot
82
- key={i}
83
- slotIndex={i}
84
- item={item}
85
- itemContainer={itemContainer}
86
- slotContainerType={SlotContainerType.EQUIPMENT_SET}
87
- slotSpriteMask={slotMaksRange[i]}
88
- onMouseOver={(event, slotIndex, item) => {
89
- if (onMouseOver) onMouseOver(event, slotIndex, item);
90
- }}
91
- onClick={(item, slotContainerType) => {
92
- if (onItemClick) onItemClick(item, slotContainerType);
93
- }}
94
- onSelected={(optionId: string) => {
95
- if (onSelected) onSelected(optionId);
96
- }}
97
- />
98
- );
99
- });
100
- };
101
-
102
- return (
103
- <DraggableContainer
104
- title={'Equipments'}
105
- type={RPGUIContainerTypes.Framed}
106
- onCloseButton={() => {
107
- if (onClose) onClose();
108
- }}
109
- width="330px"
110
- cancelDrag=".equipment-container-body"
111
- >
112
- <EquipmentSetContainer className="equipment-container-body">
113
- <EquipmentColumn>{onRenderEquipmentSlotRange(0, 3)}</EquipmentColumn>
114
- <EquipmentColumn>{onRenderEquipmentSlotRange(3, 7)}</EquipmentColumn>
115
- <EquipmentColumn>{onRenderEquipmentSlotRange(7, 10)}</EquipmentColumn>
116
- </EquipmentSetContainer>
117
- </DraggableContainer>
118
- );
119
- };
120
-
121
- const EquipmentSetContainer = styled.div`
122
- width: inherit;
123
- display: flex;
124
- justify-content: center;
125
- flex-wrap: wrap;
126
- flex-direction: row;
127
- `;
128
-
129
- const EquipmentColumn = styled.div`
130
- display: flex;
131
- justify-content: center;
132
- flex-wrap: wrap;
133
- flex-direction: column;
134
- `;
1
+ import {
2
+ IEquipmentSet,
3
+ IItem,
4
+ IItemContainer,
5
+ ItemSlotType,
6
+ } from '@rpg-engine/shared';
7
+ import React from 'react';
8
+ import styled from 'styled-components';
9
+ import { DraggableContainer } from '../DraggableContainer';
10
+ import { SlotContainerType } from '../Item/Inventory/ItemContainerTypes';
11
+ import { ItemSlot } from '../Item/Inventory/ItemSlot';
12
+ import { RPGUIContainerTypes } from '../RPGUIContainer';
13
+
14
+ export interface IEquipmentSetProps {
15
+ equipmentSet: IEquipmentSet;
16
+ onClose?: () => void;
17
+ onItemClick?: (
18
+ item: IItem,
19
+ slotContainerType: SlotContainerType | null
20
+ ) => void;
21
+ onMouseOver?: (e: any, slotIndex: number, item: IItem | null) => void;
22
+ onSelected?: (optionId: string) => void;
23
+ initialPosition?: { x: number; y: number };
24
+ }
25
+
26
+ export const EquipmentSet: React.FC<IEquipmentSetProps> = ({
27
+ equipmentSet,
28
+ onClose,
29
+ onMouseOver,
30
+ onSelected,
31
+ onItemClick,
32
+ }) => {
33
+ const {
34
+ neck,
35
+ leftHand,
36
+ ring,
37
+ head,
38
+ armor,
39
+ legs,
40
+ boot,
41
+ inventory,
42
+ rightHand,
43
+ accessory,
44
+ } = equipmentSet;
45
+
46
+ const equipmentData = [
47
+ neck,
48
+ leftHand,
49
+ ring,
50
+ head,
51
+ armor,
52
+ legs,
53
+ boot,
54
+ inventory,
55
+ rightHand,
56
+ accessory,
57
+ ];
58
+
59
+ const equipmentMaskSlots = [
60
+ ItemSlotType.Neck,
61
+ ItemSlotType.LeftHand,
62
+ ItemSlotType.Ring,
63
+ ItemSlotType.Head,
64
+ ItemSlotType.Torso,
65
+ ItemSlotType.Legs,
66
+ ItemSlotType.Feet,
67
+ ItemSlotType.Inventory,
68
+ ItemSlotType.RightHand,
69
+ ItemSlotType.Accessory,
70
+ ];
71
+
72
+ const onRenderEquipmentSlotRange = (start: number, end: number) => {
73
+ const equipmentRange = equipmentData.slice(start, end);
74
+ const slotMaksRange = equipmentMaskSlots.slice(start, end);
75
+
76
+ return equipmentRange.map((data, i) => {
77
+ const item = data as IItem;
78
+ const itemContainer =
79
+ (item && (item.itemContainer as IItemContainer)) ?? null;
80
+ return (
81
+ <ItemSlot
82
+ key={i}
83
+ slotIndex={i}
84
+ item={item}
85
+ itemContainer={itemContainer}
86
+ slotContainerType={SlotContainerType.EQUIPMENT_SET}
87
+ slotSpriteMask={slotMaksRange[i]}
88
+ onMouseOver={(event, slotIndex, item) => {
89
+ if (onMouseOver) onMouseOver(event, slotIndex, item);
90
+ }}
91
+ onClick={(item, slotContainerType) => {
92
+ if (onItemClick) onItemClick(item, slotContainerType);
93
+ }}
94
+ onSelected={(optionId: string) => {
95
+ if (onSelected) onSelected(optionId);
96
+ }}
97
+ />
98
+ );
99
+ });
100
+ };
101
+
102
+ return (
103
+ <DraggableContainer
104
+ title={'Equipments'}
105
+ type={RPGUIContainerTypes.Framed}
106
+ onCloseButton={() => {
107
+ if (onClose) onClose();
108
+ }}
109
+ width="330px"
110
+ cancelDrag=".equipment-container-body"
111
+ >
112
+ <EquipmentSetContainer className="equipment-container-body">
113
+ <EquipmentColumn>{onRenderEquipmentSlotRange(0, 3)}</EquipmentColumn>
114
+ <EquipmentColumn>{onRenderEquipmentSlotRange(3, 7)}</EquipmentColumn>
115
+ <EquipmentColumn>{onRenderEquipmentSlotRange(7, 10)}</EquipmentColumn>
116
+ </EquipmentSetContainer>
117
+ </DraggableContainer>
118
+ );
119
+ };
120
+
121
+ const EquipmentSetContainer = styled.div`
122
+ width: inherit;
123
+ display: flex;
124
+ justify-content: center;
125
+ flex-wrap: wrap;
126
+ flex-direction: row;
127
+ `;
128
+
129
+ const EquipmentColumn = styled.div`
130
+ display: flex;
131
+ justify-content: center;
132
+ flex-wrap: wrap;
133
+ flex-direction: column;
134
+ `;