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 -
-
); 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 -
- 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 -
- - Nível das armas: PLACEHOLDER - - + Nível das armas: {weaponsLevel} + + Nível máximo: 3
);