Sha256: 00265e1664d25374b36ec06c16d7b843ea595afa4c38c8607c2fa4cf1e471371
Contents?: true
Size: 1.82 KB
Versions: 20
Compression:
Stored size: 1.82 KB
Contents
# # Copyright (c) 2001 by Jim Menard <jimm@io.com> # # Released under the same license as Ruby. See # http://www.ruby-lang.org/en/LICENSE.txt. # require 'singleton' require 'Qt' require './Params' require './Cloud' require './Flock' require './Boid' require './Camera' require './Canvas' class World < Qt::Object slots 'slotMove()' include Singleton attr_accessor :canvas attr_reader :width, :height, :depth, :camera, :clouds, :flock def initialize super @width = $PARAMS['world_width'] @height = $PARAMS['world_height'] @depth = $PARAMS['world_depth'] @clouds = [] minAltitude = $PARAMS['cloud_min_altitude'] $PARAMS['cloud_count'].times { c = Cloud.new c.position = Point.new(rand(@width) - @width / 2, rand(@height) - @height / 2, rand(@depth - minAltitude) - @depth / 2 + minAltitude) @clouds << c } # Sort clouds by height so lower/darker shadows are drawn last @clouds.sort { |a, b| a.position.y <=> b.position.y } @flock = Flock.new $PARAMS['flock_boids'].times { b = Boid.new b.position = Point.new(rand(@width) - @width / 2, rand(@height) - @height / 2, rand(@depth) - @depth / 2) @flock.add(b) # flock will delete boid } @clock = Qt::Timer.new() connect(@clock, SIGNAL('timeout()'), self, SLOT('slotMove()')) @camera = Camera.new # Reads values from params setupTranslation() end # Should be called whenever camera or screen changes. def setupTranslation @canvas.update() if @canvas end def start @clock.start($PARAMS['world_sleep_millis']) end def slotMove @clouds.each { | c | c.move() } @flock.move() @canvas.update() if @canvas # Camera follow boid. # b = @flock.members.first # @camera.position = b.position # @camera.rotation = Graphics.rotations(b.vector) # @camera.zoom = 1.0 end end
Version data entries
20 entries across 20 versions & 2 rubygems