solidify controls
This commit is contained in:
parent
0ec6bdaad5
commit
bec7685f7b
96
client/src/components/game.ctrl.btns.jsx
Normal file
96
client/src/components/game.ctrl.btns.jsx
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
const preact = require('preact');
|
||||||
|
const { connect } = require('preact-redux');
|
||||||
|
|
||||||
|
const actions = require('../actions');
|
||||||
|
|
||||||
|
const addState = connect(
|
||||||
|
function receiveState(state) {
|
||||||
|
const {
|
||||||
|
ws,
|
||||||
|
game,
|
||||||
|
animating,
|
||||||
|
} = state;
|
||||||
|
|
||||||
|
function sendReady() {
|
||||||
|
document.activeElement.blur();
|
||||||
|
return ws.sendGameReady(game.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInstanceState() {
|
||||||
|
return ws.sendInstanceState(game.instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendGameSkillClear() {
|
||||||
|
return ws.sendGameSkillClear(game.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendAbandon() {
|
||||||
|
return ws.sendInstanceAbandon(game.instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
game,
|
||||||
|
sendAbandon,
|
||||||
|
sendGameSkillClear,
|
||||||
|
sendReady,
|
||||||
|
getInstanceState,
|
||||||
|
animating,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
function receiveDispatch(dispatch) {
|
||||||
|
function quit() {
|
||||||
|
dispatch(actions.setNav('transition'));
|
||||||
|
dispatch(actions.setGame(null));
|
||||||
|
dispatch(actions.setInstance(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
return { quit };
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
function InstanceCtrlBtns(args) {
|
||||||
|
const {
|
||||||
|
game,
|
||||||
|
animating,
|
||||||
|
|
||||||
|
getInstanceState,
|
||||||
|
sendAbandon,
|
||||||
|
sendGameSkillClear,
|
||||||
|
sendReady,
|
||||||
|
quit,
|
||||||
|
} = args;
|
||||||
|
|
||||||
|
if (!game) return false;
|
||||||
|
|
||||||
|
const finished = game.phase === 'Finish';
|
||||||
|
const { abandonState } = this.state;
|
||||||
|
|
||||||
|
const abandonStateTrue = e => {
|
||||||
|
e.stopPropagation();
|
||||||
|
this.setState({ abandonState: true });
|
||||||
|
setTimeout(() => this.setState({ abandonState: false }), 2000);
|
||||||
|
};
|
||||||
|
|
||||||
|
const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`;
|
||||||
|
const abandonAction = abandonState ? sendAbandon : abandonStateTrue;
|
||||||
|
|
||||||
|
function quitClick() {
|
||||||
|
getInstanceState();
|
||||||
|
quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
const readyBtn = <button disabled={animating} class="ready" onClick={() => sendReady()}>Ready</button>;
|
||||||
|
const quitBtn = <button disabled={animating} onClick={quitClick}>Back</button>;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div class="instance-ctrl-btns">
|
||||||
|
{finished ? quitBtn : readyBtn}
|
||||||
|
<button>Chat</button>
|
||||||
|
<button disabled={animating} onClick={sendGameSkillClear}>Clear</button>
|
||||||
|
<button class={abandonClasses} disabled={animating || finished} onClick={abandonAction}>Abandon</button>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = addState(InstanceCtrlBtns);
|
||||||
@ -4,80 +4,33 @@ const { connect } = require('preact-redux');
|
|||||||
const actions = require('../actions');
|
const actions = require('../actions');
|
||||||
|
|
||||||
const PlayerBox = require('./player.box');
|
const PlayerBox = require('./player.box');
|
||||||
const InstanceCtrlBtns = require('./instance.ctrl.btns');
|
const GameCtrlButtons = require('./game.ctrl.btns');
|
||||||
|
|
||||||
const addState = connect(
|
const addState = connect(
|
||||||
function receiveState(state) {
|
function receiveState(state) {
|
||||||
const {
|
const {
|
||||||
ws,
|
|
||||||
game,
|
game,
|
||||||
account,
|
account,
|
||||||
animating,
|
|
||||||
} = state;
|
} = state;
|
||||||
|
|
||||||
function sendReady() {
|
|
||||||
document.activeElement.blur();
|
|
||||||
return ws.sendGameReady(game.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getInstanceState() {
|
|
||||||
return ws.sendInstanceState(game.instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendGameSkillClear() {
|
|
||||||
return ws.sendGameSkillClear(game.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendAbandon() {
|
|
||||||
return ws.sendInstanceAbandon(game.instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
game,
|
game,
|
||||||
sendAbandon,
|
|
||||||
sendGameSkillClear,
|
|
||||||
sendReady,
|
|
||||||
account,
|
account,
|
||||||
getInstanceState,
|
|
||||||
animating,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
function receiveDispatch(dispatch) {
|
|
||||||
function quit() {
|
|
||||||
dispatch(actions.setNav('transition'));
|
|
||||||
dispatch(actions.setGame(null));
|
|
||||||
dispatch(actions.setInstance(null));
|
|
||||||
}
|
|
||||||
|
|
||||||
return { quit };
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
function Controls(args) {
|
function Controls(args) {
|
||||||
const {
|
const {
|
||||||
account,
|
account,
|
||||||
sendAbandon,
|
|
||||||
game,
|
game,
|
||||||
animating,
|
|
||||||
sendGameSkillClear,
|
|
||||||
sendReady,
|
|
||||||
getInstanceState,
|
|
||||||
quit,
|
|
||||||
} = args;
|
} = args;
|
||||||
|
|
||||||
if (!game) return false;
|
if (!game) return false;
|
||||||
|
|
||||||
const { abandonState } = this.state;
|
|
||||||
|
|
||||||
const opponent = game.players.find(t => t.id !== account.id);
|
const opponent = game.players.find(t => t.id !== account.id);
|
||||||
const player = game.players.find(t => t.id === account.id);
|
const player = game.players.find(t => t.id === account.id);
|
||||||
|
|
||||||
function quitClick() {
|
|
||||||
getInstanceState();
|
|
||||||
quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
const zero = Date.parse(game.phase_start);
|
const zero = Date.parse(game.phase_start);
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const end = Date.parse(game.phase_end);
|
const end = Date.parse(game.phase_end);
|
||||||
@ -104,30 +57,13 @@ function Controls(args) {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
const readyBtn = <button disabled={animating} class="ready" onClick={() => sendReady()}>Ready</button>;
|
|
||||||
const quitBtn = <button disabled={animating} onClick={quitClick}>Back</button>;
|
|
||||||
|
|
||||||
const cancelAbandon = e => {
|
|
||||||
e.stopPropagation();
|
|
||||||
return this.setState({ abandonState: false });
|
|
||||||
};
|
|
||||||
|
|
||||||
const abandonStateTrue = e => {
|
|
||||||
e.stopPropagation();
|
|
||||||
this.setState({ abandonState: true });
|
|
||||||
};
|
|
||||||
|
|
||||||
const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`;
|
|
||||||
const abandonAction = abandonState ? sendAbandon : abandonStateTrue;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<aside onClick={cancelAbandon}>
|
<aside>
|
||||||
{timer}
|
{timer}
|
||||||
<div class="controls instance-ctrl">
|
<div class="controls instance-ctrl">
|
||||||
<PlayerBox player={opponent}/>
|
<PlayerBox player={opponent}/>
|
||||||
{game.phase === 'Finish' ? quitBtn : readyBtn}
|
|
||||||
<PlayerBox player={player} isPlayer={true} />
|
<PlayerBox player={player} isPlayer={true} />
|
||||||
<InstanceCtrlBtns />
|
<GameCtrlButtons />
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -7,55 +7,49 @@ const addState = connect(
|
|||||||
function receiveState(state) {
|
function receiveState(state) {
|
||||||
const {
|
const {
|
||||||
ws,
|
ws,
|
||||||
game,
|
|
||||||
instance,
|
instance,
|
||||||
animating,
|
|
||||||
} = state;
|
} = state;
|
||||||
|
|
||||||
function sendReady() {
|
function sendReady() {
|
||||||
document.activeElement.blur();
|
document.activeElement.blur();
|
||||||
return ws.sendGameReady(game.id);
|
return ws.sendInstanceReady(instance.id);
|
||||||
}
|
|
||||||
|
|
||||||
function sendGameSkillClear() {
|
|
||||||
return ws.sendGameSkillClear(game.id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendAbandon() {
|
function sendAbandon() {
|
||||||
const id = instance ? instance.id : game.instance;
|
return ws.sendInstanceAbandon(instance.id);
|
||||||
return ws.sendInstanceAbandon(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
game,
|
|
||||||
instance,
|
instance,
|
||||||
animating,
|
|
||||||
|
|
||||||
sendAbandon,
|
sendAbandon,
|
||||||
sendGameSkillClear,
|
sendReady,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
function receiveDispatch(dispatch) {
|
||||||
|
function leave() {
|
||||||
|
dispatch(actions.setNav('play'));
|
||||||
|
dispatch(actions.setGame(null));
|
||||||
|
dispatch(actions.setInstance(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
return { leave };
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
function InstanceCtrlBtns(args) {
|
function InstanceCtrlBtns(args) {
|
||||||
const {
|
const {
|
||||||
sendAbandon,
|
|
||||||
animating,
|
|
||||||
sendGameSkillClear,
|
|
||||||
|
|
||||||
game,
|
|
||||||
instance,
|
instance,
|
||||||
|
|
||||||
|
sendAbandon,
|
||||||
|
sendReady,
|
||||||
|
leave,
|
||||||
} = args;
|
} = args;
|
||||||
|
|
||||||
const finished = instance && instance.phase === 'Finished';
|
const finished = instance && instance.phase === 'Finished';
|
||||||
|
|
||||||
const { abandonState } = this.state;
|
const { abandonState } = this.state;
|
||||||
|
|
||||||
const cancelAbandon = e => {
|
|
||||||
e.stopPropagation();
|
|
||||||
return this.setState({ abandonState: false });
|
|
||||||
};
|
|
||||||
|
|
||||||
const abandonStateTrue = e => {
|
const abandonStateTrue = e => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
this.setState({ abandonState: true });
|
this.setState({ abandonState: true });
|
||||||
@ -65,11 +59,15 @@ function InstanceCtrlBtns(args) {
|
|||||||
const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`;
|
const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`;
|
||||||
const abandonAction = abandonState ? sendAbandon : abandonStateTrue;
|
const abandonAction = abandonState ? sendAbandon : abandonStateTrue;
|
||||||
|
|
||||||
|
const ready = !finished
|
||||||
|
? <button class="ready" onClick={() => sendReady()}>Ready</button>
|
||||||
|
: <button class="ready" onClick={leave}>Leave</button>;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="instance-ctrl-btns">
|
<div class="instance-ctrl-btns">
|
||||||
|
{ready}
|
||||||
<button>Chat</button>
|
<button>Chat</button>
|
||||||
{game ? <button disabled={animating} onClick={sendGameSkillClear}>Clear</button> : null}
|
<button class={abandonClasses} disabled={finished} onClick={abandonAction}>Abandon</button>
|
||||||
<button class={abandonClasses} disabled={animating || finished} onClick={abandonAction}>Abandon</button>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,44 +11,19 @@ const addState = connect(
|
|||||||
ws,
|
ws,
|
||||||
instance,
|
instance,
|
||||||
account,
|
account,
|
||||||
animating,
|
|
||||||
} = state;
|
} = state;
|
||||||
|
|
||||||
function sendReady() {
|
|
||||||
document.activeElement.blur();
|
|
||||||
return ws.sendInstanceReady(instance.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendAbandon() {
|
|
||||||
return ws.sendInstanceAbandon(instance.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sendAbandon,
|
|
||||||
instance,
|
instance,
|
||||||
sendReady,
|
|
||||||
account,
|
account,
|
||||||
animating,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
function receiveDispatch(dispatch) {
|
|
||||||
function leave() {
|
|
||||||
dispatch(actions.setNav('play'));
|
|
||||||
dispatch(actions.setGame(null));
|
|
||||||
dispatch(actions.setInstance(null));
|
|
||||||
}
|
|
||||||
|
|
||||||
return { leave };
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
function Controls(args) {
|
function Controls(args) {
|
||||||
const {
|
const {
|
||||||
account,
|
account,
|
||||||
sendAbandon,
|
|
||||||
instance,
|
instance,
|
||||||
sendReady,
|
|
||||||
leave,
|
|
||||||
} = args;
|
} = args;
|
||||||
|
|
||||||
if (!instance) return false;
|
if (!instance) return false;
|
||||||
@ -76,27 +51,18 @@ function Controls(args) {
|
|||||||
background: displayColour,
|
background: displayColour,
|
||||||
};
|
};
|
||||||
|
|
||||||
const timer = instance.phase !== 'InProgress'
|
const timer = (
|
||||||
? null
|
<div class="timer-container">
|
||||||
: (
|
<div class="timer" style={timerStyles} > </div>
|
||||||
<div class="timer-container">
|
</div>
|
||||||
<div class="timer" style={timerStyles} > </div>
|
);
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
const ready = instance.phase !== 'Finished'
|
|
||||||
? <button class="ready" onClick={() => sendReady()}>Ready</button>
|
|
||||||
: <button class="ready" onClick={leave}>Leave</button>
|
|
||||||
|
|
||||||
const abandon = instance.phase !== 'Finished' ? sendAbandon : false;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<aside>
|
<aside>
|
||||||
{timer}
|
{timer}
|
||||||
<div class="controls instance-ctrl">
|
<div class="controls instance-ctrl">
|
||||||
<PlayerBox player={opponent} />
|
<PlayerBox player={opponent} />
|
||||||
<PlayerBox player={player} isPlayer={true} abandon={abandon}/>
|
<PlayerBox player={player} isPlayer={true} />
|
||||||
{ready}
|
|
||||||
<InstanceCtrlBtns />
|
<InstanceCtrlBtns />
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user