package jadex.bdi.examples.hunterprey_classic.creature.actsense; import jadex.base.fipa.SFipa; import jadex.bdi.examples.hunterprey_classic.Creature; import jadex.bdi.examples.hunterprey_classic.CurrentVision; import jadex.bdi.examples.hunterprey_classic.Food; import jadex.bdi.examples.hunterprey_classic.Hunter; import jadex.bdi.examples.hunterprey_classic.Obstacle; import jadex.bdi.examples.hunterprey_classic.Prey; import jadex.bdi.examples.hunterprey_classic.WorldObject; import jadex.bdi.runtime.IBeliefSet; import jadex.bdi.runtime.IMessageEvent; import jadex.bdi.runtime.Plan; import jadex.commons.SUtil; import java.util.List; /** * Update the agent's belief according to the new vision. */ /* @requires belief my_self. * @requires beliefset preys * @requires beliefset hunters * @requires beliefset obstacles * @requires beliefset food */ public class UpdateVisionPlan extends Plan { //-------- methods -------- /** * The plan body. */ public void body() { IMessageEvent req = (IMessageEvent)getReason(); CurrentVision cv = (CurrentVision)req.getParameter(SFipa.CONTENT).getValue(); startAtomic(); getBeliefbase().getBelief("my_self").setFact(null); getBeliefbase().getBelief("my_self").setFact(cv.getCreature()); endAtomic(); getBeliefbase().getBelief("vision").setFact(cv.getVision()); WorldObject[] seenobs = cv.getVision().getObjects(); // When an object is not seen any longer (not // in actualvision, but in (near) beliefs), remove it. List known = (List)getExpression("query_in_vision_objects").execute(); List seen = SUtil.arrayToList(seenobs); for(int i=0; i<known.size(); i++) { Object object = known.get(i); if(!seen.contains(object)) { if(object instanceof Prey) getBeliefbase().getBeliefSet("preys").removeFact(object); else if(object instanceof Hunter) getBeliefbase().getBeliefSet("hunters").removeFact(object); else if(object instanceof Obstacle) getBeliefbase().getBeliefSet("obstacles").removeFact(object); else if(object instanceof Food) getBeliefbase().getBeliefSet("food").removeFact(object); } } // Add (new) seen objects to the beliefs. for(int i=0; i<seenobs.length; i++) { if(seenobs[i] instanceof Prey) { IBeliefSet bs = getBeliefbase().getBeliefSet("preys"); if(bs.containsFact(seenobs[i])) { // bs.updateFact(seenobs[i]); Prey p = (Prey)bs.getFact(seenobs[i]); p.update((Creature)seenobs[i]); } else { bs.addFact(seenobs[i]); } //getBeliefbase().getBeliefSet("preys").updateOrAddFact(seenobs[i]); } else if(seenobs[i] instanceof Hunter) { IBeliefSet bs = getBeliefbase().getBeliefSet("hunters"); if(bs.containsFact(seenobs[i])) { // bs.updateFact(seenobs[i]); Hunter h = (Hunter)bs.getFact(seenobs[i]); h.update((Creature)seenobs[i]); } else { bs.addFact(seenobs[i]); } //getBeliefbase().getBeliefSet("hunters").updateOrAddFact(seenobs[i]); } else if(seenobs[i] instanceof Obstacle) { if(!getBeliefbase().getBeliefSet("obstacles").containsFact(seenobs[i])) getBeliefbase().getBeliefSet("obstacles").addFact(seenobs[i]); } else if(seenobs[i] instanceof Food) { if(!getBeliefbase().getBeliefSet("food").containsFact(seenobs[i])) getBeliefbase().getBeliefSet("food").addFact(seenobs[i]); } } } }