public POOptionNode(POOptionNode parent, POGame.POGame game, int playerId, PlayerTask playerTask, IScore scoring)
        {
            _parent    = parent;
            _game      = game.getCopy();        // create clone
            _playerId  = playerId;
            PlayerTask = playerTask;
            Scoring    = scoring;

            if (!IsRoot)
            {
                Execute();
            }
        }
        public void Options(ref Dictionary <string, POOptionNode> optionNodes)
        {
            //List<PlayerTask> options = _game.ControllerById(_playerId).Options(!_isOpponentTurn);
            Controller        controller = (_game.CurrentPlayer.Id == _playerId) ? _game.CurrentPlayer : _game.CurrentOpponent;
            List <PlayerTask> options    = controller.Options(!_isOpponentTurn);

            foreach (PlayerTask option in options)
            {
                var optionNode = new POOptionNode(this, _game, _playerId, option, Scoring);
                if (!optionNodes.ContainsKey(optionNode.Hash))
                {
                    optionNodes.Add(optionNode.Hash, optionNode);
                }
            }
        }