Index: experimental/flocking_geese/js/flock.js |
diff --git a/experimental/flocking_geese/js/flock.js b/experimental/flocking_geese/js/flock.js |
deleted file mode 100644 |
index 43cf0e1873d388686823f5a91a3f0387bcc20184..0000000000000000000000000000000000000000 |
--- a/experimental/flocking_geese/js/flock.js |
+++ /dev/null |
@@ -1,137 +0,0 @@ |
-// Copyright 2011 (c) The Native Client Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-/** |
- * @file |
- * The JavaScript simulation of the flocking algorithm. Owns an array of |
- * geese, and runs the flocking simulation that computes new goose locations. |
- */ |
- |
-goog.provide('Flock'); |
- |
-goog.require('FrameCounter'); |
-goog.require('Goose'); |
-goog.require('goog.Disposable'); |
-goog.require('goog.array'); |
- |
-/** |
- * Constructor for the Flock class. |
- * @constructor |
- * @extends {goog.Disposable} |
- */ |
-Flock = function() { |
- goog.Disposable.call(this); |
- |
- /** |
- * The flock of geese. |
- * @type {Array.<Goose>} |
- * @private |
- */ |
- this.geese_ = []; |
- |
- /** |
- * An array of attractors. The flock has affinity for these points, and |
- * will head toward them when close enough. |
- * @type {Array.<goog.Math.Vec2>} |
- */ |
- this.attractors = []; |
- |
- /** |
- * The framerate meter. |
- * type {FrameCounter} |
- * @private |
- */ |
- this.frameCounter_ = new FrameCounter(); |
- |
- /** |
- * The goose sprite image. |
- * @type {Image} |
- * @private |
- */ |
- this.gooseImage_ = new Image(); |
- this.gooseImage_.src = 'images/Flock32_red.png'; |
-} |
-goog.inherits(Flock, goog.Disposable); |
- |
-/** |
- * The angular increment between goose sprites. Measured in radians. |
- * @type {number} |
- * @private |
- */ |
-Flock.prototype.GOOSE_HEADING_INCREMENT_ = (5.0 * Math.PI) / 180.0; |
- |
-/** |
- * Override of disposeInternal() to dispose of retained objects. |
- * @override |
- */ |
-Flock.prototype.disposeInternal = function() { |
- goog.array.clear(this.geese_); |
- delete this.frameCounter_; |
- Flock.superClass_.disposeInternal.call(this); |
-} |
- |
-/** |
- * Create a flock of geese. The geese start at the given location with |
- * random velocities. Any previous geese are deleted and the simulation |
- * starts with an entirely new flock. |
- * @param {!number} size The size of the flock. |
- * @param {?goog.math.Vec2} opt_initialLocation The initial location of each |
- * goose in the flock. |
- */ |
-Flock.prototype.resetFlock = function(size, opt_initialLocation) { |
- goog.array.clear(this.geese_); |
- var initialLocation = opt_initialLocation || new goog.math.Vec2(0, 0); |
- for (var goose = 0; goose < size; goose++) { |
- this.geese_[goose] = new Goose(initialLocation); |
- } |
- this.frameCounter_.reset(); |
-} |
- |
-/** |
- * Run one tick of the simulation, recording the time. |
- * @param {?goog.math.Rect} opt_flockBox The geese will stay inside of this |
- * box. If the parameter is not given, the geese don't have boundaries. |
- * @return {number} the simulation tick duration in miliseconds. |
- */ |
-Flock.prototype.flock = function(opt_flockBox) { |
- var flockBox = opt_flockBox || new goog.math.Rect(0, 0, 200, 200); |
- this.frameCounter_.beginFrame(); |
- for (var goose = 0; goose < this.geese_.length; goose++) { |
- this.geese_[goose].simulationTick(this.geese_, this.attractors, flockBox); |
- } |
- this.frameCounter_.endFrame(); |
- return this.frameCounter_.framesPerSecond(); |
-} |
- |
-/** |
- * Render the flock into the given canvas. |
- * @param {!Canvas} canvas The target canvas. |
- */ |
-Flock.prototype.render = function(canvas) { |
- if (!this.gooseImage_.complete) { |
- return; |
- } |
- var context2d = canvas.getContext('2d'); |
- for (var g = 0; g < this.geese_.length; g++) { |
- var goose = this.geese_[g]; |
- var heading = goose.velocity().heading(); |
- if (heading < 0.0) { |
- heading = Math.PI * 2.0 + heading; |
- } |
- // The goose points down the positive x-axis when its heading is 0. |
- //context2d.rotate(heading); |
- var spriteWidth = this.gooseImage_.height; |
- var spriteOffset = Math.floor(heading / this.GOOSE_HEADING_INCREMENT_) * |
- spriteWidth; |
- context2d.drawImage(this.gooseImage_, |
- spriteOffset, 0, spriteWidth, this.gooseImage_.height, |
- goose.location().x - spriteWidth / 2, |
- goose.location().y - spriteWidth / 2, |
- spriteWidth, this.gooseImage_.height); |
- } |
- context2d.fillStyle = 'blue'; |
- for (var a = 0; a < this.attractors.length; a++) { |
- context2d.fillRect(this.attractors[a].x - 2, this.attractors[a].y - 2, 4, 4); |
- } |
-} |