swarm-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [swarm-hackers] Re: Swarm, Heatbugs, and forEach loops...


From: Scott Christley
Subject: Re: [swarm-hackers] Re: Swarm, Heatbugs, and forEach loops...
Date: Tue, 10 Nov 2009 17:25:14 -0800


There are two ways to do it; it depends upon whether you want to keep the exact same scheduling sematics or not.

The one way is instead of sending a message to each heatbug, send a message to HeatbugsModel and have it iterate through the heatbugs.

in -buildActions

[modelActions createActionTo: self message: @selector(stepBugs)];

then you would add this method to HeatbugsModel

- stepBugs
{
// have each heatbug step
for (i = 0; i < [heatbugList count]; ++i) [[heatbugList objectAtIndex: i] step];
}

However this does not have the exact scheduling semantics, where you have a separate action message in the schedule for each heatbugs.

-createActionForEach: is a convenience function to create an action schedule for each object in the list, so you can just manually traverse the NSArray.

in -buildActions

for (i = 0; i < [heatbugList count]; ++i) 
[modelActions createActionTo: [heatbugList objectAtIndex: i] message: M(step)];




cheers
Scott

ps: Note that M() is just shorthand for the compiler directive @selector().


On Nov 10, 2009, at 3:57 PM, Nima Talebi wrote:

Hi Scott,

Regarding NSArray - I did consider doing that, but then I hit the following problem...

- (id <ActionForEach>)createActionForEach: target message: (SEL)aSel;

...we call that when creating an action in the HeatbugModel class as follows...

actionForEach = [modelActions createActionForEach:heatbugList message:M(step)];

...however if heatbugList is converted to an NSArray, it will no longer be a valid SEL.

How do you suggest I tackle this?  My guess is that you don't want any changes made to the framework, as this will probably break everything, but perhapse there's a way I can create a heatbugList object that conforms to <List> as well as being an NSArray if that's even possible?

Nima

On Wed, Nov 11, 2009 at 3:46 AM, Scott Christley <address@hidden> wrote:
Hey Nima,

Swarm was a written a long time ago before there was a framework like OpenStep available, so it had to implement many of its own collection classes, like List, and as you can see the interface seems somewhat foreign.

My suggestion would be to try changing Heatbugs so that it uses an NSArray instead of List.  Then you can do you operations using standard OpenStep code.  I think making the Heatbugs code look as close as possible to a normal OpenStep application is good.

Otherwise, I think your code is ok.  One major functionality that is missing from the OpenStep version of Swarm is the probe display.  This essentially provides a popup window to do very similar to what you have done, though the probe display is more general and provides display and edit capability to all of a Heatbug's instance variables.

Scott

On Nov 10, 2009, at 5:44 AM, Nima Talebi wrote:

Nevermind, I figured it out.

I've updated my clone of Heatbugs (git tree), which now allows user to interact with the state of the Heatbug agents, changing their idealTemp and outputHeat minimums and maximums.

I did that like so...

- (void)reconfigureHeatbugs {
    [heatbugList forEach:M(setRandomIdealTemperatureInRange:to:) :minIdealTemp :maxIdealTemp];
    [heatbugList forEach:M(setRandomOutputHeatInRange:to:) :minOutputHeat :maxOutputHeat];
}

...and each time the user moves the sliders, MyDocument calls this method...

- (IBAction)setMaxOutputHeat:(id)sender {
    ...
        int tA = min([sender intValue], (int)[sender maxValue] - 100);
        [swarm setMaxOutputHeat:NSInt(tA)];
        
        int tB = min(tA, [[swarm minOutputHeat] intValue]);
        [swarm setMinOutputHeat:NSInt(tB)];
        [minOutputHeat setIntValue:tB];
        [minOutputHeat setNeedsDisplay];
        
        [swarm reconfigureHeatbugs];
   ....
}


...does anyone see anything wrong with that?  I ask because I still feel a little daunted by the amount of code in this framework, so I'm never quite certain that I'm going about things the right way.

Nima

On Tue, Nov 10, 2009 at 9:52 PM, Nima Talebi <address@hidden> wrote:
Hi, I'm a little confused (as I usually am looking at Swarm) on how iteration is supposed to work...

I have added some sliders and input widgets to my own branch of heatbugs, and so each time the user acts on these input widgets, I need to update the state variables stored in each Heatbug object.

For example, I would like to have something like this...

- (void)reconfigureHeatbug:(Heatbug *)hbug;

- (void)reconfigureHeatbugs {
    int i;
    Heatbug *hbug;
    for(i=0; i<numBugs; i++) {
        hbug = [heatbugList objectAtIndex:i];
        [self reconfigureHeatbug:hbug];
    }
}    

Of course that's not possible, as the heatbugList is not an NSArray, it is an id conforming to the <List> protocol.  Looking at surrounding code, I think maybe I'm supposed to do something along the lines of...

- (void)reconfigureHeatbugs {
    id fEAction = [modelActions createActionForEach:heatbugList
                                            message:M(reconfigureHeatbug:)];
}

..but that's obviously wrong since I have no idea what I'm doing - and what is M?

As a side-question - What would make life easier is being able to highlight a function/method/class/whatever in Xcode - say M - then right-click and select 'Jump to definition' - Anyone know how I can get that working?

Nima



--
Nima Talebi
web: http://ai.autonomy.net.au/People/Nima
gpg: B51D 1F18 D8E2 B702 B027 23A4 E06B DAC1 BE70 ADC0
_______________________________________________
swarm-hackers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/swarm-hackers


_______________________________________________
swarm-hackers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/swarm-hackers




--
Nima Talebi
web: http://ai.autonomy.net.au/People/Nima
gpg: B51D 1F18 D8E2 B702 B027 23A4 E06B DAC1 BE70 ADC0
_______________________________________________
swarm-hackers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/swarm-hackers


reply via email to

[Prev in Thread] Current Thread [Next in Thread]