@rpg-engine/long-bow 0.3.93 → 0.3.95

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