import React, {Component} from "react"; import { Button, Chip, FormControl, FormControlLabel, FormGroup, FormLabel, Grid, Snackbar, Switch, TextField, Typography } from "@mui/material"; import RestartAltIcon from '@mui/icons-material/RestartAlt'; import CloseIcon from '@mui/icons-material/Close'; import SaveIcon from '@mui/icons-material/Save'; import {PAGE} from "./App"; import { Config, GameInput, GameRules, GameSwitch, GameSwitchNames, IPCListenChannels, NFCCard, NFCCardType, NFCPropertyCard, PropertyColor } from "../RawConstants"; import NfcIcon from "@mui/icons-material/Nfc"; import IPCRendererListener from "./IPCRendererListener"; import CardSetup from "./CardSetup"; interface InitialSetupState { open: boolean, switchValues: GameSwitch[], inputValues: GameInput[], savedMsg: boolean, openNFCModal: boolean, nfcCard: NFCCard, validCard: boolean } const defaultConf: InitialSetupState = { open: true, savedMsg: false, openNFCModal: false, nfcCard: null, validCard: false, switchValues: [ { name: "GET_BONUS_PASSING_START", label: "Über Los Bonus einziehen", value: true }, { name: "DOUBLE_BONUS_ON_GO", label: "Wenn auf Los, doppelten Bonus einziehen", depends: "GET_BONUS_PASSING_START", value: true }, { name: "PUT_PAID_PENALTIES_IN_MIDDLE", label: "Gezahlte Strafen in die 'Mitte' legen", value: true }, { name: "RECEIVE_PENALTIES_AT_FREE_PARKING", label: "Bei 'Frei Parken' Strafen aus der 'Mitte' einziehen", depends: "PUT_PAID_PENALTIES_IN_MIDDLE", value: true }, { name: "PUT_10_IN_MIDDLE_AFTER_EACH_GO", label: "Nach jedem Los 10 in die Mitte", depends: "PUT_PAID_PENALTIES_IN_MIDDLE", value: false }, { name: "STREET_MUST_BE_AUCTIONED_IF_NOT_PURCHASED", label: "Straße muss versteigert werden bei Nichtkauf", value: true }, { name: "TWO_HOTELS_PER_STREET_ALLOWED", label: "Zwei Hotels pro Straße erlaubt", value: false }, { name: "MORTGAGE_REDUCES_RENT", label: "Hypothek verringert Miete", value: false }, { name: "GOODS_GO_TO_OTHER_PLAYERS_UPON_BANKRUPTCY", label: "Güter gehen an anderen Spieler über bei Bankrott", value: true }, { name: "STREETS_CAN_BE_SOLD_BACK_TO_THE_BANK", label: "Straßen können zurück an die Bank verkauft werden", value: true }, { name: "PRISON_CAN_BE_PURCHASED_RENT_GOES_TO_PLAYER", label: "Gefängnis kann erworben werden, Miete geht an den Spieler", value: false }, { name: "KEEP_MONEY_MORE_SECRET", label: "Geld von anderen Spielern ungenauer anzeigen", value: false } ], inputValues: [ { name: "STARTING_CASH", type: "number", label: "Start Guthaben", value: "1500" }, { name: "PASSING_GO_CASH", type: "number", label: "Lohn über Los", value: "200" }, { name: "PRISON_RELEASE_FEE", type: "number", label: "Gefängnis Gebühren", value: "50" }, { name: "CURRENCY", type: "text", label: "Währung", value: "€" } ] } export default class Setup extends Component<{}, InitialSetupState> { constructor(props: {}) { super(props); let x: NFCPropertyCard = { cardType: NFCCardType.PROPERTY, "name": "Test", mortgageValue: 2, rent: 100, buyValue: 200, specialProperties: "", color: PropertyColor.BEIGE, fullSetAmount: 2, } this.state = { ...defaultConf, } } reset = () => { this.setState(prevState => ({ ...prevState, ...defaultConf })) //window.api.request("") } style = { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: '50%', bgcolor: 'background.paper', border: '2px solid #000', boxShadow: 24, p: 4, }; onSwitch = (event: React.ChangeEvent) => { const {name, checked} = event.target; this.setState((prevState) => ({ ...prevState, switchValues: prevState.switchValues.map((switchObj) => { if (switchObj.name === name) { return { ...switchObj, value: checked }; } return switchObj; }) })); } onInput = (event: React.ChangeEvent) => { const {name, value} = event.target; this.setState((prevState) => ({ ...prevState, inputValues: prevState.inputValues.map((switchObj) => { if (switchObj.name === name) { return { ...switchObj, value: value }; } return switchObj; }) })); } getSettings = () => { return new Promise((resolve, reject) => { window.api.request("SETTINGS", {}).then(answer => { try { let data = answer.data as Config; for (let [sw, state] of Object.entries(data.rules.switchValues)) { this.setState((prevState) => ({ ...prevState, switchValues: prevState.switchValues.map((obj) => { if (obj.name === sw) { return { ...obj, value: state }; } return obj; }) })); } for (let [sw, state] of Object.entries(data.rules.inputValues)) { this.setState((prevState) => ({ ...prevState, inputValues: prevState.inputValues.map((obj) => { if (obj.name === sw) { return { ...obj, value: state }; } return obj; }) })); } resolve(); } catch (e) { reject(e); } }) }) } saveSettings = (silent = false) => { let gameSettings: any = { switchValues: {}, inputValues: {} }; for (let ele of this.state.switchValues) { gameSettings.switchValues[ele.name] = ele.value; if (!!ele.depends && ele.value) gameSettings.switchValues[ele.name] = this.checkDependsValue(ele.depends); } for (let ele of this.state.inputValues) { gameSettings.inputValues[ele.name] = ele.value; } window.api.request("SETTINGS", {data: {rules: gameSettings as GameRules}}).then(); if (!silent) this.setState(prevState => ({ ...prevState, savedMsg: true })); } onNFCRawEvent = (card: NFCCard|null, isComplete: boolean) => { this.setState(prevState => ({ ...prevState, openNFCModal: true, nfcCard: card, validCard: isComplete })); console.log(card); } private rawNFCListener: number = 0; componentDidMount() { this.rawNFCListener = IPCRendererListener.attach(IPCListenChannels.NFC_RAW, (message) => { this.onNFCRawEvent(message.data, message.status); console.log("Got an raw nfc event") }) this.getSettings().then(); } componentWillUnmount() { IPCRendererListener.detach(this.rawNFCListener); } handleClose = () => { window.app.toggleWiFiSettings(false); } checkDependsValue = (depends: GameSwitchNames) => { for (let x of this.state.switchValues) { if (x.name == depends) return x.value; } } render() { return
{ this.setState(prevState => ({ ...prevState, savedMsg: false })) }} message={"Einstellungen gespeichert!"} /> {this.state.openNFCModal && this.setState(prevState => ({ ...prevState, openNFCModal: false }))}/>} Einstellungen Schalter-Regeln {Object.values(this.state.switchValues).map(value => { return ( } label={value.label} />) })} Werte-Regeln {Object.values(this.state.inputValues).map(value => { return ( } label={value.label} />) })} Spielkarten NFC
} color="secondary" variant="outlined"/>
Bitte die Karte an das Lesegerät halten, um sie zu konfigurieren.
Anschließend können die Einstellungen der Karte im Dialog angepasst werden. } }