@rpg-engine/long-bow 0.3.72 → 0.3.75

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 (158) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +181 -181
  3. package/dist/components/CraftBook/CraftBook.d.ts +1 -2
  4. package/dist/components/Item/Cards/ItemTooltip.d.ts +4 -7
  5. package/dist/components/Item/Inventory/ItemContainer.d.ts +1 -2
  6. package/dist/components/Item/Inventory/ItemSlot.d.ts +1 -4
  7. package/dist/components/TradingMenu/TradingItemRow.d.ts +1 -2
  8. package/dist/components/TradingMenu/TradingMenu.d.ts +4 -5
  9. package/dist/components/shared/SpriteFromAtlas.d.ts +0 -1
  10. package/dist/long-bow.cjs.development.js +958 -1225
  11. package/dist/long-bow.cjs.development.js.map +1 -1
  12. package/dist/long-bow.cjs.production.min.js +1 -1
  13. package/dist/long-bow.cjs.production.min.js.map +1 -1
  14. package/dist/long-bow.esm.js +961 -1226
  15. package/dist/long-bow.esm.js.map +1 -1
  16. package/dist/stories/TradingMenu.stories.d.ts +2 -2
  17. package/package.json +100 -100
  18. package/src/components/Abstractions/SlotsContainer.tsx +45 -45
  19. package/src/components/Arrow/SelectArrow.tsx +69 -69
  20. package/src/components/Arrow/img/arrow01-left-clicked.png +0 -0
  21. package/src/components/Arrow/img/arrow01-left.png +0 -0
  22. package/src/components/Arrow/img/arrow01-right-clicked.png +0 -0
  23. package/src/components/Arrow/img/arrow01-right.png +0 -0
  24. package/src/components/Arrow/img/arrow02-left-clicked.png +0 -0
  25. package/src/components/Arrow/img/arrow02-left.png +0 -0
  26. package/src/components/Arrow/img/arrow02-right-clicked.png +0 -0
  27. package/src/components/Arrow/img/arrow02-right.png +0 -0
  28. package/src/components/Button.tsx +40 -40
  29. package/src/components/Character/CharacterSelection.tsx +96 -96
  30. package/src/components/CharacterStatus/CharacterStatus.tsx +120 -120
  31. package/src/components/Chat/Chat.tsx +195 -195
  32. package/src/components/Chatdeprecated/ChatDeprecated.tsx +198 -198
  33. package/src/components/CheckButton.tsx +65 -65
  34. package/src/components/CircularController/CircularController.tsx +248 -248
  35. package/src/components/CraftBook/CraftBook.tsx +227 -237
  36. package/src/components/CraftBook/MockItems.ts +251 -41
  37. package/src/components/DraggableContainer.tsx +153 -153
  38. package/src/components/Dropdown.tsx +90 -90
  39. package/src/components/DropdownSelectorContainer.tsx +42 -42
  40. package/src/components/Equipment/EquipmentSet.tsx +190 -190
  41. package/src/components/HistoryDialog.tsx +104 -104
  42. package/src/components/Input.tsx +15 -15
  43. package/src/components/Item/Cards/ItemTooltip.tsx +33 -85
  44. package/src/components/Item/Inventory/ErrorBoundary.tsx +42 -42
  45. package/src/components/Item/Inventory/ItemContainer.tsx +210 -214
  46. package/src/components/Item/Inventory/ItemContainerTypes.ts +6 -6
  47. package/src/components/Item/Inventory/ItemQuantitySelector.tsx +138 -138
  48. package/src/components/Item/Inventory/ItemSlot.tsx +501 -512
  49. package/src/components/Item/Inventory/itemContainerHelper.ts +156 -156
  50. package/src/components/ListMenu.tsx +63 -63
  51. package/src/components/Multitab/Tab.tsx +66 -66
  52. package/src/components/Multitab/TabBody.tsx +13 -13
  53. package/src/components/Multitab/TabsContainer.tsx +97 -97
  54. package/src/components/NPCDialog/NPCDialog.tsx +121 -121
  55. package/src/components/NPCDialog/NPCDialogText.tsx +113 -113
  56. package/src/components/NPCDialog/NPCMultiDialog.tsx +159 -159
  57. package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +237 -237
  58. package/src/components/ProgressBar.tsx +92 -92
  59. package/src/components/PropertySelect/PropertySelect.tsx +106 -106
  60. package/src/components/QuestInfo/QuestInfo.tsx +230 -230
  61. package/src/components/QuestList.tsx +129 -129
  62. package/src/components/RPGUIContainer.tsx +47 -47
  63. package/src/components/RPGUIForceRenderStart.tsx +45 -45
  64. package/src/components/RPGUIRoot.tsx +14 -14
  65. package/src/components/RadioButton.tsx +53 -53
  66. package/src/components/RadioInput/RadioButton.tsx +96 -96
  67. package/src/components/RadioInput/RadioInput.tsx +102 -102
  68. package/src/components/RadioInput/instruments.ts +15 -15
  69. package/src/components/RangeSlider.tsx +78 -78
  70. package/src/components/RelativeListMenu.tsx +83 -83
  71. package/src/components/ScrollList.tsx +79 -79
  72. package/src/components/Shortcuts/Shortcuts.tsx +151 -151
  73. package/src/components/Shortcuts/ShortcutsSetter.tsx +132 -132
  74. package/src/components/Shortcuts/SingleShortcut.ts +62 -62
  75. package/src/components/SimpleProgressBar.tsx +62 -62
  76. package/src/components/SkillProgressBar.tsx +133 -133
  77. package/src/components/SkillsContainer.tsx +200 -198
  78. package/src/components/Spellbook/Spell.tsx +201 -201
  79. package/src/components/Spellbook/Spellbook.tsx +150 -150
  80. package/src/components/Spellbook/constants.ts +8 -8
  81. package/src/components/Spellbook/mockSpells.ts +60 -60
  82. package/src/components/StaticBook/StaticBook.tsx +103 -103
  83. package/src/components/TextArea.tsx +11 -11
  84. package/src/components/TimeWidget/DayNightPeriod/DayNightPeriod.tsx +35 -35
  85. package/src/components/TimeWidget/TimeWidget.tsx +63 -63
  86. package/src/components/TradingMenu/TradingItemRow.tsx +181 -195
  87. package/src/components/TradingMenu/TradingMenu.tsx +203 -212
  88. package/src/components/TradingMenu/items.mock.ts +96 -48
  89. package/src/components/Truncate.tsx +25 -25
  90. package/src/components/itemSelector/ItemSelector.tsx +136 -136
  91. package/src/components/shared/Column.tsx +16 -16
  92. package/src/components/shared/Ellipsis.tsx +65 -65
  93. package/src/components/shared/SpriteFromAtlas.tsx +102 -104
  94. package/src/components/typography/DynamicText.tsx +49 -49
  95. package/src/constants/uiColors.ts +20 -20
  96. package/src/constants/uiDevices.ts +3 -3
  97. package/src/constants/uiFonts.ts +12 -12
  98. package/src/hooks/useEventListener.ts +21 -21
  99. package/src/hooks/useOutsideAlerter.ts +25 -25
  100. package/src/index.tsx +40 -40
  101. package/src/libs/StringHelpers.ts +3 -3
  102. package/src/mocks/atlas/entities/entities.json +20215 -20215
  103. package/src/mocks/atlas/icons/icons.json +735 -735
  104. package/src/mocks/atlas/items/items.json +12086 -12086
  105. package/src/mocks/equipmentSet.mocks.ts +393 -391
  106. package/src/mocks/itemContainer.mocks.ts +562 -563
  107. package/src/mocks/skills.mocks.ts +128 -128
  108. package/src/stories/Arrow.stories.tsx +26 -26
  109. package/src/stories/Button.stories.tsx +36 -36
  110. package/src/stories/CharacterSelection.stories.tsx +45 -45
  111. package/src/stories/CharacterStatus.stories.tsx +29 -29
  112. package/src/stories/Chat.stories.tsx +187 -187
  113. package/src/stories/ChatDeprecated.stories.tsx +170 -170
  114. package/src/stories/CheckButton.stories.tsx +48 -48
  115. package/src/stories/CircullarController.stories.tsx +37 -37
  116. package/src/stories/CraftBook.stories.tsx +40 -42
  117. package/src/stories/DayNightPeriod.stories.tsx +27 -27
  118. package/src/stories/DraggableContainer.stories.tsx +28 -28
  119. package/src/stories/Dropdown.stories.tsx +46 -46
  120. package/src/stories/DropdownSelectorContainer.stories.tsx +41 -41
  121. package/src/stories/EquipmentSet.stories.tsx +65 -65
  122. package/src/stories/HistoryDialog.stories.tsx +61 -61
  123. package/src/stories/ItemContainer.stories.tsx +198 -200
  124. package/src/stories/ItemQuantitySelector.stories.tsx +26 -26
  125. package/src/stories/ItemSelector.stories.tsx +77 -77
  126. package/src/stories/ItemTradingComponent.stories.tsx +35 -35
  127. package/src/stories/ListMenu.stories.tsx +56 -56
  128. package/src/stories/Multitab.stories.tsx +51 -51
  129. package/src/stories/NPCDialog.stories.tsx +130 -130
  130. package/src/stories/NPCMultiDialog.stories.tsx +71 -71
  131. package/src/stories/ProgressBar.stories.tsx +23 -23
  132. package/src/stories/PropertySelect.stories.tsx +40 -40
  133. package/src/stories/QuestInfo.stories.tsx +107 -107
  134. package/src/stories/QuestList.stories.tsx +82 -82
  135. package/src/stories/RPGUIContainers.stories.tsx +42 -42
  136. package/src/stories/RadioButton.stories.tsx +49 -49
  137. package/src/stories/RadioInput.stories.tsx +34 -34
  138. package/src/stories/RangeSlider.stories.tsx +64 -64
  139. package/src/stories/ScrollList.stories.tsx +85 -85
  140. package/src/stories/Shortcuts.stories.tsx +39 -39
  141. package/src/stories/SimpleProgressBar.stories.tsx +22 -22
  142. package/src/stories/SkillProgressBar.stories.tsx +34 -34
  143. package/src/stories/SkillsContainer.stories.tsx +35 -35
  144. package/src/stories/Spellbook.stories.tsx +104 -104
  145. package/src/stories/StaticBook.stories.tsx +32 -32
  146. package/src/stories/Text.stories.tsx +42 -42
  147. package/src/stories/TimeWidget.stories.tsx +27 -27
  148. package/src/stories/TradingMenu.stories.tsx +45 -47
  149. package/src/types/eventTypes.ts +4 -4
  150. package/src/types/index.d.ts +2 -2
  151. package/dist/components/Item/Cards/ItemInfo.d.ts +0 -10
  152. package/dist/components/Item/Cards/ItemInfoDisplay.d.ts +0 -9
  153. package/dist/components/Item/Cards/ItemInfoWrapper.d.ts +0 -11
  154. package/dist/stories/ItemInfoDisplay.stories.d.ts +0 -8
  155. package/src/components/Item/Cards/ItemInfo.tsx +0 -248
  156. package/src/components/Item/Cards/ItemInfoDisplay.tsx +0 -120
  157. package/src/components/Item/Cards/ItemInfoWrapper.tsx +0 -39
  158. package/src/stories/ItemInfoDisplay.stories.tsx +0 -33
@@ -1,133 +1,133 @@
1
- import { getSPForLevel } from '@rpg-engine/shared';
2
- import React from 'react';
3
- import styled from 'styled-components';
4
- import { ErrorBoundary } from './Item/Inventory/ErrorBoundary';
5
- import { SpriteFromAtlas } from './shared/SpriteFromAtlas';
6
- import { SimpleProgressBar } from './SimpleProgressBar';
7
-
8
- export interface ISkillProgressBarProps {
9
- skillName: string;
10
- bgColor: string;
11
- level: number;
12
- skillPoints: number;
13
- skillPointsToNextLevel?: number;
14
- texturePath: string;
15
- showSkillPoints?: boolean;
16
- atlasJSON: any;
17
- atlasIMG: any;
18
- }
19
-
20
- export const SkillProgressBar: React.FC<ISkillProgressBarProps> = ({
21
- bgColor,
22
- skillName,
23
- level,
24
- skillPoints,
25
- skillPointsToNextLevel,
26
- texturePath,
27
- showSkillPoints = true,
28
- atlasIMG,
29
- atlasJSON,
30
- }) => {
31
- if (!skillPointsToNextLevel) {
32
- skillPointsToNextLevel = getSPForLevel(level + 1);
33
- }
34
-
35
- const nextLevelSPWillbe = skillPoints + skillPointsToNextLevel;
36
-
37
- const ratio = (skillPoints / nextLevelSPWillbe) * 100;
38
-
39
- return (
40
- <>
41
- <ProgressTitle>
42
- <TitleName>{skillName}</TitleName>
43
- <ValueDisplay>lv {level}</ValueDisplay>
44
- </ProgressTitle>
45
- <ProgressBody>
46
- <ProgressIconContainer>
47
- {atlasIMG && atlasJSON ? (
48
- <SpriteContainer>
49
- <ErrorBoundary>
50
- <SpriteFromAtlas
51
- atlasIMG={atlasIMG}
52
- atlasJSON={atlasJSON}
53
- spriteKey={texturePath}
54
- imgScale={1}
55
- grayScale
56
- opacity={0.5}
57
- />
58
- </ErrorBoundary>
59
- </SpriteContainer>
60
- ) : (
61
- <></>
62
- )}
63
- </ProgressIconContainer>
64
-
65
- <ProgressBarContainer>
66
- <SimpleProgressBar value={ratio} bgColor={bgColor} />
67
- </ProgressBarContainer>
68
- </ProgressBody>
69
- {showSkillPoints && (
70
- <SkillDisplayContainer>
71
- <SkillPointsDisplay>
72
- {skillPoints}/{nextLevelSPWillbe}
73
- </SkillPointsDisplay>
74
- </SkillDisplayContainer>
75
- )}
76
- </>
77
- );
78
- };
79
-
80
- const ProgressBarContainer = styled.div`
81
- position: relative;
82
- top: 8px;
83
- width: 100%;
84
- height: auto;
85
- `;
86
-
87
- const SpriteContainer = styled.div`
88
- position: relative;
89
- top: -3px;
90
- left: 0;
91
- `;
92
-
93
- const SkillDisplayContainer = styled.div`
94
- margin: 0 auto;
95
-
96
- p {
97
- margin: 0;
98
- }
99
- `;
100
-
101
- const SkillPointsDisplay = styled.p`
102
- font-size: 0.6rem !important;
103
- font-weight: bold;
104
- text-align: center;
105
- `;
106
-
107
- const TitleName = styled.span`
108
- margin-left: 5px;
109
- `;
110
-
111
- const ValueDisplay = styled.span``;
112
-
113
- const ProgressIconContainer = styled.div`
114
- display: flex;
115
- justify-content: center;
116
- align-items: center;
117
- `;
118
-
119
- const ProgressBody = styled.div`
120
- display: flex;
121
- flex-direction: row;
122
- width: 100%;
123
- `;
124
-
125
- const ProgressTitle = styled.div`
126
- width: 100%;
127
- display: flex;
128
- flex-direction: row;
129
- justify-content: space-between;
130
- span {
131
- font-size: 0.6rem;
132
- }
133
- `;
1
+ import { getSPForLevel } from '@rpg-engine/shared';
2
+ import React from 'react';
3
+ import styled from 'styled-components';
4
+ import { ErrorBoundary } from './Item/Inventory/ErrorBoundary';
5
+ import { SpriteFromAtlas } from './shared/SpriteFromAtlas';
6
+ import { SimpleProgressBar } from './SimpleProgressBar';
7
+
8
+ export interface ISkillProgressBarProps {
9
+ skillName: string;
10
+ bgColor: string;
11
+ level: number;
12
+ skillPoints: number;
13
+ skillPointsToNextLevel?: number;
14
+ texturePath: string;
15
+ showSkillPoints?: boolean;
16
+ atlasJSON: any;
17
+ atlasIMG: any;
18
+ }
19
+
20
+ export const SkillProgressBar: React.FC<ISkillProgressBarProps> = ({
21
+ bgColor,
22
+ skillName,
23
+ level,
24
+ skillPoints,
25
+ skillPointsToNextLevel,
26
+ texturePath,
27
+ showSkillPoints = true,
28
+ atlasIMG,
29
+ atlasJSON,
30
+ }) => {
31
+ if (!skillPointsToNextLevel) {
32
+ skillPointsToNextLevel = getSPForLevel(level + 1);
33
+ }
34
+
35
+ const nextLevelSPWillbe = skillPoints + skillPointsToNextLevel;
36
+
37
+ const ratio = (skillPoints / nextLevelSPWillbe) * 100;
38
+
39
+ return (
40
+ <>
41
+ <ProgressTitle>
42
+ <TitleName>{skillName}</TitleName>
43
+ <ValueDisplay>lv {level}</ValueDisplay>
44
+ </ProgressTitle>
45
+ <ProgressBody>
46
+ <ProgressIconContainer>
47
+ {atlasIMG && atlasJSON ? (
48
+ <SpriteContainer>
49
+ <ErrorBoundary>
50
+ <SpriteFromAtlas
51
+ atlasIMG={atlasIMG}
52
+ atlasJSON={atlasJSON}
53
+ spriteKey={texturePath}
54
+ imgScale={1}
55
+ grayScale
56
+ opacity={0.5}
57
+ />
58
+ </ErrorBoundary>
59
+ </SpriteContainer>
60
+ ) : (
61
+ <></>
62
+ )}
63
+ </ProgressIconContainer>
64
+
65
+ <ProgressBarContainer>
66
+ <SimpleProgressBar value={ratio} bgColor={bgColor} />
67
+ </ProgressBarContainer>
68
+ </ProgressBody>
69
+ {showSkillPoints && (
70
+ <SkillDisplayContainer>
71
+ <SkillPointsDisplay>
72
+ {skillPoints}/{nextLevelSPWillbe}
73
+ </SkillPointsDisplay>
74
+ </SkillDisplayContainer>
75
+ )}
76
+ </>
77
+ );
78
+ };
79
+
80
+ const ProgressBarContainer = styled.div`
81
+ position: relative;
82
+ top: 8px;
83
+ width: 100%;
84
+ height: auto;
85
+ `;
86
+
87
+ const SpriteContainer = styled.div`
88
+ position: relative;
89
+ top: -3px;
90
+ left: 0;
91
+ `;
92
+
93
+ const SkillDisplayContainer = styled.div`
94
+ margin: 0 auto;
95
+
96
+ p {
97
+ margin: 0;
98
+ }
99
+ `;
100
+
101
+ const SkillPointsDisplay = styled.p`
102
+ font-size: 0.6rem !important;
103
+ font-weight: bold;
104
+ text-align: center;
105
+ `;
106
+
107
+ const TitleName = styled.span`
108
+ margin-left: 5px;
109
+ `;
110
+
111
+ const ValueDisplay = styled.span``;
112
+
113
+ const ProgressIconContainer = styled.div`
114
+ display: flex;
115
+ justify-content: center;
116
+ align-items: center;
117
+ `;
118
+
119
+ const ProgressBody = styled.div`
120
+ display: flex;
121
+ flex-direction: row;
122
+ width: 100%;
123
+ `;
124
+
125
+ const ProgressTitle = styled.div`
126
+ width: 100%;
127
+ display: flex;
128
+ flex-direction: row;
129
+ justify-content: space-between;
130
+ span {
131
+ font-size: 0.6rem;
132
+ }
133
+ `;
@@ -1,198 +1,200 @@
1
- import { ISkill, ISkillDetails } from '@rpg-engine/shared';
2
- import React from 'react';
3
- import styled from 'styled-components';
4
- import { uiColors } from '../constants/uiColors';
5
- import { DraggableContainer } from './DraggableContainer';
6
- import { SkillProgressBar } from './SkillProgressBar';
7
-
8
- export interface ISkillContainerProps {
9
- skill: ISkill;
10
- onCloseButton: () => void;
11
- atlasJSON: any;
12
- atlasIMG: any;
13
- }
14
-
15
- const skillProps = {
16
- attributes: {
17
- color: uiColors.purple,
18
- values: {
19
- stamina: 'spell-icons/regenerate.png',
20
- magic: 'spell-icons/fireball.png',
21
- magicResistance: 'spell-icons/freeze.png',
22
- strength: 'spell-icons/enchanted-blow.png',
23
- resistance: 'spell-icons/magic-shield.png',
24
- dexterity: 'spell-icons/haste.png',
25
- },
26
- },
27
- combat: {
28
- color: uiColors.cardinal,
29
- values: {
30
- first: 'gloves/leather-gloves.png',
31
- club: 'maces/club.png',
32
- sword: 'swords/double-edged-sword.png',
33
- axe: 'axes/double-axe.png',
34
- distance: 'ranged-weapons/horse-bow.png',
35
- shielding: 'shields/studded-shield.png',
36
- dagger: 'daggers/dagger.png',
37
- },
38
- },
39
- crafting: {
40
- color: uiColors.blue,
41
- values: {
42
- fishing: 'foods/fish.png',
43
- mining: 'crafting-resources/iron-ingot.png',
44
- lumberjacking: 'crafting-resources/greater-wooden-log.png',
45
- cooking: 'foods/chickens-meat.png',
46
- alchemy: 'potions/greater-mana-potion.png',
47
- },
48
- },
49
- };
50
-
51
- interface SkillMap {
52
- [key: string]: string;
53
- }
54
-
55
- const skillNameMap: SkillMap = {
56
- stamina: 'Stamina',
57
- magic: 'Magic',
58
- magicResistance: 'Magic Resistance',
59
- strength: 'Strength',
60
- resistance: 'Resistance',
61
- dexterity: 'Dexterity',
62
- first: 'Fist',
63
- club: 'Club',
64
- sword: 'Sword',
65
- axe: 'Axe',
66
- distance: 'Distance',
67
- shielding: 'Shielding',
68
- dagger: 'Dagger',
69
- fishing: 'Fishing',
70
- mining: 'Mining',
71
- lumberjacking: 'Lumberjacking',
72
- cooking: 'Cooking',
73
- alchemy: 'Alchemy',
74
- };
75
-
76
- export const SkillsContainer: React.FC<ISkillContainerProps> = ({
77
- onCloseButton,
78
- skill,
79
- atlasIMG,
80
- atlasJSON,
81
- }) => {
82
- const onRenderSkillCategory = (
83
- category: 'attributes' | 'combat' | 'crafting'
84
- ) => {
85
- const skillCategory = skillProps[category];
86
-
87
- const skillCategoryColor = skillCategory.color;
88
-
89
- const output = [];
90
-
91
- for (const [key, value] of Object.entries(skillCategory.values)) {
92
- //@ts-ignore
93
- const skillDetails = (skill[key] as unknown) as ISkillDetails;
94
-
95
- output.push(
96
- <SkillProgressBar
97
- key={key}
98
- skillName={skillNameMap[key]}
99
- bgColor={skillCategoryColor}
100
- level={skillDetails.level || 0}
101
- skillPoints={Math.round(skillDetails.skillPoints) || 0}
102
- skillPointsToNextLevel={
103
- Math.round(skillDetails.skillPointsToNextLevel) || 0
104
- }
105
- texturePath={value}
106
- atlasIMG={atlasIMG}
107
- atlasJSON={atlasJSON}
108
- />
109
- );
110
- }
111
-
112
- return output;
113
- };
114
-
115
- return (
116
- <SkillsDraggableContainer title="Skills" cancelDrag="#skillsDiv">
117
- {onCloseButton && (
118
- <CloseButton onPointerDown={onCloseButton}>X</CloseButton>
119
- )}
120
- <SkillsContainerDiv id="skillsDiv">
121
- <SkillSplitDiv>
122
- <p>General</p>
123
- <hr className="golden" />
124
-
125
- <SkillProgressBar
126
- skillName={'Level'}
127
- bgColor={uiColors.navyBlue}
128
- level={Math.round(skill.level) || 0}
129
- skillPoints={Math.round(skill.experience) || 0}
130
- skillPointsToNextLevel={Math.round(skill.xpToNextLevel) || 0}
131
- texturePath={'swords/broad-sword.png'}
132
- atlasIMG={atlasIMG}
133
- atlasJSON={atlasJSON}
134
- />
135
-
136
- <p>Combat Skills</p>
137
- <hr className="golden" />
138
- </SkillSplitDiv>
139
-
140
- {onRenderSkillCategory('combat')}
141
-
142
- <SkillSplitDiv>
143
- <p>Crafting Skills</p>
144
- <hr className="golden" />
145
- </SkillSplitDiv>
146
-
147
- {onRenderSkillCategory('crafting')}
148
-
149
- <SkillSplitDiv>
150
- <p>Basic Attributes</p>
151
- <hr className="golden" />
152
- </SkillSplitDiv>
153
-
154
- {onRenderSkillCategory('attributes')}
155
- </SkillsContainerDiv>
156
- </SkillsDraggableContainer>
157
- );
158
- };
159
-
160
- const SkillsDraggableContainer = styled(DraggableContainer)`
161
- border: 1px solid black;
162
- width: 400px;
163
- height: 90%;
164
- .DraggableContainer__TitleContainer-sc-184mpyl-2 {
165
- width: auto;
166
- height: auto;
167
- }
168
- `;
169
-
170
- const SkillsContainerDiv = styled.div`
171
- width: 100%;
172
- -webkit-overflow-y: scroll;
173
- overflow-y: scroll;
174
- height: 90%;
175
- padding-right: 10px;
176
- `;
177
-
178
- const SkillSplitDiv = styled.div`
179
- width: 100%;
180
- font-size: 11px;
181
- hr {
182
- margin: 0;
183
- margin-bottom: 1rem;
184
- padding: 0px;
185
- }
186
- p {
187
- margin-bottom: 0px;
188
- }
189
- `;
190
-
191
- const CloseButton = styled.div`
192
- position: absolute;
193
- top: 2px;
194
- right: 2px;
195
- color: white;
196
- z-index: 22;
197
- font-size: 1.1rem;
198
- `;
1
+ import { ISkill, ISkillDetails } from '@rpg-engine/shared';
2
+ import React from 'react';
3
+ import styled from 'styled-components';
4
+ import { uiColors } from '../constants/uiColors';
5
+ import { DraggableContainer } from './DraggableContainer';
6
+ import { SkillProgressBar } from './SkillProgressBar';
7
+
8
+ export interface ISkillContainerProps {
9
+ skill: ISkill;
10
+ onCloseButton: () => void;
11
+ atlasJSON: any;
12
+ atlasIMG: any;
13
+ }
14
+
15
+ const skillProps = {
16
+ attributes: {
17
+ color: uiColors.purple,
18
+ values: {
19
+ stamina: 'spell-icons/regenerate.png',
20
+ magic: 'spell-icons/fireball.png',
21
+ magicResistance: 'spell-icons/freeze.png',
22
+ strength: 'spell-icons/enchanted-blow.png',
23
+ resistance: 'spell-icons/magic-shield.png',
24
+ dexterity: 'spell-icons/haste.png',
25
+ },
26
+ },
27
+ combat: {
28
+ color: uiColors.cardinal,
29
+ values: {
30
+ first: 'gloves/leather-gloves.png',
31
+ club: 'maces/club.png',
32
+ sword: 'swords/double-edged-sword.png',
33
+ axe: 'axes/double-axe.png',
34
+ distance: 'ranged-weapons/horse-bow.png',
35
+ shielding: 'shields/studded-shield.png',
36
+ dagger: 'daggers/dagger.png',
37
+ },
38
+ },
39
+ crafting: {
40
+ color: uiColors.blue,
41
+ values: {
42
+ fishing: 'foods/fish.png',
43
+ mining: 'crafting-resources/iron-ingot.png',
44
+ lumberjacking: 'crafting-resources/greater-wooden-log.png',
45
+ blacksmithing: 'hammers/hammer.png',
46
+ cooking: 'foods/chickens-meat.png',
47
+ alchemy: 'potions/greater-mana-potion.png',
48
+ },
49
+ },
50
+ };
51
+
52
+ interface SkillMap {
53
+ [key: string]: string;
54
+ }
55
+
56
+ const skillNameMap: SkillMap = {
57
+ stamina: 'Stamina',
58
+ magic: 'Magic',
59
+ magicResistance: 'Magic Resistance',
60
+ strength: 'Strength',
61
+ resistance: 'Resistance',
62
+ dexterity: 'Dexterity',
63
+ first: 'Fist',
64
+ club: 'Club',
65
+ sword: 'Sword',
66
+ axe: 'Axe',
67
+ distance: 'Distance',
68
+ shielding: 'Shielding',
69
+ dagger: 'Dagger',
70
+ fishing: 'Fishing',
71
+ mining: 'Mining',
72
+ lumberjacking: 'Lumberjacking',
73
+ blacksmithing: 'Blacksmithing',
74
+ cooking: 'Cooking',
75
+ alchemy: 'Alchemy',
76
+ };
77
+
78
+ export const SkillsContainer: React.FC<ISkillContainerProps> = ({
79
+ onCloseButton,
80
+ skill,
81
+ atlasIMG,
82
+ atlasJSON,
83
+ }) => {
84
+ const onRenderSkillCategory = (
85
+ category: 'attributes' | 'combat' | 'crafting'
86
+ ) => {
87
+ const skillCategory = skillProps[category];
88
+
89
+ const skillCategoryColor = skillCategory.color;
90
+
91
+ const output = [];
92
+
93
+ for (const [key, value] of Object.entries(skillCategory.values)) {
94
+ //@ts-ignore
95
+ const skillDetails = (skill[key] as unknown) as ISkillDetails;
96
+
97
+ output.push(
98
+ <SkillProgressBar
99
+ key={key}
100
+ skillName={skillNameMap[key]}
101
+ bgColor={skillCategoryColor}
102
+ level={skillDetails.level || 0}
103
+ skillPoints={Math.round(skillDetails.skillPoints) || 0}
104
+ skillPointsToNextLevel={
105
+ Math.round(skillDetails.skillPointsToNextLevel) || 0
106
+ }
107
+ texturePath={value}
108
+ atlasIMG={atlasIMG}
109
+ atlasJSON={atlasJSON}
110
+ />
111
+ );
112
+ }
113
+
114
+ return output;
115
+ };
116
+
117
+ return (
118
+ <SkillsDraggableContainer title="Skills" cancelDrag="#skillsDiv">
119
+ {onCloseButton && (
120
+ <CloseButton onPointerDown={onCloseButton}>X</CloseButton>
121
+ )}
122
+ <SkillsContainerDiv id="skillsDiv">
123
+ <SkillSplitDiv>
124
+ <p>General</p>
125
+ <hr className="golden" />
126
+
127
+ <SkillProgressBar
128
+ skillName={'Level'}
129
+ bgColor={uiColors.navyBlue}
130
+ level={Math.round(skill.level) || 0}
131
+ skillPoints={Math.round(skill.experience) || 0}
132
+ skillPointsToNextLevel={Math.round(skill.xpToNextLevel) || 0}
133
+ texturePath={'swords/broad-sword.png'}
134
+ atlasIMG={atlasIMG}
135
+ atlasJSON={atlasJSON}
136
+ />
137
+
138
+ <p>Combat Skills</p>
139
+ <hr className="golden" />
140
+ </SkillSplitDiv>
141
+
142
+ {onRenderSkillCategory('combat')}
143
+
144
+ <SkillSplitDiv>
145
+ <p>Crafting Skills</p>
146
+ <hr className="golden" />
147
+ </SkillSplitDiv>
148
+
149
+ {onRenderSkillCategory('crafting')}
150
+
151
+ <SkillSplitDiv>
152
+ <p>Basic Attributes</p>
153
+ <hr className="golden" />
154
+ </SkillSplitDiv>
155
+
156
+ {onRenderSkillCategory('attributes')}
157
+ </SkillsContainerDiv>
158
+ </SkillsDraggableContainer>
159
+ );
160
+ };
161
+
162
+ const SkillsDraggableContainer = styled(DraggableContainer)`
163
+ border: 1px solid black;
164
+ width: 400px;
165
+ height: 90%;
166
+ .DraggableContainer__TitleContainer-sc-184mpyl-2 {
167
+ width: auto;
168
+ height: auto;
169
+ }
170
+ `;
171
+
172
+ const SkillsContainerDiv = styled.div`
173
+ width: 100%;
174
+ -webkit-overflow-y: scroll;
175
+ overflow-y: scroll;
176
+ height: 90%;
177
+ padding-right: 10px;
178
+ `;
179
+
180
+ const SkillSplitDiv = styled.div`
181
+ width: 100%;
182
+ font-size: 11px;
183
+ hr {
184
+ margin: 0;
185
+ margin-bottom: 1rem;
186
+ padding: 0px;
187
+ }
188
+ p {
189
+ margin-bottom: 0px;
190
+ }
191
+ `;
192
+
193
+ const CloseButton = styled.div`
194
+ position: absolute;
195
+ top: 2px;
196
+ right: 2px;
197
+ color: white;
198
+ z-index: 22;
199
+ font-size: 1.1rem;
200
+ `;