// ObserverSwarm.m #import "ObserverSwarm.h" #import "ModelSwarm.h" #import <simtoolsgui.h> @implementation ObserverSwarm + createBegin: aZone { ObserverSwarm *obj; obj = [super createBegin: aZone]; obj->displayFrequency = 1; return obj; } - createEnd { return [super createEnd]; } - buildObjects { [super buildObjects]; modelSwarm = [ModelSwarm create: self]; [controlPanel setStateStopped]; [modelSwarm buildObjects]; colorMap = [Colormap create: self]; [colorMap setColor: 0 ToName: "black"]; [colorMap setColor: 1 ToName: "red"]; [colorMap setColor: 2 ToName: "green"]; worldRaster = [ZoomRaster create: self]; [worldRaster setColormap: colorMap]; [worldRaster setZoomFactor: 4]; [worldRaster setWidth: [[modelSwarm getWorld] getSizeX] Height: [[modelSwarm getWorld] getSizeY]]; [worldRaster setWindowTitle: "Food World"]; [worldRaster pack]; // draw the window. foodDisplay = [Value2dDisplay createBegin: self]; [foodDisplay setDisplayWidget: worldRaster colormap: colorMap]; [foodDisplay setDiscrete2dToDisplay: [modelSwarm getFood]]; foodDisplay = [foodDisplay createEnd]; bugDisplay = [Object2dDisplay createBegin: self]; [bugDisplay setDisplayWidget: worldRaster]; [bugDisplay setDiscrete2dToDisplay: [modelSwarm getWorld]]; [bugDisplay setObjectCollection: [modelSwarm getBugList]]; [bugDisplay setDisplayMessage: M(drawSelfOn:)]; // draw method bugDisplay = [bugDisplay createEnd]; return self; } - buildActions { [super buildActions]; [modelSwarm buildActions]; displayActions = [ActionGroup create: self]; [displayActions createActionTo: foodDisplay message: M(display)]; [displayActions createActionTo: bugDisplay message: M(display)]; [displayActions createActionTo: worldRaster message: M(drawSelf)]; [displayActions createActionTo: actionCache message: M(doTkEvents)]; displaySchedule = [Schedule createBegin: self]; [displaySchedule setRepeatInterval: displayFrequency]; // note frequency! displaySchedule = [displaySchedule createEnd]; [displaySchedule at: 0 createAction: displayActions]; return self; } - activateIn: swarmContext { [super activateIn: swarmContext]; [modelSwarm activateIn: self]; [displaySchedule activateIn: self]; return [self getSwarmActivity]; } @end