diff --git a/src/App.js b/src/App.js
index f5da920..193b898 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,8 +1,14 @@
import React from 'react';
-import Panel from './components/Panel.js';
+
+import { Provider } from './components/EnterpriseContext';
+import Panel from './components/Panel';
function App() {
- return ( );
+ return (
+
+
+
+ );
}
export default App;
diff --git a/src/components/EnterpriseContext.js b/src/components/EnterpriseContext.js
new file mode 100644
index 0000000..ac4a1fb
--- /dev/null
+++ b/src/components/EnterpriseContext.js
@@ -0,0 +1,90 @@
+import React, { createContext, useState } from 'react';
+
+const EnterpriseContext = createContext();
+
+const EnterpriseProvider = ({ children }) => {
+ const [energyGauge, setEnergyGauge] = useState(0);
+ const [warpSpeed, setWarpSpeed] = useState(false);
+ const [weaponsLevel, setWeaponsLevel] = useState(0);
+ const [weaponsEnabled, setWeaponsEnabled] = useState(true);
+ const [shieldsOnline, setShieldsOnline] = useState(false);
+
+ const engageWarpSpeed = () => {
+ if (warpSpeed || shieldsOnline || weaponsEnabled || energyGauge > 2) return undefined;
+
+ setWarpSpeed(true);
+ setEnergyGauge((curretEnergyGauge) => curretEnergyGauge + 2);
+ };
+
+ const disengageWarpSpeed = () => {
+ if (!warpSpeed) return undefined;
+
+ setWarpSpeed(false);
+ setEnergyGauge((curretEnergyGauge) => curretEnergyGauge - 2);
+ };
+
+ const weaponsOffline = () => {
+ if (warpSpeed || !weaponsEnabled) return undefined;
+
+ setWeaponsEnabled(false);
+ setWeaponsLevel(0);
+ setEnergyGauge((curretEnergyGauge) => curretEnergyGauge - weaponsLevel);
+ };
+
+ const weaponsOnline = () => {
+ if (warpSpeed || weaponsEnabled) return undefined;
+
+ setWeaponsEnabled(true);
+ };
+
+ const increaseFirepower = () => {
+ if (warpSpeed || weaponsLevel === 3 || energyGauge === 4 || !weaponsEnabled)
+ return undefined;
+
+ setEnergyGauge((curretEnergyGauge) => curretEnergyGauge + 1);
+ setWeaponsLevel((currentWeaponsLevel) => currentWeaponsLevel + 1);
+ };
+
+ const decreaseFirepower = () => {
+ if (warpSpeed || weaponsLevel === 0 || energyGauge === 0 || !weaponsEnabled) return undefined;
+
+ setEnergyGauge((curretEnergyGauge) => curretEnergyGauge - 1);
+ setWeaponsLevel((currentWeaponsLevel) => currentWeaponsLevel - 1);
+ };
+
+ const raiseShields = () => {
+ if (warpSpeed || shieldsOnline || energyGauge > 2) return undefined;
+
+ setShieldsOnline(true);
+ setEnergyGauge((curretEnergyGauge) => curretEnergyGauge + 2);
+ };
+
+ const lowerShields = () => {
+ if (!shieldsOnline || energyGauge === 0) return undefined;
+
+ setEnergyGauge((curretEnergyGauge) => curretEnergyGauge - 2);
+ setShieldsOnline(false);
+ };
+
+ const context = {
+ energyGauge,
+ warpSpeed,
+ weaponsOffline,
+ weaponsOnline,
+ weaponsLevel,
+ weaponsEnabled,
+ shieldsOnline,
+ engageWarpSpeed,
+ disengageWarpSpeed,
+ increaseFirepower,
+ decreaseFirepower,
+ raiseShields,
+ lowerShields,
+ };
+
+ return (
+ {children}
+ );
+};
+
+export { EnterpriseContext, EnterpriseProvider as Provider };
diff --git a/src/components/Panel.js b/src/components/Panel.js
index 52caf4f..104bf29 100644
--- a/src/components/Panel.js
+++ b/src/components/Panel.js
@@ -1,4 +1,5 @@
-import React from 'react';
+import React, { useContext } from 'react';
+import { EnterpriseContext } from './EnterpriseContext';
import './Panel.css';
import WarpDrive from './WarpDrive';
@@ -6,9 +7,11 @@ import WeaponsBay from './WeaponsBay';
import ShieldGenerator from './ShieldGenerator';
function Panel() {
+ const { energyGauge } = useContext(EnterpriseContext);
+
return (
-
Energia em utilização: PLACEHOLDER
+
Energia em utilização: {energyGauge}
diff --git a/src/components/ShieldGenerator.js b/src/components/ShieldGenerator.js
index 959974b..003307d 100644
--- a/src/components/ShieldGenerator.js
+++ b/src/components/ShieldGenerator.js
@@ -1,14 +1,17 @@
-import React from 'react';
+import React, { useContext } from 'react';
+import { EnterpriseContext } from './EnterpriseContext';
import './Panel.css';
export default function ShieldGenerator() {
+ const { shieldsOnline, raiseShields, lowerShields } = useContext(EnterpriseContext);
+
return (
Escudos
-
-
alert('clicou')}>
- {`PLACEHOLDER`} escudos
+
+
+ {`${shieldsOnline ? 'Baixar' : 'Erguer'}`} escudos
);
diff --git a/src/components/WarpDrive.js b/src/components/WarpDrive.js
index cdeb5d3..c694399 100644
--- a/src/components/WarpDrive.js
+++ b/src/components/WarpDrive.js
@@ -1,14 +1,19 @@
-import React from 'react';
+import React, { useContext } from 'react';
+import { EnterpriseContext } from './EnterpriseContext';
import './Panel.css';
export default function WarpDrive() {
+ const { warpSpeed, engageWarpSpeed, disengageWarpSpeed } = useContext(
+ EnterpriseContext,
+ );
+
return (
Motor de Dobra
-
-
alert('clicou')}>
- {`PLACEHOLDER`} velocidade de dobra
+
+
+ {`${warpSpeed ? 'Desengajar' : 'Engajar'}`} velocidade de dobra
Armas e escudos devem estar desligados
diff --git a/src/components/WeaponsBay.js b/src/components/WeaponsBay.js
index 8eb1135..7ea7dd9 100644
--- a/src/components/WeaponsBay.js
+++ b/src/components/WeaponsBay.js
@@ -1,18 +1,28 @@
-import React from 'react';
+import React, { useContext } from 'react';
+import { EnterpriseContext } from './EnterpriseContext';
import './Panel.css';
export default function WeaponsBay() {
+ const {
+ weaponsOffline,
+ weaponsOnline,
+ weaponsLevel,
+ weaponsEnabled,
+ increaseFirepower,
+ decreaseFirepower,
+ } = useContext(EnterpriseContext);
+
return (
Armas
-
-
alert('clicou')}>
- {`PLACEHOLDER`} armas
+
+
+ {`${weaponsEnabled ? 'Desabilitar' : 'Habilitar'}`} armas
- Nível das armas: PLACEHOLDER
- alert('clicou')}>Aumentar poder de fogo
- alert('clicou')}>Diminuir poder de fogo
+ Nível das armas: {weaponsLevel}
+ Aumentar poder de fogo
+ Diminuir poder de fogo
Nível máximo: 3
);