@rpg-engine/long-bow 0.8.80 → 0.8.82
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.
- package/dist/components/SkillProgressBar.d.ts +3 -0
- package/dist/components/SkillsContainer.d.ts +2 -1
- package/dist/long-bow.cjs.development.js +55 -24
- package/dist/long-bow.cjs.development.js.map +1 -1
- package/dist/long-bow.cjs.production.min.js +1 -1
- package/dist/long-bow.cjs.production.min.js.map +1 -1
- package/dist/long-bow.esm.js +56 -25
- package/dist/long-bow.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/components/SkillProgressBar.tsx +19 -3
- package/src/components/SkillsContainer.tsx +17 -3
- package/src/mocks/skills.mocks.ts +21 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rpg-engine/long-bow",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.82",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"dependencies": {
|
|
85
85
|
"@capacitor/core": "^6.1.0",
|
|
86
86
|
"@rollup/plugin-image": "^2.1.1",
|
|
87
|
-
"@rpg-engine/shared": "^0.10.
|
|
87
|
+
"@rpg-engine/shared": "^0.10.32",
|
|
88
88
|
"dayjs": "^1.11.2",
|
|
89
89
|
"font-awesome": "^4.7.0",
|
|
90
90
|
"fs-extra": "^10.1.0",
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
getSPForLevel,
|
|
3
|
+
getSPForLevelExponential,
|
|
4
|
+
getSkillConstants,
|
|
5
|
+
CharacterClass,
|
|
6
|
+
} from '@rpg-engine/shared';
|
|
7
|
+
import React, { useMemo } from 'react';
|
|
3
8
|
import styled from 'styled-components';
|
|
4
9
|
import { uiColors } from '../constants/uiColors';
|
|
5
10
|
import { ErrorBoundary } from './Item/Inventory/ErrorBoundary';
|
|
@@ -9,6 +14,8 @@ import { Tooltip } from './Tooltip/Tooltip';
|
|
|
9
14
|
|
|
10
15
|
export interface ISkillProgressBarProps {
|
|
11
16
|
skillName: string;
|
|
17
|
+
skillKey?: string;
|
|
18
|
+
characterClass?: CharacterClass;
|
|
12
19
|
bgColor: string;
|
|
13
20
|
level: number;
|
|
14
21
|
skillPoints: number;
|
|
@@ -23,6 +30,8 @@ export interface ISkillProgressBarProps {
|
|
|
23
30
|
export const SkillProgressBar: React.FC<ISkillProgressBarProps> = ({
|
|
24
31
|
bgColor,
|
|
25
32
|
skillName,
|
|
33
|
+
skillKey,
|
|
34
|
+
characterClass,
|
|
26
35
|
level,
|
|
27
36
|
skillPoints: currentSkillPoints,
|
|
28
37
|
skillPointsToNextLevel,
|
|
@@ -34,7 +43,14 @@ export const SkillProgressBar: React.FC<ISkillProgressBarProps> = ({
|
|
|
34
43
|
buffAndDebuff,
|
|
35
44
|
}) => {
|
|
36
45
|
// Skill points needed to start the current level
|
|
37
|
-
const baseSkillPoints =
|
|
46
|
+
const baseSkillPoints = useMemo(() => {
|
|
47
|
+
if (skillKey && characterClass) {
|
|
48
|
+
const { A, b, c } = getSkillConstants(skillKey, characterClass);
|
|
49
|
+
return getSPForLevelExponential(level, A, b, c);
|
|
50
|
+
}
|
|
51
|
+
// Fallback to old formula for backwards compatibility
|
|
52
|
+
return getSPForLevel(level);
|
|
53
|
+
}, [level, skillKey, characterClass]);
|
|
38
54
|
const calculateProgress = (): number => {
|
|
39
55
|
const totalPointsForLevelUp = Math.max(
|
|
40
56
|
1,
|
|
@@ -2,6 +2,9 @@ import {
|
|
|
2
2
|
ISkill,
|
|
3
3
|
ISkillDetails,
|
|
4
4
|
getSPForLevel,
|
|
5
|
+
getSPForLevelExponential,
|
|
6
|
+
getSkillConstants,
|
|
7
|
+
CharacterClass,
|
|
5
8
|
getXPForLevel,
|
|
6
9
|
} from '@rpg-engine/shared';
|
|
7
10
|
import React from 'react';
|
|
@@ -12,6 +15,7 @@ import { SkillProgressBar } from './SkillProgressBar';
|
|
|
12
15
|
|
|
13
16
|
export interface ISkillContainerProps {
|
|
14
17
|
skill: ISkill;
|
|
18
|
+
characterClass?: CharacterClass;
|
|
15
19
|
onCloseButton: () => void;
|
|
16
20
|
atlasJSON: any;
|
|
17
21
|
atlasIMG: any;
|
|
@@ -86,6 +90,7 @@ const skillNameMap: SkillMap = {
|
|
|
86
90
|
export const SkillsContainer: React.FC<ISkillContainerProps> = ({
|
|
87
91
|
onCloseButton,
|
|
88
92
|
skill,
|
|
93
|
+
characterClass,
|
|
89
94
|
atlasIMG,
|
|
90
95
|
atlasJSON,
|
|
91
96
|
scale,
|
|
@@ -110,16 +115,25 @@ export const SkillsContainer: React.FC<ISkillContainerProps> = ({
|
|
|
110
115
|
continue;
|
|
111
116
|
}
|
|
112
117
|
|
|
118
|
+
// Calculate skillPointsToNextLevel using exponential formula if characterClass available
|
|
119
|
+
const calcSkillPointsToNextLevel = (): number => {
|
|
120
|
+
if (characterClass) {
|
|
121
|
+
const { A, b, c } = getSkillConstants(key, characterClass);
|
|
122
|
+
return Math.round(getSPForLevelExponential(skillDetails.level + 1, A, b, c));
|
|
123
|
+
}
|
|
124
|
+
return Math.round(getSPForLevel(skillDetails.level + 1));
|
|
125
|
+
};
|
|
126
|
+
|
|
113
127
|
output.push(
|
|
114
128
|
<SkillProgressBar
|
|
115
129
|
key={key}
|
|
116
130
|
skillName={skillNameMap[key]}
|
|
131
|
+
skillKey={key}
|
|
132
|
+
characterClass={characterClass}
|
|
117
133
|
bgColor={skillCategoryColor}
|
|
118
134
|
level={skillDetails.level || 0}
|
|
119
135
|
skillPoints={Math.round(skillDetails.skillPoints) || 0}
|
|
120
|
-
skillPointsToNextLevel={
|
|
121
|
-
Math.round(getSPForLevel(skillDetails.level + 1)) || 0
|
|
122
|
-
}
|
|
136
|
+
skillPointsToNextLevel={calcSkillPointsToNextLevel()}
|
|
123
137
|
texturePath={value}
|
|
124
138
|
atlasIMG={atlasIMG}
|
|
125
139
|
atlasJSON={atlasJSON}
|
|
@@ -2,16 +2,28 @@ import {
|
|
|
2
2
|
ISkill,
|
|
3
3
|
SkillType,
|
|
4
4
|
getSPForLevel,
|
|
5
|
+
getSPForLevelExponential,
|
|
6
|
+
getSkillConstants,
|
|
7
|
+
CharacterClass,
|
|
5
8
|
getXPForLevel,
|
|
6
9
|
} from '@rpg-engine/shared';
|
|
7
10
|
|
|
11
|
+
// Use Warrior as default character class for mock data
|
|
12
|
+
const mockCharacterClass = CharacterClass.Warrior;
|
|
13
|
+
|
|
14
|
+
// Helper function to get SP for next level using exponential formula
|
|
15
|
+
const getMockSPForNextLevel = (skillKey: string, level: number): number => {
|
|
16
|
+
const { A, b, c } = getSkillConstants(skillKey, mockCharacterClass);
|
|
17
|
+
return Math.round(getSPForLevelExponential(level, A, b, c));
|
|
18
|
+
};
|
|
19
|
+
|
|
8
20
|
export const skillMock = {
|
|
9
21
|
_id: '62aebda8785a9f0089a4f757',
|
|
10
22
|
stamina: {
|
|
11
23
|
type: SkillType.BasicAttributes,
|
|
12
24
|
level: 1,
|
|
13
25
|
skillPoints: 10,
|
|
14
|
-
skillPointsToNextLevel:
|
|
26
|
+
skillPointsToNextLevel: getMockSPForNextLevel('stamina', 2),
|
|
15
27
|
},
|
|
16
28
|
magic: {
|
|
17
29
|
type: SkillType.BasicAttributes,
|
|
@@ -43,49 +55,49 @@ export const skillMock = {
|
|
|
43
55
|
type: SkillType.BasicAttributes,
|
|
44
56
|
level: 2,
|
|
45
57
|
skillPoints: 70,
|
|
46
|
-
skillPointsToNextLevel:
|
|
58
|
+
skillPointsToNextLevel: getMockSPForNextLevel('dexterity', 3),
|
|
47
59
|
},
|
|
48
60
|
first: {
|
|
49
61
|
type: SkillType.Combat,
|
|
50
62
|
level: 1,
|
|
51
63
|
skillPoints: 22,
|
|
52
|
-
skillPointsToNextLevel:
|
|
64
|
+
skillPointsToNextLevel: getMockSPForNextLevel('first', 2),
|
|
53
65
|
},
|
|
54
66
|
club: {
|
|
55
67
|
type: SkillType.Combat,
|
|
56
68
|
level: 2,
|
|
57
69
|
skillPoints: 22,
|
|
58
|
-
skillPointsToNextLevel:
|
|
70
|
+
skillPointsToNextLevel: getMockSPForNextLevel('club', 3),
|
|
59
71
|
},
|
|
60
72
|
sword: {
|
|
61
73
|
type: SkillType.Combat,
|
|
62
74
|
level: 4,
|
|
63
75
|
skillPoints: 273,
|
|
64
|
-
skillPointsToNextLevel:
|
|
76
|
+
skillPointsToNextLevel: getMockSPForNextLevel('sword', 5),
|
|
65
77
|
},
|
|
66
78
|
dagger: {
|
|
67
79
|
type: SkillType.Combat,
|
|
68
80
|
level: 4,
|
|
69
81
|
skillPoints: 300,
|
|
70
|
-
skillPointsToNextLevel:
|
|
82
|
+
skillPointsToNextLevel: getMockSPForNextLevel('dagger', 5),
|
|
71
83
|
},
|
|
72
84
|
axe: {
|
|
73
85
|
type: SkillType.Combat,
|
|
74
86
|
level: 5,
|
|
75
87
|
skillPoints: 400,
|
|
76
|
-
skillPointsToNextLevel:
|
|
88
|
+
skillPointsToNextLevel: getMockSPForNextLevel('axe', 6),
|
|
77
89
|
},
|
|
78
90
|
distance: {
|
|
79
91
|
type: SkillType.Combat,
|
|
80
92
|
level: 4,
|
|
81
93
|
skillPoints: 76,
|
|
82
|
-
skillPointsToNextLevel:
|
|
94
|
+
skillPointsToNextLevel: getMockSPForNextLevel('distance', 5),
|
|
83
95
|
},
|
|
84
96
|
shielding: {
|
|
85
97
|
type: SkillType.Combat,
|
|
86
98
|
level: 3,
|
|
87
99
|
skillPoints: 120,
|
|
88
|
-
skillPointsToNextLevel:
|
|
100
|
+
skillPointsToNextLevel: getMockSPForNextLevel('shielding', 4),
|
|
89
101
|
},
|
|
90
102
|
fishing: {
|
|
91
103
|
type: SkillType.Gathering,
|