// ============================================================================== // Copyright (C) 2019 - Philip Paquette, Steven Bocco // // This program is free software: you can redistribute it and/or modify it under // the terms of the GNU Affero General Public License as published by the Free // Software Foundation, either version 3 of the License, or (at your option) any // later version. // // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more // details. // // You should have received a copy of the GNU Affero General Public License along // with this program. If not, see . // ============================================================================== import React from 'react'; import PropTypes from 'prop-types'; import {Panels} from "./panelList"; import {PanelChooseMap} from "./panelChooseMap"; import {PanelChoosePlayers} from "./panelChoosePlayers"; import {PanelChoosePower} from "./panelChoosePower"; import {PanelChooseSettings} from "./panelChooseSettings"; import {Maps} from "./mapList"; import {UTILS} from "../../../diplomacy/utils/utils"; export class GameCreationWizard extends React.Component { constructor(props) { super(props); this.state = { panel: Panels.CHOOSE_MAP, game_id: UTILS.createGameID(this.props.username), power_name: null, n_controls: -1, deadline: 0, registration_password: '', map: Maps[0], no_press: false }; this.backward = this.backward.bind(this); this.forward = this.forward.bind(this); this.updateParams = this.updateParams.bind(this); } updateParams(params) { this.setState(params); } goToPanel(panelID) { if (panelID < Panels.CHOOSE_MAP) this.props.onCancel(); else if (panelID > Panels.CHOOSE_SETTINGS) { const rules = ['POWER_CHOICE']; if (this.state.no_press) rules.push('NO_PRESS'); if (!this.state.deadline) { rules.push('NO_DEADLINE'); rules.push('REAL_TIME'); } this.props.onSubmit({ game_id: this.state.game_id, map_name: this.state.map.name, power_name: this.state.power_name, n_controls: this.state.n_controls, deadline: this.state.deadline, registration_password: this.state.registration_password || null, rules: rules }); } else this.setState({panel: panelID, registration_password: ''}); } backward(step) { this.goToPanel(this.state.panel - (step ? step : 1)); } forward(step) { this.goToPanel(this.state.panel + (step ? step : 1)); } renderPanel() { switch (this.state.panel) { case Panels.CHOOSE_MAP: return ; case Panels.CHOOSE_PLAYERS: return ; case Panels.CHOOSE_POWER: return ; case Panels.CHOOSE_SETTINGS: return ; default: return ''; } } render() { return (
{this.renderPanel()}
); } } GameCreationWizard.propTypes = { onCancel: PropTypes.func.isRequired, onSubmit: PropTypes.func.isRequired, availableMaps: PropTypes.object.isRequired, username: PropTypes.string.isRequired };