1
1
import { useEuiTheme } from '@elastic/eui' ;
2
2
import type { ReactElement , ReactNode } from 'react' ;
3
- import { useMemo , useState } from 'react' ;
3
+ import { useContext , useMemo , useState } from 'react' ;
4
4
import type { GameEvent } from '../../../common/game/types.js' ;
5
5
import { GameEventType } from '../../../common/game/types.js' ;
6
+ import { GameContext } from '../../context/game.jsx' ;
6
7
import { useSubscribe } from '../../hooks/pubsub.jsx' ;
7
8
8
9
export const GameStatusBars : React . FC = ( ) : ReactNode => {
9
10
const { euiTheme } = useEuiTheme ( ) ;
10
11
12
+ const { isConnected } = useContext ( GameContext ) ;
13
+
11
14
const [ health , setHealth ] = useState < number > ( 100 ) ;
12
15
const [ mana , setMana ] = useState < number > ( 100 ) ;
13
16
const [ concentration , setConcentration ] = useState < number > ( 100 ) ;
@@ -43,9 +46,10 @@ export const GameStatusBars: React.FC = (): ReactNode => {
43
46
value = { health }
44
47
fillColor = "#750E21"
45
48
textColor = { euiTheme . colors . text }
49
+ isConnected = { isConnected }
46
50
/>
47
51
) ;
48
- } , [ health , euiTheme ] ) ;
52
+ } , [ health , euiTheme , isConnected ] ) ;
49
53
50
54
const manaStatusBar = useMemo ( ( ) : ReactElement => {
51
55
return (
@@ -54,9 +58,10 @@ export const GameStatusBars: React.FC = (): ReactNode => {
54
58
value = { mana }
55
59
fillColor = "#4477CE"
56
60
textColor = { euiTheme . colors . text }
61
+ isConnected = { isConnected }
57
62
/>
58
63
) ;
59
- } , [ mana , euiTheme ] ) ;
64
+ } , [ mana , euiTheme , isConnected ] ) ;
60
65
61
66
const concentrationStatusBar = useMemo ( ( ) : ReactElement => {
62
67
return (
@@ -65,9 +70,10 @@ export const GameStatusBars: React.FC = (): ReactNode => {
65
70
value = { concentration }
66
71
fillColor = "#19376D"
67
72
textColor = { euiTheme . colors . text }
73
+ isConnected = { isConnected }
68
74
/>
69
75
) ;
70
- } , [ concentration , euiTheme ] ) ;
76
+ } , [ concentration , euiTheme , isConnected ] ) ;
71
77
72
78
const staminaStatusBar = useMemo ( ( ) : ReactElement => {
73
79
return (
@@ -76,9 +82,10 @@ export const GameStatusBars: React.FC = (): ReactNode => {
76
82
value = { stamina }
77
83
fillColor = "#006A67"
78
84
textColor = { euiTheme . colors . text }
85
+ isConnected = { isConnected }
79
86
/>
80
87
) ;
81
- } , [ stamina , euiTheme ] ) ;
88
+ } , [ stamina , euiTheme , isConnected ] ) ;
82
89
83
90
const spiritStatusBar = useMemo ( ( ) : ReactElement => {
84
91
return (
@@ -87,9 +94,10 @@ export const GameStatusBars: React.FC = (): ReactNode => {
87
94
value = { spirit }
88
95
fillColor = "#6A1E55"
89
96
textColor = { euiTheme . colors . text }
97
+ isConnected = { isConnected }
90
98
/>
91
99
) ;
92
- } , [ spirit , euiTheme ] ) ;
100
+ } , [ spirit , euiTheme , isConnected ] ) ;
93
101
94
102
const statusBars = useMemo ( ( ) : ReactElement => {
95
103
return (
@@ -127,15 +135,18 @@ interface GameStatusBarProps {
127
135
value : number ;
128
136
fillColor : string ;
129
137
textColor : string ;
138
+ isConnected : boolean ;
130
139
}
131
140
132
141
const GameStatusBar : React . FC < GameStatusBarProps > = (
133
142
props : GameStatusBarProps
134
143
) : ReactNode => {
135
- const { title, value, fillColor , textColor } = props ;
144
+ const { title, value, textColor , isConnected } = props ;
136
145
137
146
const { euiTheme } = useEuiTheme ( ) ;
138
147
148
+ const fillColor = isConnected ? props . fillColor : euiTheme . colors . disabled ;
149
+
139
150
return (
140
151
< div
141
152
css = { {
0 commit comments