import {ClientActionPB, ServerActionPB} from "../proto/action"; import {SyncableAction} from "../actions/ServerAction"; import {SendableAction} from "../actions/ClientAction"; import {unpackHexColor} from "../util/ColorUtils"; import {USER_ACTIVE_COLOR} from "../actions/UserAction"; import {CELL_COLOR} from "../actions/CellAction"; import {storageCoordsFromPb} from "./MapFromPb"; function sendableActionFromPB(action: ClientActionPB): SendableAction { if (action.cellSetColor) { if (!action.cellSetColor.at) { throw Error("No location set in cellSetColor") } return { type: CELL_COLOR, at: storageCoordsFromPb(action.cellSetColor.at), color: unpackHexColor(action.cellSetColor.color), } } else if (action.userSetActiveColor) { return { type: USER_ACTIVE_COLOR, color: unpackHexColor(action.userSetActiveColor.color) } } else { throw Error("No action set in ClientAction") } } export function syncableActionFromPb(action: ServerActionPB): SyncableAction { if (action.client) { return sendableActionFromPB(action.client) } else { throw Error("No action set in ServerAction") } }