/**
  *
  * @param boolean $pReload
  * @return Ultimatum_Model_Ultgamegroups
  */
 function get_target($pReload = FALSE)
 {
     if ($pReload || is_null($this->_target)) {
         // process
         $this->_target = Ultimatum_Model_Ultgamegroups::getInstance()->get($this->target);
     }
     return $this->_target;
 }
 /**
  *
  * @param boolean $pReload
  * @return Ultimatum_Model_Ultgamegroups
  */
 function player_group($pReload = FALSE)
 {
     if ($pReload || is_null($this->_player_group)) {
         $value = Ultimatum_Model_Ultgamegroups::getInstance()->get($this->order()->player_group);
         // process
         $this->_player_group = $value;
     }
     return $this->_player_group;
 }
 /**
  *
  * @return Ultimatum_Model_Ultgamegroups
  */
 public function player_group()
 {
     return Ultimatum_Model_Ultgamegroups::getInstance()->get($this->player_group);
 }
 /**
  * @return Ultimatum_Model_Ultplayergrouporders[]
  */
 public function pending_orders()
 {
     $orders = Ultimatum_Model_Ultplayergrouporders::getInstance();
     try {
         $sql = sprintf('SELECT po.id FROM %s po ', $orders->table()->tableName());
         $sql .= sprintf(' LEFT JOIN %s pg ON pg.id = po.player_group ', Ultimatum_Model_Ultgamegroups::getInstance()->table()->tableName());
         $sql .= sprintf(' WHERE po.target = %s ', $this->get_group()->identity());
         $sql .= sprintf(' AND pg.player = %s', $this->player);
         $sql .= ' AND po.active > 0;';
         error_log(__METHOD__ . ': finding orders; sql = ' . $sql);
         $out = $orders->find_from_sql($sql, FALSE);
     } catch (Exception $e) {
         error_log(__METHOD__ . ': error on sql ' . $sql);
         $out = array();
     }
     return $out;
 }
예제 #5
0
 /**
  *
  */
 public function gameviewstoreAction()
 {
     $game_id = $this->_getParam('game');
     $game = Ultimatum_Model_Ultgames::getInstance()->get($game_id);
     $player_ids = $game->player_ids();
     $player_group_ids = array_values(Ultimatum_Model_Ultgamegroups::getInstance()->player_group_ids($player_ids, TRUE));
     $scanned_group_ids = array_keys(Ultimatum_Model_Ultplayergroupknowledge::getInstance()->last_scans_for_player($player_ids, TRUE));
     $group_ids = array_merge($player_group_ids, $scanned_group_ids);
     array_unique($group_ids);
     $find_params = array('id' => array($group_ids, 'in'));
     $groups = Ultimatum_Model_Ultgroups::getInstance()->find($find_params);
     $out = array();
     foreach ($groups as $group) {
         $data = $group->toArray();
         $data['size'] = $group->size_in_game($game_id);
         $data['title'] = $group->get_title();
         $out[] = $data;
     }
     $this->_store('id', $out);
 }
예제 #6
0
 /**
  *
  * @return <type>
  */
 public function next_turn()
 {
     $params = array('game' => $this->identity());
     $pgs = Ultimatum_Model_Ultgamegroups::getInstance()->find($params);
     $this->turn++;
     $this->save();
     foreach ($pgs as $player_group) {
         $po = $player_group->pending_order();
         if ($po->end_turn() <= $this->turn()) {
             $po->execute();
         }
     }
 }
예제 #7
0
 /**
  *
  * @param Ultimatum_Model_Ultgroups $pGroup
  * @return Ultimatum_Model_Ultgamegroups
  */
 public function acquire($pGroup)
 {
     if (!($pGroup = $this->_as($pGroup, 'Ultimatum_Model_Ultgroups', TRUE))) {
         throw new Exception(__METHOD__ . ': bad gorup passed : ' . print_r($pGroup, 1));
     }
     $pgi = Ultimatum_Model_Ultgamegroups::getInstance();
     $pg = $pgi->group_for_game($pGroup, $this->get_game(), TRUE);
     $pg->set_player($this);
     return $pg;
 }
예제 #8
0
 /**
  *
  * @return void
  */
 public function _prep()
 {
     $user = Model_Users::current_user();
     if (!$user) {
         $params = array('error' => 'You must be logged in to run a game. ');
         $this->_forward('index', 'index', NULL, $params);
         return FALSE;
     }
     $game_id = $this->_getParam('game');
     // either actively select game or reactivate last played game
     if ($game_id) {
         $game = Ultimatum_Model_Ultgames::getInstance()->get($game_id);
         $player = Ultimatum_Model_Ultplayers::for_user_game($user, $game)->activate();
     } else {
         $player = Ultimatum_Model_Ultplayers::user_active_player($user);
         if (!$player) {
             $params = array('error' => 'cannot find active game');
             $this->_forward('index', 'index', NULL, $params);
             return FALSE;
         }
         $game = $player->get_game();
     }
     // at this point the player and game objects should be set.
     if (!$player) {
         $params = array('errror' => 'You are not a player in game ' . $id);
         $this->_forward('index', 'index', NULL, $params);
         return FALSE;
     }
     $this->view->game = $game;
     $game->activate();
     $this->view->player = $player;
     // there may or may not be a player group specified by paramerters.
     // player_group refers to the group indirectly by the game group id.
     // group refers to the group id directly.
     if ($player_group = $this->_getParam('player_group')) {
         $this->view->player_group = Ultimatum_Model_Ultgamegroups::getInstance()->get($player_group);
     } elseif ($group = $this->_getParam("group", NULL)) {
         $this->view->player_group = $player->player_group($group);
     }
     // there may or may not be a target.
     // the target id is the group id NOT the game group id.
     if ($target = $this->_getParam('target')) {
         $this->view->target = $target_obj = Ultimatum_Model_Ultgroups::getInstance()->get($target);
         $this->view->target_scan = $player->get_scan($target);
     }
     return TRUE;
 }