var my_color; var all_locations; var bombs = { }; var all_mobile = [ ]; var my_mobile = [ ]; function initialize() { var location_name, location; var agent_type, agent; var bomb_html; var height; select_color(); select_insurgent_locations(); initialize_data(); htmlBuilder.initialize(my_color, option_hover, option_select); mapController.initialize("#map", my_color); submitController.initialize("#submit", "submit_timer", variables.turn_length, process_submit, process_timeout); $('#forfeit').click(forfeit_game); newTurn(); } function show_element(id) { $('#'+id).removeClass("not"); } function hide_element(id) { $('#'+id).addClass("not"); } function select_color() { /* TBD: randomize this */ if (myid === 1) my_color = "blue"; else if (myid == 2) my_color = "red"; } function select_insurgent_locations() { /* TBD: randomize this */ var bank_location = "a"; var bomber_location = "b"; agents["bank"].home = bank_location; sides.red.map_text[bank_location] = "bank"; agents["bomber"].home = bomber_location; sides.red.map_text[bomber_location] = "bomber"; } function initialize_data() { var location_name, location; var agent_type, agent; setRound(0); all_locations = []; for (location_name in locations) { location = locations[location_name]; all_locations.push(location_name); if (location.bombable) { bombs[location_name] = { "explosion" : false, "red" : 0, "blue" : 0 } } } for (agent_type in agents) { agent = agents[agent_type]; if (agent.file !== null && !agent.file) agent.file = agent_type + ".png"; if (agent.moveable) { agent.current_location = agent.home; agent.proposed_location = ""; agent.intel_location = ""; agent.intel_age = 0; all_mobile.push(agent_type); if (agent.side === my_color) { my_mobile.push(agent_type); } } } } function option_hover(agent_type, location_name, on) { var agent = agents[agent_type]; var location = locations[location_name]; /* for actions which aren't a move to a new location */ if (!location) return; /* don't show a hover icon if position is current or proposed */ if (location_name === agent.current_location || (location_name === agent.proposed_location && on)) return; mapController.hoverAgent(agent_type, location_name, on); } function option_select(agent_type) { var agent = agents[agent_type]; var location_name = htmlBuilder.getDropdownValue(agent_type); var location = locations[location_name]; if (!location) { /* * for actions that don't involve moving, then proposed * position is current location */ agent.proposed_location = agent.current_location; } else { agent.proposed_location = location_name; } mapController.refresh(); } function set_status() { sides[my_color].agents.forEach(function(agent_type, index, arr) { htmlBuilder.updateStatus(agent_type, agents[agent_type].status); }); } function set_dropdown_menus() { my_mobile.forEach(function(agent_type, index, arr) { var agent = agents[agent_type]; var current_location = agent.current_location; var location = locations[current_location]; var next_sites, forbidden_sites; var entries = []; entries.push( { "value" : current_location, "display" : location.display_name + " (Hold Position)" } ); if (agent.anywhere) next_sites = all_locations; else next_sites = location.next_moves; forbidden_sites = agent.barred; next_sites.forEach(function(location_name, index, arr) { if (forbidden_sites.indexOf(location_name) == -1 && location_name != current_location) { location = locations[location_name]; entries.push( { "value" : location_name, "display" : location.display_name } ); } }); htmlBuilder.setDropdown(agent_type, entries); }); } function set_intelligence() { var status = { 'blue' : [ 'Smuggler sighted at Valley Smuggling Route', '', 'Digger sighted at Alpha Route', '', '', 'Financier sighted at Village B', 'Digger sighted planting IED at Beta Route', 'Smuggler captured; Financier carrying money; Digger empty handed', ], 'red' : [ '', 'UAV sighted at Mountain Pass', 'Convoy sighted at Village A', '', 'Bomb exploded at Alpha Route; Command Patrol destroyed', ], }; var index; var intel; var html; if (currentRound == 0) return; index = currentRound % status[my_color].length; intel = status[my_color][index]; html = '' + currentRound + ''; if (intel) html += ': ' + intel; html += '
'; $(html).prependTo($("#intelligence_data")); } function newTurn() { turn = currentRound + 1; $("turn").text(String(turn)); set_intelligence(); do_updates(); setRound(turn); submitController.reset(); } function process_submit() { var agent_list = my_mobile; if (numPlayers == 1) agent_list = all_mobile; agent_list.forEach(function(agent_type, index, arr) { var agent = agents[agent_type]; if (agent.proposed_location) { agent.current_location = agent.proposed_location; } agent.proposed_location = agent.current_location; }); setTimeout(function() { newTurn(); }, 2000); } function process_timeout() { /* * This is a hack for browsers that don't support events on * option elements. */ my_mobile.forEach(function(agent_type, index, arr) { htmlBuilder.dropdownFocusout(agent_type); }); } function forfeit_game() { if (numPlayers === 1) { if (my_color === "red") { my_color = "blue"; } else { my_color = "red"; } my_mobile = [ ]; all_mobile.forEach(function(agent_type, index, arr) { if (agents[agent_type].side === my_color) my_mobile.push(agent_type); }); htmlBuilder.changeSide(my_color); mapController.changeSide(my_color); do_updates(); } } function do_updates() { set_dropdown_menus(); set_status(); mapController.refresh(); }