@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpg-engine/long-bow",
3
- "version": "0.8.80",
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.30",
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 { getSPForLevel } from '@rpg-engine/shared';
2
- import React from 'react';
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 = getSPForLevel(level);
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: getSPForLevel(2),
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: getSPForLevel(3),
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: getSPForLevel(2),
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: getSPForLevel(3),
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: getSPForLevel(5),
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: getSPForLevel(5),
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: getSPForLevel(6),
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: getSPForLevel(5),
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: getSPForLevel(4),
100
+ skillPointsToNextLevel: getMockSPForNextLevel('shielding', 4),
89
101
  },
90
102
  fishing: {
91
103
  type: SkillType.Gathering,