package jadex.bdi.examples.blackjack.player; import jadex.bdi.examples.blackjack.GameState; import jadex.bdi.examples.blackjack.Player; import jadex.bdi.runtime.Plan; import jadex.commons.SUtil; import java.util.List; /** * Update the game state. */ public class UpdateGameStatePlan extends Plan { /** * The body method is called on the * instatiated plan instance from the scheduler. */ public void body() { GameState gs = (GameState)getParameter("gamestate").getValue(); GameState gsold = (GameState)getBeliefbase().getBelief("gamestate").getFact(); // System.out.println("Game state new: "+gs); // System.out.println("Game state old: "+gsold); Player me = (Player)getBeliefbase().getBelief("myself").getFact(); if(gs.getDealer()==null || !gs.getDealer().equals(gsold.getDealer())) { gsold.setDealer(gs.getDealer()); } else { gsold.updateDealer(gs.getDealer()); } List olds = SUtil.arrayToList(gsold.getPlayers()); Player[] news = gs.getPlayers(); for(int i=0; i<news.length; i++) { olds.remove(news[i]); // Don't add myself to the game state. if(!news[i].equals(me)) gsold.updateOrAddPlayer(news[i]); } for(int i=0; i<olds.size(); i++) { gsold.removePlayer((Player)olds.get(i)); } //getBeliefbase().getBelief("gamestate").setFact(gs); Player mec = gs.getPlayer(me.getName()); // extract the card out of the received message if(mec!=null && mec.getCards().length!=me.getCards().length) { me.setCards(mec.getCards()); me.setAccount(mec.getAccount()); me.setBet(mec.getBet()); } } // public void passed() // { // new Thread(new Runnable() // { // public void run() // { // while(getState().containsObject(getRPlan())) // { // try // { // Thread.sleep(100); // } // catch(InterruptedException e) // { // } // } // System.err.println("passed: rplan="+getRPlan()+" usages="+getState().getReferencingObjects(getRPlan())+", body="+this+" usages="+getState().getReferencingObjects(this)); // } // }).start(); // } }