class Abstracta::World
Attributes
age[R]
developer[R]
grid[R]
territories[R]
Public Class Methods
new(geometry=[100,100], opts={})
click to toggle source
def_delegators :compass, :distance_from
# File lib/abstracta/world.rb, line 10 def initialize(geometry=[100,100], opts={}) @grid = Grid.new(geometry) #@compass = Compass.default @density = opts.delete(:density) { 0.05 } @territory_count = opts.delete(:territory_count) { width * height * @density } @territories = [] @territories = create_territories(@territory_count) update_map @age = 0 @developer = WorldDeveloper.new(self) end
Public Instance Methods
age!()
click to toggle source
# File lib/abstracta/world.rb, line 35 def age! @age = @age + 1 end
available_adjacent(territory)
click to toggle source
# File lib/abstracta/world.rb, line 69 def available_adjacent(territory) @grid.clip territory.adjacent.reject(&method(:occupied?)) # { |xy| occupied.include?(xy) } # & available # - occupied end
compute_occupied()
click to toggle source
# File lib/abstracta/world.rb, line 57 def compute_occupied territories.map(&:occupants).flatten.map(&:location) end
compute_projected_targets(territory, n=territory.growth)
click to toggle source
# File lib/abstracta/world.rb, line 65 def compute_projected_targets(territory, n=territory.growth) available_adjacent(territory).take(n) end
create_territories(n=1)
click to toggle source
# File lib/abstracta/world.rb, line 30 def create_territories(n=1) seeds = @grid.sample(n) Array.new(n) { territory_class.new([seeds.pop]) } end
occupied()
click to toggle source
def update_territories
@territories.each do |territory| update_map targets = compute_projected_targets(territory) territory.step(targets) end
end
# File lib/abstracta/world.rb, line 53 def occupied @occupied ||= compute_occupied end
occupied?(xy)
click to toggle source
# File lib/abstracta/world.rb, line 61 def occupied?(xy) @occupied.include?(xy) end
territory_class()
click to toggle source
# File lib/abstracta/world.rb, line 29 def territory_class; Territory end
update_map()
click to toggle source
# File lib/abstracta/world.rb, line 25 def update_map @occupied = compute_occupied end