001 import swarm.*;
002 import swarm.activity.*;
003 import swarm.defobj.*;
004 import swarm.objectbase.*;
005
006 public class ModelSwarm extends SwarmImpl{
007 public int width,height;
008 PatternSpace patternSpace;
009
010 ActionGroup modelActions;
011 Schedule modelSchedule;
012
013 boolean stopFlag;
014
015 public ModelSwarm(Zone aZone){
016 super(aZone);
017
018 width=50;
019 height=50;
020
021 stopFlag=false;
022
023 EmptyProbeMap probeMap;
024 probeMap=new EmptyProbeMapImpl(aZone,this.getClass());
025
026 probeMap.addProbe(Globals.env.probeLibrary.getProbeForVariable$inClass
027 ("width",getClass()));
028 probeMap.addProbe(Globals.env.probeLibrary.getProbeForVariable$inClass
029 ("height",getClass()));
030
031 Globals.env.probeLibrary.setProbeMap$For(probeMap,this.getClass());
032
033 }
034
035 public Object buildObjects(){
036 patternSpace=new PatternSpace(this,width,height);
037 return this;
038 }
039
040 /**
041 * PatternSpaceのupdateをスケジュールに組み込む
042 */
043 public Object buildActions(){
044 modelActions=new ActionGroupImpl(this);
045 try{
046 modelActions.createActionTo$message(patternSpace,
047 new Selector(Class.forName("PatternSpace"),"update",false));
048 modelActions.createActionTo$message(this,
049 new Selector(getClass(),"checkToStop",false));
050 } catch (Exception e) {
051 e.printStackTrace (System.err);
052 System.exit(1);
053 }
054
055 modelSchedule=new ScheduleImpl(this,1);
056 modelSchedule.at$createAction(0,modelActions);
057 return this;
058 }
059
060 public Activity activateIn(Swarm context){
061 super.activateIn (context);
062 modelSchedule.activateIn(this);
063 return getActivity();
064 }
065
066 /**
067 * 終了判定<BR>
068 * PatternSpaceに点の置かれていない格子がなくなったら、
069 * 最後のクラスタリング(trace)をして終了
070 */
071 public void checkToStop(){
072 if(!patternSpace.remainingQ()){
073 patternSpace.trace();
074 this.getActivity().terminate();
075 stopFlag=true;
076 }
077 }
078
079 /**
080 * シミュレーションが終了したか
081 */
082 public boolean stopQ(){
083 return stopFlag;
084 }
085
086 public PatternSpace getPattern(){
087 return patternSpace;
088 }
089
090 public int getWidth(){
091 return width;
092 }
093
094 public int getHeight(){
095 return height;
096 }
097
098 public void initializeSpace(){
099 if(patternSpace!=null)
100 patternSpace.initializeSpace();
101 }
102 }