/*if server, pass message to clients indicating the suggestion being made,
*so they may respond
*If fired by main game view, show the suggestion view and pass
*the player's current location
*/
Theory theory = event.getTheory();
if(theory == null)
{
//TODO: Need to get current player location
//Ask server for current player location
CurrentLocationRequestMessage msg = new CurrentLocationRequestMessage();
msg.setPlayer(client.getPlayer());
client.send(msg);
}
else //otherwise, fired by SuggestionView and it contains an actual theory
{
this.fireTextStatusEvent(new TextStatusEvent(this, theory.getTheoryText()));
if(isServer)
{
//Inject player as theorist if null
if(theory.getTheorist() == null)
theory = new Theory(Theory.Type.SUGGESTION, theory.getWeapon(), theory.getCharacter(), theory.getLocation(), this.currentPlayer); //this.client.getPlayer());
//TODO: Shouldn't this only check the immediately next player, unless they have none of the cards in question?
for(Player player : this.game.getPlayers())
{
if(!player.equals(currentPlayer))
{
Vector<Card> hand = player.getHand();
LinkedList<Card> invalidCards = new LinkedList<Card>();
for(Card card : hand){
switch(card.getCardType()){
case WEAPON_CARD:
if(theory.getWeapon().getWeaponType().equals(((WeaponCard)card).getWeaponType())){
invalidCards.add(card);
}
break;
case CHARACTER_CARD:
if(theory.getCharacter().getCharacterName().equals(((CharacterCard)card).getCharacterName())){
invalidCards.add(card);
}
break;
case LOCATION_CARD:
if(theory.getLocation().getRoomName().equals(((LocationCard)card).getLocationName())){
invalidCards.add(card);
}
break;
}
}
if(invalidCards != null){
if(invalidCards.size()==1) {
// This player has one of the suggestion cards, notify the suggester AND let everyone else know at least one card in the suggestion is wrong.
server.send(theory.getTheorist(), new SuggestionDisprovedCardMessage(player, invalidCards.get(0)));
server.sendAll(new SuggestionDisprovedMessage(player, theory));
return;
} else if(invalidCards.size()>1) {
// This player has more than one card - we need them to decide which one to show the suggester.
this.fireSuggestionDisprovedNeedFeedBackEvent(new SuggestionDisprovedNeedFeedBackEvent(this, theory, invalidCards));