101 lines
2.4 KiB
JavaScript
101 lines
2.4 KiB
JavaScript
const preact = require('preact');
|
|
|
|
const VboxContainer = require('./vbox.container');
|
|
const InfoContainer = require('./info.container');
|
|
const InstanceCrypsContainer = require('./instance.cryps');
|
|
|
|
function InstanceComponent(args) {
|
|
const {
|
|
instance,
|
|
player,
|
|
quit,
|
|
sendInstanceReady,
|
|
|
|
vboxHidden,
|
|
setVboxHidden,
|
|
} = args;
|
|
|
|
if (!instance) return <div>...</div>;
|
|
|
|
function toggleVbox(e) {
|
|
setVboxHidden(!vboxHidden);
|
|
e.stopPropagation();
|
|
}
|
|
|
|
const vboxBtn = (
|
|
<button
|
|
className="instance-btn instance-ui-btn nav-btn left"
|
|
onClick={toggleVbox}>
|
|
vBox
|
|
</button>
|
|
);
|
|
|
|
const teamBtn = (
|
|
<button
|
|
className="instance-btn instance-ui-btn nav-btn right"
|
|
onClick={toggleVbox}>
|
|
team
|
|
</button>
|
|
);
|
|
|
|
const navBtn = vboxHidden
|
|
? vboxBtn
|
|
: teamBtn;
|
|
|
|
const menuBtn = (
|
|
<button
|
|
className="instance-btn instance-ui-btn menu-btn left"
|
|
onClick={quit}>
|
|
menu
|
|
</button>
|
|
);
|
|
|
|
const rdyClasses = `instance-btn instance-ui-btn ready-btn ${player.ready ? 'ready' : ''}`;
|
|
const readyBtn = (
|
|
<button
|
|
className={rdyClasses}
|
|
onClick={() => sendInstanceReady()}>
|
|
Ready
|
|
</button>
|
|
);
|
|
|
|
const actionBtn = player
|
|
? readyBtn
|
|
: null;
|
|
|
|
// TIMER
|
|
const zero = Date.parse(instance.phase_end) - (1000 * 120);
|
|
const now = Date.now();
|
|
const end = Date.parse(instance.phase_end);
|
|
const timerPct = ((now - zero) / (end - zero) * 100);
|
|
const timerStyles = {
|
|
width: `${timerPct < 100 ? timerPct : 0}%`,
|
|
background: player.ready ? 'forestgreen' : 'whitesmoke',
|
|
};
|
|
|
|
const timer = (
|
|
<div className="timer-container">
|
|
<div className="timer" style={timerStyles} > </div>
|
|
</div>
|
|
);
|
|
|
|
return (
|
|
<main className="instance" >
|
|
<div className="instance-hdr">
|
|
{navBtn}
|
|
{menuBtn}
|
|
<div className="spacer">
|
|
<div> </div>
|
|
</div>
|
|
{actionBtn}
|
|
</div>
|
|
{timer}
|
|
<VboxContainer />
|
|
<InstanceCrypsContainer />
|
|
<InfoContainer />
|
|
</main>
|
|
);
|
|
}
|
|
|
|
module.exports = InstanceComponent;
|