const seed = 'none' const scenario = 'standard' const options = 'none' //const rules = require("./rules") const last_card = 110 const last_power_card = 52 const toolbar = document.getElementById('toolbar') const vpMarker = document.getElementById('vp') const mapContainer = document.querySelector('.map') const countries= [ null, "East Germany", "Poland", "Czechoslovakia", "Hungary", "Romania", "Bulgaria" ] const overlay = document.getElementById('overlay'); const spaceNameElement = document.getElementById('space-name'); const spaceCharacteristicsElement = document.getElementById('space-characteristics'); document.querySelector('.map').addEventListener('mousemove', function(event) { const x = event.offsetX; // X-coordinate of mouse relative to container const y = event.offsetY; // Y-coordinate of mouse relative to container spaceCharacteristicsElement.innerText = `X: ${x}, Y: ${y}`; }) function create_ui() { // CREATE MAP spaces.forEach((space) => { if (space && space.box) { const { x, y, h, w } = space.box; const spaceArea = document.createElement('div'); spaceArea.classList.add('space-area', space.country) spaceArea.id=`space_${space.space_id}`; spaceArea.style.left = x + 'px'; spaceArea.style.top = y + 'px'; spaceArea.style.width = w + 'px'; spaceArea.style.height = h + 'px'; spaceArea.style.zIndex = 2; spaceArea.my_space = space.name_unique; spaceArea.addEventListener('mousedown', on_click_space); const dem_img = document.createElement('div') dem_img.classList.add('demInfl', space.country) dem_img.style.display = 'none' dem_img.id=`${space.name_unique}_demInfl` dem_img.style.zIndex = 1 dem_img.my_space = space.name_unique; dem_img.addEventListener('mousedown', on_click_space); spaceArea.appendChild(dem_img) const demInflValue = document.createElement('p') demInflValue.className='demInflValue' demInflValue.style.display = 'none' demInflValue.id=`${space.name_unique}_demInflValue` demInflValue.innerText=space.demInfl demInflValue.style.zIndex = 1 demInflValue.my_space = space.name_unique; demInflValue.addEventListener('mousedown', on_click_space); spaceArea.appendChild(demInflValue) const com_img = document.createElement('div') com_img.className='comInfl' com_img.style.display='none' com_img.id=`${space.name_unique}_comInfl` com_img.style.zIndex = 1 com_img.my_space = space.name_unique; com_img.addEventListener('mousedown', on_click_space); spaceArea.appendChild(com_img) const comInflValue = document.createElement('p') comInflValue.className='comInflValue' comInflValue.style.display='none' comInflValue.id=`${space.name_unique}_comInflValue` comInflValue.innerText=space.comInfl comInflValue.style.zIndex = 1 comInflValue.my_space = space.name_unique; comInflValue.addEventListener('mousedown', on_click_space); spaceArea.appendChild(comInflValue) mapContainer.appendChild(spaceArea); } }); // CREATE CARDS for (let c = 1; c <= last_card; ++c) { const hand_card = document.createElement('img'); hand_card.classList.add('hand_card') hand_card.id=`card_${c}`; hand_card.src = `cards/e${c}.gif` hand_card.my_card = c; hand_card.addEventListener('mousedown', on_click_card); ui.cards.push(hand_card); } for (let card of power_cards) { if (!card) continue; const power_card = document.createElement('img'); power_card.classList.add('power_card'); power_card.id = `power_card_${card.number}`; power_card.src = `cards_2/${card.url}.gif`; power_card.my_card = card.number; power_card.addEventListener('mousedown', on_click_card); ui.power_cards.push(power_card); } } function on_click_space(evt) { if (evt.button === 0) { const space = evt.target.my_space; if (send_action('infl', space)) { evt.stopPropagation(); } else if (send_action('sc', space)) { evt.stopPropagation(); } else { } } //hide_popup_menu(); } function on_click_card(evt) { if (evt.button === 0) { const card = evt.target.my_card; if (send_action('card', card)) { evt.stopPropagation(); } } } function is_action(action) { if (view.actions && view.actions[action]) return true return false } function on_log(text) { // eslint-disable-line no-unused-vars let p = document.createElement("div") if (text.match(/^>/)) { text = text.substring(1) p.className = 'i' } if (text.match(/^\.h1/)) { text = text.substring(4) p.className = 'h1' } else if (text.match(/^\.h2d/)) { text = text.substring(5) p.className = 'h2 dem' } else if (text.match(/^\.h2c/)) { text = text.substring(5) p.className = 'h2 com' } else if (text.match(/^\.h2/)) { text = text.substring(4) p.className = 'h2' } else if (text.match(/^\.h3/)) { text = text.substring(4) p.className = 'h3' } p.innerHTML = text return p } let ui = { favicon: document.getElementById('favicon'), player: [ document.getElementById("role_Democrat"), document.getElementById("role_Communist"), ], cards: [ null ], power_cards: [], dem_hand_count: document.getElementById("role_stat_dem"), com_hand_count: document.getElementById("role_stat_com"), played_card: 0, events_panel: document.getElementById("events_panel"), hand_panel: document.getElementById("hand_panel"), turn: document.getElementById("turn-tracker"), round: document.getElementById("action-round-tracker"), stability: document.getElementById("stability-track"), dem_TST: document.getElementById("dem-TST"), com_TST: document.getElementById("com-TST"), vp: document.getElementById("vp"), spaces: document.getElementsByClassName("space-area") } function on_update() { document.querySelectorAll('[id^="space_"].selected').forEach(spaceElement => {spaceElement.classList.remove('selected');}); document.getElementById("power_hand")?.querySelectorAll('.selected').forEach(cardElement => {cardElement.classList.remove('selected');}); view.valid_spaces.forEach(space_id => { const spaceElementId = `space_${space_id}`; const spaceElement = document.getElementById(spaceElementId); if (spaceElement) { spaceElement.classList.add('selected'); } }); //Check influence values const pieces = view.pieces pieces.forEach(piece => { const dem_marker = document.getElementById(`${piece.name_unique}_demInfl`); const dem_number = document.getElementById(`${piece.name_unique}_demInflValue`); const com_marker = document.getElementById(`${piece.name_unique}_comInfl`); const com_number = document.getElementById(`${piece.name_unique}_comInflValue`); dem_number.innerText=piece.demInfl if (piece.demInfl > 0) { dem_marker.style.display = 'block'; dem_number.style.display = 'block'; if(piece.demInfl - piece.comInfl >= piece.stability){ dem_marker.classList.add('controlled') dem_marker.classList.remove('uncontrolled') } else { dem_marker.classList.add('uncontrolled') dem_marker.classList.remove('controlled') } } else { dem_marker.style.display = 'none'; dem_number.style.display = 'none'; } com_number.innerText=piece.comInfl if (piece.comInfl > 0) { com_marker.style.display = 'block'; com_number.style.display = 'block'; if(piece.comInfl - piece.demInfl >= piece.stability){ com_marker.classList.add('controlled') com_marker.classList.remove('uncontrolled') } else { com_marker.classList.add('uncontrolled') com_marker.classList.remove('controlled') } } else { com_marker.style.display = 'none'; com_number.style.display = 'none'; } }); // UPDATE COUNTRY MARKERS for (let i = 1; i < countries.length; i++) { const country = countries[i]; const marker = document.getElementById(country); if (view.revolutions[country]) { marker.classList.add('revolution') marker.style.display = 'block' } else if (view.times_held[country] > 0 ) { marker.classList.add('held') marker.style.display = 'block' } else {marker.style.display = 'none'} } // UPDATE ASIDE ui.dem_hand_count.innerText = `${view.democrat_hand} cards in hand` ui.com_hand_count.innerText = `${view.communist_hand} cards in hand` // UPDATE HAND document.getElementById("hand").replaceChildren() document.getElementById("events").replaceChildren() if (view.hand.length && view.is_pwr_struggle === false) { document.getElementById("hand_panel").classList.remove("hide") for (let c of view.hand) { document.getElementById("hand").appendChild(ui.cards[c]); } } else { document.getElementById("hand_panel").classList.add("hide") } // EVENT PANEL if (view.played_card > 0) { document.getElementById("events_panel").classList.remove("hide") document.getElementById("events").appendChild(ui.cards[view.played_card]); } else { document.getElementById("events_panel").classList.add("hide") } // POWER STRUGGLE HAND document.getElementById("power_hand").replaceChildren() if (view.is_pwr_struggle) { document.getElementById("power_panel").classList.remove("hide") const power_hand = document.getElementById("power_hand"); if (!power_hand) { console.error("Element with id 'power_hand' not found."); } else { for (let card_number of view.power_hand) { const power_card = ui.power_cards.find(card => card.my_card === card_number); if (power_card instanceof Node) { const cardInfo = power_cards.find(card => card.number === card_number); if (view.valid_cards.includes(card_number)) { power_card.classList.add('selected'); } power_hand.appendChild(power_card); } } } } else { document.getElementById("power_panel").classList.add("hide") } // UPDATE BOARD MARKERS ui.turn.className = `t${view.turn}` if (view.round_player === 'Democrat') { ui.round.className = `dem-action-round-tracker r${view.round}` } else { ui.round.className = `com-action-round-tracker r${view.round}` } ui.stability.className = `s${view.stability}` ui.dem_TST.className = `tst${view.dem_tst}` ui.com_TST.className = `tst${view.com_tst}` ui.vp.className = `vp${view.vp}` console.log('strategy discard: ', view.strategy_discard) console.log('valid spaces: ', view.valid_spaces) action_button("strike", "Strike") action_button("march", "March") action_button("rally", "Rally in the Square") action_button("petition", "Petition") action_button("scoring", "Score country") action_button("surrender", "Surrender Power") action_button("retain", "Retain Power") action_button("take", "Take Power") action_button("concede", "Concede") action_button("struggle", "Begin power struggle") action_button("raise", "Raise the stakes") action_button("draw", "Draw cards") action_button("scoring", "Scoring") action_button("event", "Event") action_button("influence", "Influence") action_button("tst", "Tiananmen Square Track") action_button("support_check", "Support Check") action_button("roll", "Roll a die") action_button("done", "Done") action_button("undo", "Undo") } create_ui()