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

Version Path
rock-qtbindings-4.8.6.5 examples/ruboids/ruboids/World.rb
qtbindings-4.8.6.5 examples/ruboids/ruboids/World.rb
qtbindings-4.8.6.4 examples/ruboids/ruboids/World.rb
qtbindings-4.8.6.2 examples/ruboids/ruboids/World.rb
qtbindings-4.8.6.1 examples/ruboids/ruboids/World.rb
qtbindings-4.8.6.0 examples/ruboids/ruboids/World.rb
qtbindings-4.8.6.0-x86-mingw32 examples/ruboids/ruboids/World.rb
qtbindings-4.8.5.2 examples/ruboids/ruboids/World.rb
qtbindings-4.8.5.2-x86-mingw32 examples/ruboids/ruboids/World.rb
qtbindings-4.8.5.1 examples/ruboids/ruboids/World.rb
qtbindings-4.8.5.0 examples/ruboids/ruboids/World.rb
qtbindings-4.8.3.0-x86-mingw32 examples/ruboids/ruboids/World.rb
qtbindings-4.8.3.0 examples/ruboids/ruboids/World.rb
qtbindings-4.6.3.4-x86-mingw32 examples/ruboids/ruboids/World.rb
qtbindings-4.6.3.4 examples/ruboids/ruboids/World.rb
qtbindings-4.6.3.3 examples/ruboids/ruboids/World.rb
qtbindings-4.6.3.2-x86-mingw32 examples/ruboids/ruboids/World.rb
qtbindings-4.6.3.2 examples/ruboids/ruboids/World.rb
qtbindings-4.6.3.1 examples/ruboids/ruboids/World.rb
qtbindings-4.6.3.1-x86-mingw32 examples/ruboids/ruboids/World.rb