class Turtles extends AgentSetClass Turtles is a subclass of AgentSet which stores instances of Turtle or Breeds, which are subclasses of Turtle
class Turtles extends AgentSetConstructor creates the empty AgentSet instance and installs the agentClass (breed) variable shared by all the turtles in this set.
constructor: -> # model, agentClass, name, mainSet
super # call super with all the args I was called with@useSprites = false
Have turtles cache the links with them as a node. Optimizes Turtle a.myLinks method. Call before any turtles created.
cacheLinks: -> @agentClass::cacheLinks = true # all turtles, not individual breedsUse sprites rather than drawing
setUseSprites: (useSprites=true) ->
u.deprecated 'Turtles.setUseSprites: use turtles.setDefault("useSprites",bool)'
@setDefault("useSprites", useSprites)Factory: create num new turtles stored in this agentset. The optional init function is called on the new turtle after inserting in its agentset.
create: (num, init = ->) -> # returns array of new turtles too
((o) -> init(o); o) @add new @agentClass for i in [1..num] by 1 # too tricky?Remove all turtles from set via turtle.die() Note call in reverse order to optimize list restructuring.
clear: -> @last().die() while @any(); null # tricky, each die modifies listFilter to return all instances of this breed. Note: if used by the mainSet, returns just the turtles that are not subclassed breeds.
breedsIn: (array) -> @asSet (o for o in array when o.breed is @)Return an agentset of this breed within the patch array
inPatches: (patches) ->
array = []
array.push p.turtlesHere()... for p in patches # concat measured slowerPossibly faster to filter by breed in p.breedsHere?
if @mainSet? then @breedsIn array else @asSet arrayReturn an agentset of turtles/breeds within the patchRect, dx/y integers
inRect: (p, dx, dy=dx) ->
rect = @model.patches.patchRect p, dx, dy #, true
@inPatches rectReturn the members of this agentset that are within radius distance from me, using patch topology
inRadius: (agent, radius) ->
as = @inRect( (agent.p ? agent), Math.ceil(radius) )
as.inRadius agent, radiusReturn the members of this agentset that are within radius distance from agent, and within cone of angle, heading from agent using patch topology
inCone: (agent, radius, angle, heading) ->
as = @inRect( (agent.p ? agent), Math.ceil(radius) )
as.inCone agent, radius, angle, heading
setDraggable: ->
@on 'dragstart', (mouseEvent) =>
mouseEvent.target.dragging = true
@on 'dragend', (mouseEvent) =>
mouseEvent.target.dragging = false
@on 'drag', (mouseEvent) =>
mouseEvent.target.setXY(mouseEvent.patchX, mouseEvent.patchY)