class Abstracta::Territory

Attributes

age[R]
compass[R]
developer[R]
dna[R]
limit[R]
occupants[R]
period[R]

Public Class Methods

new(locations=[[0,0]],genome=Genome.default) click to toggle source
# File lib/abstracta/territory.rb, line 17
def initialize(locations=[[0,0]],genome=Genome.default)
  @compass   = Compass.default
  @occupants = locations.map(&method(:occupant_at))

  @dna       = genome.tap do |my|
    @period    = my.growth.cycle
    @rate      = my.growth.rate
    @limit     = my.growth.limit
    @max_age   = my.age_bound
  end

  @age       = 0

  @developer = TerritoryDeveloper.new(self)
end

Public Instance Methods

age!() click to toggle source
# File lib/abstracta/territory.rb, line 33
def age! 
  @age = @age + 1 
end
cull!() click to toggle source
# File lib/abstracta/territory.rb, line 57
def cull!
  @occupants.reject! do |occupant| 
    occupant.age >= @max_age
  end
end
growth() click to toggle source
# File lib/abstracta/territory.rb, line 41
def growth
  projected_size - size 
end
occupant_at(point) click to toggle source
# File lib/abstracta/territory.rb, line 49
def occupant_at(point)
  occupant_class.new([point.x, point.y]) 
end
occupant_class() click to toggle source
# File lib/abstracta/territory.rb, line 45
def occupant_class
  Occupant 
end
occupy!(target) click to toggle source
# File lib/abstracta/territory.rb, line 53
def occupy!(target)
  @occupants << occupant_at(target)
end
projected_size() click to toggle source
# File lib/abstracta/territory.rb, line 37
def projected_size
  (@rate.additive + size) * @rate.multiplicative 
end