@gamepark/react-game 7.7.6 → 7.7.8
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/README.md +41 -0
- package/dist/components/material/sound/MaterialGameSounds.js +2 -0
- package/dist/components/material/sound/MaterialGameSounds.js.map +1 -1
- package/dist/components/material/sound/useYourTurnSound.d.ts +0 -2
- package/dist/components/material/sound/useYourTurnSound.js +3 -6
- package/dist/components/material/sound/useYourTurnSound.js.map +1 -1
- package/package.json +81 -80
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# @gamepark/react-game
|
|
2
|
+
|
|
3
|
+
React components & tools to create a Board Game user interface for Game Park.
|
|
4
|
+
|
|
5
|
+
## Sounds deployment
|
|
6
|
+
|
|
7
|
+
Default sounds (e.g. turn notification) are hosted on `sounds.game-park.com` (Clever Cloud Cellar).
|
|
8
|
+
|
|
9
|
+
The `sounds/` directory at the root of this project contains the sound files to deploy.
|
|
10
|
+
|
|
11
|
+
### rclone configuration
|
|
12
|
+
|
|
13
|
+
Install [rclone](https://rclone.org/) then configure a remote:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
rclone config
|
|
17
|
+
> n
|
|
18
|
+
name> sounds
|
|
19
|
+
Storage> s3
|
|
20
|
+
provider> Other
|
|
21
|
+
env_auth> false
|
|
22
|
+
access_key_id> [your key - do not commit!]
|
|
23
|
+
secret_access_key> [your secret - do not commit!]
|
|
24
|
+
region>
|
|
25
|
+
endpoint> cellar-c2.services.clever-cloud.com
|
|
26
|
+
location_constraint>
|
|
27
|
+
acl> public-read
|
|
28
|
+
Edit advanced config> n
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Deploy sounds
|
|
32
|
+
|
|
33
|
+
Sounds are automatically synced during `yarn publish`. You can also sync manually:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
yarn sync-sounds
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### CORS
|
|
40
|
+
|
|
41
|
+
The Cellar bucket must have CORS configured to allow `fetch()` from game origins (`Access-Control-Allow-Origin: *`).
|
|
@@ -7,6 +7,7 @@ import { gameContext } from '../../GameProvider';
|
|
|
7
7
|
import { AudioLoader } from './AudioLoader';
|
|
8
8
|
import { MaterialSoundLoader } from './MaterialSoundLoader';
|
|
9
9
|
import { ensureMaterialSoundConfig } from './sound.utils';
|
|
10
|
+
import { useYourTurnSound } from './useYourTurnSound';
|
|
10
11
|
let ambianceLoadPromise;
|
|
11
12
|
const getAmbianceLoadPromise = (audioLoader, sound) => {
|
|
12
13
|
if (!ambianceLoadPromise) {
|
|
@@ -23,6 +24,7 @@ export const MaterialGameSounds = ({ onSoundsLoad, ambiance }) => {
|
|
|
23
24
|
const material = useContext(gameContext).material;
|
|
24
25
|
const animation = useAnimation();
|
|
25
26
|
const muted = useGameSelector((state) => state.soundsMuted);
|
|
27
|
+
useYourTurnSound(audioLoader);
|
|
26
28
|
useEffect(() => {
|
|
27
29
|
if (!animation)
|
|
28
30
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaterialGameSounds.js","sourceRoot":"","sources":["../../../../src/components/material/sound/MaterialGameSounds.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAa,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAgB,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAM,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACjF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"MaterialGameSounds.js","sourceRoot":"","sources":["../../../../src/components/material/sound/MaterialGameSounds.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { store } from '@gamepark/react-client';
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { usePlayerId, useRules } from '../../../hooks';
|
|
4
|
-
|
|
5
|
-
export { bellSoundDataUri };
|
|
4
|
+
const bellSoundUrl = 'https://sounds.game-park.com/bell.mp3';
|
|
6
5
|
export const useYourTurnSound = (audioLoader) => {
|
|
7
6
|
const rules = useRules();
|
|
8
7
|
const playerId = usePlayerId();
|
|
9
8
|
const [isActive, setIsActive] = useState(false);
|
|
10
9
|
const initializedRef = useRef(false);
|
|
11
10
|
useEffect(() => {
|
|
12
|
-
audioLoader.load([
|
|
11
|
+
audioLoader.load([bellSoundUrl]);
|
|
13
12
|
}, [audioLoader]);
|
|
14
13
|
useEffect(() => {
|
|
15
14
|
if (!rules || playerId === undefined)
|
|
@@ -23,12 +22,10 @@ export const useYourTurnSound = (audioLoader) => {
|
|
|
23
22
|
}
|
|
24
23
|
if (!isActive)
|
|
25
24
|
return;
|
|
26
|
-
if (document.hasFocus())
|
|
27
|
-
return;
|
|
28
25
|
const { soundsMuted } = store.getState();
|
|
29
26
|
if (soundsMuted)
|
|
30
27
|
return;
|
|
31
|
-
audioLoader.play(
|
|
28
|
+
audioLoader.play(bellSoundUrl);
|
|
32
29
|
}, [isActive, audioLoader]);
|
|
33
30
|
};
|
|
34
31
|
//# sourceMappingURL=useYourTurnSound.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useYourTurnSound.js","sourceRoot":"","sources":["../../../../src/components/material/sound/useYourTurnSound.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"useYourTurnSound.js","sourceRoot":"","sources":["../../../../src/components/material/sound/useYourTurnSound.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGtD,MAAM,YAAY,GAAG,uCAAuC,CAAA;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAwB,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAG,QAAQ,EAAiB,CAAA;IACvC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;IAClC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAM;QAC5C,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC3C,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IAErB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC5B,cAAc,CAAC,OAAO,GAAG,IAAI,CAAA;YAC7B,OAAM;QACR,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QACxC,IAAI,WAAW;YAAE,OAAM;QACvB,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAChC,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAA;AAC7B,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,80 +1,81 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@gamepark/react-game",
|
|
3
|
-
"version": "7.7.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "React components & tools to create a Board Game user interface for Game Park",
|
|
6
|
-
"author": "Romain Fromi <romain@game-park.com> (https://game-park.com/)",
|
|
7
|
-
"license": "ISC",
|
|
8
|
-
"main": "dist/index.js",
|
|
9
|
-
"types": "dist/index.d.ts",
|
|
10
|
-
"files": [
|
|
11
|
-
"dist"
|
|
12
|
-
],
|
|
13
|
-
"publishConfig": {
|
|
14
|
-
"access": "public"
|
|
15
|
-
},
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "tsc",
|
|
18
|
-
"prepack": "yarn build",
|
|
19
|
-
"linkgp": "yarn link ../rules-api ../react-client -r && git update-index --skip-worktree package.json yarn.lock",
|
|
20
|
-
"unlinkgp": "git update-index --no-skip-worktree package.json yarn.lock && yarn unlink ../react-client ../rules-api",
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"@
|
|
26
|
-
"@
|
|
27
|
-
"@gamepark/
|
|
28
|
-
"@gamepark/
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"i18next-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"react-
|
|
39
|
-
"react-
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
47
|
-
"@fortawesome/
|
|
48
|
-
"@fortawesome/free-
|
|
49
|
-
"@fortawesome/
|
|
50
|
-
"@
|
|
51
|
-
"@
|
|
52
|
-
"@types/
|
|
53
|
-
"@types/
|
|
54
|
-
"@types/react
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"react
|
|
59
|
-
"react-
|
|
60
|
-
"react-
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"@
|
|
67
|
-
"@
|
|
68
|
-
"@fortawesome/
|
|
69
|
-
"@fortawesome/free-
|
|
70
|
-
"@fortawesome/
|
|
71
|
-
"@
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"react
|
|
76
|
-
"react-
|
|
77
|
-
"react-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@gamepark/react-game",
|
|
3
|
+
"version": "7.7.8",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "React components & tools to create a Board Game user interface for Game Park",
|
|
6
|
+
"author": "Romain Fromi <romain@game-park.com> (https://game-park.com/)",
|
|
7
|
+
"license": "ISC",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"prepack": "yarn build",
|
|
19
|
+
"linkgp": "yarn link ../rules-api ../react-client -r && git update-index --skip-worktree package.json yarn.lock",
|
|
20
|
+
"unlinkgp": "git update-index --no-skip-worktree package.json yarn.lock && yarn unlink ../react-client ../rules-api",
|
|
21
|
+
"sync-sounds": "rclone sync sounds sounds:sounds.game-park.com --progress --s3-acl=public-read",
|
|
22
|
+
"publish": "npm version ${0:-patch} && yarn npm publish && yarn sync-sounds && git push && git push --tags"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@datadog/browser-logs": "^6.28.1",
|
|
26
|
+
"@dnd-kit/modifiers": "^9.0.0",
|
|
27
|
+
"@gamepark/api-types": "^1.0.1",
|
|
28
|
+
"@gamepark/avataaars": "^3.0.0",
|
|
29
|
+
"@gamepark/react-client": "^7.6.4",
|
|
30
|
+
"dayjs": "^1.11.19",
|
|
31
|
+
"fscreen": "^1.2.0",
|
|
32
|
+
"i18next-http-backend": "^3.0.2",
|
|
33
|
+
"i18next-icu": "^2.4.3",
|
|
34
|
+
"immer": "^11.1.4",
|
|
35
|
+
"intl-messageformat": "^11.1.2",
|
|
36
|
+
"nosleep.js": "^0.12.0",
|
|
37
|
+
"o9n": "^2.1.1",
|
|
38
|
+
"react-infinite-scroll-component": "^6.1.1",
|
|
39
|
+
"react-merge-refs": "^3.0.2",
|
|
40
|
+
"react-zoom-pan-pinch": "^3.7.0",
|
|
41
|
+
"rxjs": "^7.8.2",
|
|
42
|
+
"use-long-press": "^3.3.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@dnd-kit/core": "^6.3.1",
|
|
46
|
+
"@emotion/react": "^11.14.0",
|
|
47
|
+
"@fortawesome/fontawesome-svg-core": "^7.2.0",
|
|
48
|
+
"@fortawesome/free-regular-svg-icons": "^7.2.0",
|
|
49
|
+
"@fortawesome/free-solid-svg-icons": "^7.2.0",
|
|
50
|
+
"@fortawesome/react-fontawesome": "^3.2.0",
|
|
51
|
+
"@gamepark/rules-api": "^7.6.1",
|
|
52
|
+
"@types/fscreen": "^1.0.4",
|
|
53
|
+
"@types/node": "^25.3.1",
|
|
54
|
+
"@types/react": "^19.2.14",
|
|
55
|
+
"@types/react-dom": "^19.2.3",
|
|
56
|
+
"es-toolkit": "^1.44.0",
|
|
57
|
+
"i18next": "^25.10.9",
|
|
58
|
+
"react": "^19.2.4",
|
|
59
|
+
"react-dom": "^19.2.4",
|
|
60
|
+
"react-i18next": "^16.5.4",
|
|
61
|
+
"react-redux": "^9.2.0",
|
|
62
|
+
"typescript": "^5.9.3",
|
|
63
|
+
"vitest": "^4.1.2"
|
|
64
|
+
},
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"@dnd-kit/core": "6.x",
|
|
67
|
+
"@emotion/react": "11.x",
|
|
68
|
+
"@fortawesome/fontawesome-svg-core": "7.x",
|
|
69
|
+
"@fortawesome/free-regular-svg-icons": "7.x",
|
|
70
|
+
"@fortawesome/free-solid-svg-icons": "7.x",
|
|
71
|
+
"@fortawesome/react-fontawesome": "3.x",
|
|
72
|
+
"@gamepark/rules-api": "7.x",
|
|
73
|
+
"es-toolkit": "1.x",
|
|
74
|
+
"i18next": "25.x",
|
|
75
|
+
"react": "19.x",
|
|
76
|
+
"react-dom": "19.x",
|
|
77
|
+
"react-i18next": "16.x",
|
|
78
|
+
"react-redux": "9.x"
|
|
79
|
+
},
|
|
80
|
+
"packageManager": "yarn@4.9.4"
|
|
81
|
+
}
|