Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3003)

Unified Diff: experimental/flocking_geese/js/flocking_geese.js

Issue 10928195: First round of dead file removal (Closed) Base URL: https://github.com/samclegg/nativeclient-sdk.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « experimental/flocking_geese/js/flock.js ('k') | experimental/flocking_geese/js/frame_counter.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: experimental/flocking_geese/js/flocking_geese.js
diff --git a/experimental/flocking_geese/js/flocking_geese.js b/experimental/flocking_geese/js/flocking_geese.js
deleted file mode 100644
index 78b12e692dc7cf496a0c8bb59b172f0ee850123b..0000000000000000000000000000000000000000
--- a/experimental/flocking_geese/js/flocking_geese.js
+++ /dev/null
@@ -1,631 +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 FlockingGeese application object. Encapsulates three principle app
- * elements: the NaCl module which runs the C++ implementation of the flocking
- * algorithm, a canvas used by the JavaScript implementation, and a DOM
- * element that contains the info display (which includes things like the
- * speedometer, control buttons, etc.).
- */
-
-goog.provide('FlockingGeese');
-
-goog.require('Flock');
-goog.require('Goose');
-goog.require('LoadProgress');
-goog.require('Speedometer');
-goog.require('Speedometer.Attributes');
-goog.require('goog.Disposable');
-goog.require('goog.array');
-goog.require('goog.dom');
-goog.require('goog.events.EventType');
-goog.require('goog.math.Vec2');
-goog.require('goog.style');
-
-/**
- * Constructor for the FlockingGeese class. Use the run() method to populate
- * the object with controllers and wire up the events.
- * @param {string} containerId The DOM id of the application's container.
- * @constructor
- * @extends {goog.Disposable}
- */
-FlockingGeese = function(containerId) {
- goog.Disposable.call(this);
-
- /**
- * The DOM element that contains the application.
- * @type {Element}
- * @private
- */
- this.container_ = document.getElementById(containerId);
-
- /**
- * The flock of geese as implemented in JavaScript.
- * @type {Flock}
- * @private
- */
- this.flock_ = new Flock();
-
- /**
- * Bit that tells whether the JS simulation is running or not.
- * @type {bool}
- * @private
- */
- this.javascriptSimRunning_ = false;
-
- /**
- * The NaCl module. This is an <EMBED> element that contains the NaCl
- * module. Set during moduleDidLoad().
- * @type {Element}
- * @private
- */
- this.naclModule_ = null;
-
- /**
- * The load progress bar.
- * @type {LoadProgress}
- * @private
- */
- this.progressBar_ = new LoadProgress();
-
- /**
- * The speedometer.
- * @type {Speedometer}
- * @private
- */
- this.speedometer_ = new Speedometer();
-
- /**
- * The simluation mode slider. This becomes a Slider object.
- * @type {Slider}
- * @private
- */
- this.simModeSlider_ = null;
-
- /**
- * The flock size slider. This becomes a Slider object.
- * @type {Slider}
- * @private
- */
- this.flockSizeSlider_ = null;
-
- /**
- * The current simulation mode. Starts in 'JavaScript'.
- * @type {string}
- * @private
- */
- this.simulationMode_ = FlockingGeese.SimulationMode.JAVASCRIPT;
-
- /**
- * Event handling.
- */
- this.mouseMoveListener_ = null;
- this.mouseUpListener_ = null;
-}
-goog.inherits(FlockingGeese, goog.Disposable);
-
-/**
- * Method signatures that are sent from the NaCl module. A signature is really
- * just a method id - later we can upgrade this to accept (say) full JSON
- * strings and parse them, but for now a simple solution will work. The strings
- * need to match the corresponding ones labeled "output method ids" in
- * flocking_geese_app.cc.
- * @enum {Object}
- * @private
- */
-FlockingGeese.prototype.MethodSignatures_ = {
- SET_SIMULATION_INFO: 'setSimulationInfo',
- FRAME_RATE: 'frameRate'
-};
-
-/**
- * The ids used for elements in the DOM. The FlockingGeese application
- * expects these elements to exist.
- * @enum {string}
- */
-FlockingGeese.DomIds = {
- // The elements for the flock size slider. Contained in the info panel.
- FLOCK_SIZE_SLIDER: 'flock_size_slider',
- FLOCK_SIZE_SLIDER_RULER: 'flock_size_slider_ruler',
- FLOCK_SIZE_SLIDER_THUMB: 'flock_size_slider_thumb',
- // The <FORM> containing various controls.
- CONTROLS_FORM: 'game_controls_form',
- // The <CANVAS> where the JS implementation draws its geese.
- GOOSE_CANVAS: 'flocking_geese_canvas',
- // The <EMBED> element containing the NaCl module.
- NACL_MODULE: 'flocking_geese_nacl_module',
- // The <DIV> containing the simulation drawing area (either the NaCl module
- // or the <CANVAS>.
- NACL_VIEW: 'nacl_flocking_geese',
- // The slider buttons used to select sim type (NaCL vs. JavaScript).
- // Contained in the info panel.
- SIM_MODE_SELECT: 'sim_mode_select',
- SIM_SELECT_RULER: 'sim_select_ruler',
- SIM_SELECT_THUMB: 'sim_select_thumb',
- // The text that displays the speed difference.
- SPEED_DIFFERENCE_LABEL: 'speed_difference',
- // The speedometer <CANVAS> element. Contained in the info panel.
- SPEEDOMETER: 'speedometer_canvas'
-};
-
-/**
- * The list of simulation modes. These are the values assigned to the
- * simulation mode radio buttons.
- * @enum {string}
- */
-FlockingGeese.SimulationMode = {
- NACL: 'NaCl',
- JAVASCRIPT: 'JavaScript'
-};
-
-/**
- * The list of meter names.
- * @enum {string}
- */
-FlockingGeese.MeterNames = {
- NACL: 'NaCl',
- JAVASCRIPT: 'JavaScript'
-};
-
-/**
- * Override of disposeInternal() to dispose of retained objects.
- * @override
- */
-FlockingGeese.prototype.disposeInternal = function() {
- this.terminate();
- FlockingGeese.superClass_.disposeInternal.call(this);
-}
-
-/**
- * Set up all the DOM elements and wire together the events.
- */
-FlockingGeese.prototype.initializeApplication = function() {
- // Listen for 'unload' in order to terminate cleanly.
- goog.events.listen(window, goog.events.EventType.UNLOAD, this.terminate);
- var naclMeterAttribs = {};
- naclMeterAttribs[Speedometer.Attributes.THEME] = Speedometer.Themes.GREEN;
- naclMeterAttribs[Speedometer.Attributes.ODOMETER_LEFT] = 84;
- naclMeterAttribs[Speedometer.Attributes.ODOMETER_TOP] = 156;
- this.speedometer_.addMeterWithName(FlockingGeese.MeterNames.NACL,
- naclMeterAttribs);
- var jsMeterAttribs = {};
- jsMeterAttribs[Speedometer.Attributes.THEME] = Speedometer.Themes.RED;
- jsMeterAttribs[Speedometer.Attributes.ODOMETER_LEFT] = 84;
- jsMeterAttribs[Speedometer.Attributes.ODOMETER_TOP] = 192;
- this.speedometer_.addMeterWithName(FlockingGeese.MeterNames.JAVASCRIPT,
- jsMeterAttribs);
- this.speedometer_.setMaximumSpeed(10000.0); // Measured in frames per second.
-
- var speedometerCanvas =
- document.getElementById(FlockingGeese.DomIds.SPEEDOMETER);
- this.speedometer_.setCanvas(speedometerCanvas);
- this.speedometer_.reset();
- this.speedometer_.render(this.speedometerCanvas_);
-
- // Wire up the various controls.
- goog.events.listen(this.container_, goog.events.EventType.MOUSEDOWN,
- this.mouseDown_, true, this);
-
- var simSelectSlider =
- document.getElementById(FlockingGeese.DomIds.SIM_MODE_SELECT);
- var simSelectRuler =
- document.getElementById(FlockingGeese.DomIds.SIM_SELECT_RULER);
- var simSelectThumb =
- document.getElementById(FlockingGeese.DomIds.SIM_SELECT_THUMB);
- this.simModeSlider_ = new Slider(
- [{simMode: FlockingGeese.SimulationMode.NACL},
- {simMode: FlockingGeese.SimulationMode.JAVASCRIPT}
- ]);
- this.simModeSlider_.decorate(simSelectSlider, simSelectRuler, simSelectThumb);
- this.simModeSlider_.rulerLength = 80;
- this.simModeSlider_.rulerOffset = 12;
- this.simModeSlider_.slideToStep(1);
- goog.events.listen(this.simModeSlider_, SliderEvent.EventType.CHANGE,
- this.toggleSimMode, false, this);
-
- var flockSizeSlider =
- document.getElementById(FlockingGeese.DomIds.FLOCK_SIZE_SLIDER);
- var sliderRuler = document.getElementById(
- FlockingGeese.DomIds.FLOCK_SIZE_SLIDER_RULER);
- var sliderThumb = document.getElementById(
- FlockingGeese.DomIds.FLOCK_SIZE_SLIDER_THUMB);
- this.flockSizeSlider_ = new Slider(
- [{gooseCount: 50, meterLimit: 30000.0},
- {gooseCount: 100, meterLimit: 8000.0},
- {gooseCount: 500, meterLimit: 400.0},
- {gooseCount: 1000, meterLimit: 100.0}
- ]);
- this.flockSizeSlider_.decorate(flockSizeSlider, sliderRuler, sliderThumb);
- this.flockSizeSlider_.rulerLength = 110;
- this.flockSizeSlider_.rulerOffset = 18;
- this.flockSizeSlider_.slideToStep(0);
- goog.events.listen(this.flockSizeSlider_, SliderEvent.EventType.CHANGE,
- this.selectFlockSize, false, this);
-
- // Populate the JavaScript verison of the simulation.
- var flockSize = 0;
- if (this.flockSizeSlider_) {
- var stepObject = this.flockSizeSlider_.objectAtStepValue();
- flockSize = stepObject.gooseCount;
- this.speedometer_.setMaximumSpeed(stepObject.meterLimit);
- }
- var initialLocation = this.getCanvasCenter_();
- this.flock_.resetFlock(flockSize, initialLocation);
-}
-
-/**
- * Called by the module loading function once the module has been loaded.
- * @param {?String} opt_naclModuleId The id of an <EMBED> element which
- * contains the NaCl module. If unspecified, defaults to |NACL_MODULE|.
- */
-FlockingGeese.prototype.moduleDidLoad = function(opt_naclModuleId) {
- // Set up the view controller, it contains the NaCl module.
- var naclModuleId = opt_naclModuleId || FlockingGeese.DomIds.NACL_MODULE;
- this.naclModule_ = document.getElementById(naclModuleId);
- if (this.flockSizeSlider_) {
- this.invokeNaClMethod('resetFlock',
- {'size' : this.flockSizeSlider_.objectAtStepValue().gooseCount});
- }
- // Hide the load progress bar and make the module element visible.
- this.progressBar_.setVisible(false);
- this.naclModule_.style.visibility = 'inherit';
- // If the NaCL module is being displayed, then start the simulation.
- var naclView = document.getElementById(FlockingGeese.DomIds.NACL_VIEW);
- if (naclView.style.visibility == 'visible') {
- this.invokeNaClMethod('runSimulation');
- }
-}
-
-/**
- * Asserts that cond is true; issues an alert and throws an Error otherwise.
- * @param {bool} cond The condition.
- * @param {String} message The error message issued if cond is false.
- */
-FlockingGeese.prototype.assert = function(cond, message) {
- if (!cond) {
- message = "Assertion failed: " + message;
- alert(message);
- throw new Error(message);
- }
-}
-
-/**
- * Change the flock size.
- * @param {!goog.events.Event} changeEvent The CHANGE event that triggered this
- * handler.
- */
-FlockingGeese.prototype.selectFlockSize = function(changeEvent) {
- changeEvent.stopPropagation();
- var initialLocation = this.getCanvasCenter_();
- var stepObject =
- this.flockSizeSlider_.objectAtStepValue(changeEvent.stepValue);
- var newFlockSize = stepObject.gooseCount;
- this.speedometer_.setMaximumSpeed(stepObject.meterLimit);
- // Reset the speedometers to 0.
- this.speedometer_.updateMeterNamed(FlockingGeese.MeterNames.NACL, 0);
- this.speedometer_.updateMeterNamed(FlockingGeese.MeterNames.JAVASCRIPT, 0);
- this.speedometer_.reset();
- this.flock_.resetFlock(newFlockSize, initialLocation);
- this.invokeNaClMethod('resetFlock', {'size' : newFlockSize});
- this.updateSpeedDifference_();
-}
-
-/**
- * Toggle the simulation mode.
- * @param {!goog.events.Event} changeEvent The CHANGE event that triggered this
- * handler.
- */
-FlockingGeese.prototype.toggleSimMode = function(changeEvent) {
- changeEvent.stopPropagation();
- var simModeObject =
- this.simModeSlider_.objectAtStepValue(changeEvent.stepValue);
- var simMode = simModeObject.simMode;
- if (simMode == this.simulationMode_)
- return;
- this.simulationMode_ = simMode;
- if (simMode == FlockingGeese.SimulationMode.NACL) {
- // When toggling to 'NaCl', turn off the JavaScript simulation timer and
- // swap the DOM elements to display the NaCl implementation.
- this.stopJavaScriptSimulation_();
- var flockingCanvas =
- document.getElementById(FlockingGeese.DomIds.GOOSE_CANVAS);
- flockingCanvas.style.visibility = 'hidden';
- var naclView =
- document.getElementById(FlockingGeese.DomIds.NACL_VIEW);
- naclView.style.visibility = 'visible';
- // Start up the NaCl simulation.
- this.invokeNaClMethod('runSimulation');
- } else {
- // In the 'on' state, the simulation runs the NaCl implementation.
- this.invokeNaClMethod('pauseSimulation');
- this.startJavaScriptSimulation_();
- var flockingCanvas =
- document.getElementById(FlockingGeese.DomIds.GOOSE_CANVAS);
- flockingCanvas.style.visibility = 'visible';
- var naclView =
- document.getElementById(FlockingGeese.DomIds.NACL_VIEW);
- naclView.style.visibility = 'hidden';
- }
-}
-
-/**
- * Format a method invocation and call postMessage with the formatted method
- * string. This calls the NaCl module with the invocation string. Note that
- * this is an asynchronous call into the NaCl module.
- * @param {!string} methodName The name of the method. This must match a
- * published method name in the NaCl module.
- * @param {?Object} parameters A dictionary that maps parameter names to
- * values. All parameter values are passed a strings.
- */
-FlockingGeese.prototype.invokeNaClMethod =
- function(methodName, opt_parameters) {
- if (!this.naclModule_) {
- return;
- }
- var methodInvocation = methodName
- if (opt_parameters) {
- for (param in opt_parameters) {
- methodInvocation += ' ' + param + ':' + opt_parameters[param]
- }
- }
- this.naclModule_.postMessage(methodInvocation);
-}
-
-/**
- * Handle a message posted by the NaCl module. An incomming NaCl message is
- * formatted like the outgoing message in invokeNaClMethod() (see above).
- * There is a method name, followed by a space-separated list of named
- * parameters. The parameters are separated from their values by a ':'.
- * @param {Event} messageEvent The Event wrapping the message.
- */
-FlockingGeese.prototype.handleNaClMessage = function(messageEvent) {
- var methodInvocation = messageEvent.data.split(' ');
- // The first element of |methodInvocation| is the method name. Use this as
- // the key to look up the rest of the signature.
- if (methodInvocation[0] == this.MethodSignatures_.SET_SIMULATION_INFO) {
- for (var paramCount = 1;
- paramCount < methodInvocation.length;
- paramCount++) {
- var parameter = methodInvocation[paramCount].split(':');
- // The first element is the parameter name, the second element is its
- // value.
- if (parameter[0] == this.MethodSignatures_.FRAME_RATE) {
- var frameRate = parseFloat(parameter[1]);
- this.speedometer_.updateMeterNamed(FlockingGeese.MeterNames.NACL,
- frameRate);
- this.updateSpeedDifference_();
- }
- }
- } else {
- var error = 'Unrecognized NaCl message: ' + messageEvent.data;
- console.log(error);
- throw new Error(error);
- }
-}
-
-/**
- * The run() method starts and 'runs' the FlockingGeese app. An <EMBED> tag is
- * injected into the <DIV> element |opt_viewDivName| which causes the NaCl
- * module to be loaded. Once loaded, the moduleDidLoad() method is called via
- * a 'load' event handler that is attached to the <DIV> element.
- * @param {?String} opt_viewDivName The id of a DOM element in which to
- * embed the NaCl module. If unspecified, defaults to DomIds.VIEW. The
- * DOM element must exist.
- */
-FlockingGeese.prototype.run = function(opt_viewDivName) {
- var viewDivName = opt_viewDivName || FlockingGeese.DomIds.NACL_VIEW;
- var viewDiv = document.getElementById(viewDivName);
- this.assert(viewDiv, "Missing DOM element '" + viewDivName + "'");
-
- this.initializeApplication();
-
- // A small handler for the 'load' event. It stops propagation of the 'load'
- // event and then calls moduleDidLoad(). The handler is bound to |this| so
- // that the calling context of the closure makes |this| point to this
- // instance of the Applicaiton object.
- var loadEventHandler = function(loadEvent) {
- this.moduleDidLoad(FlockingGeese.DomIds.NACL_MODULE);
- }
-
- // Note that the <EMBED> element is wrapped inside a <DIV>, which has a 'load'
- // event listener attached. This method is used instead of attaching the
- // 'load' event listener directly to the <EMBED> element to ensure that the
- // listener is active before the NaCl module 'load' event fires.
- viewDiv.addEventListener('load', goog.bind(loadEventHandler, this), true);
- // Attach a listener for messages coming from the NaCl module.
- viewDiv.addEventListener('message',
- goog.bind(this.handleNaClMessage, this),
- true);
- // Handle the load progress.
- viewDiv.addEventListener(
- 'progress',
- goog.bind(this.progressBar_.handleProgressEvent, this.progressBar_),
- true);
-
- var viewSize = goog.style.getSize(viewDiv);
- viewDiv.appendChild(this.progressBar_.createDom());
- var naclDom = goog.dom.createDom('embed', {
- 'id': FlockingGeese.DomIds.NACL_MODULE,
- 'class': 'autosize-view',
- 'width': viewSize.width,
- 'height': viewSize.height,
- 'src': 'flocking_geese.nmf',
- 'type': 'application/x-nacl',
- 'style': 'visibility: inherit'
- });
- viewDiv.appendChild(naclDom);
- this.startJavaScriptSimulation_();
-}
-
-/**
- * Run one tick of the simulation and then render the new flock. Update the
- * speedometer with new timing values.
- */
-FlockingGeese.prototype.simulationTick = function() {
- var flockingCanvas =
- document.getElementById(FlockingGeese.DomIds.GOOSE_CANVAS);
- // Clear the canvas
- var context2d = flockingCanvas.getContext('2d');
- var flockBox = new goog.math.Rect(0,
- 0,
- flockingCanvas.width,
- flockingCanvas.height);
- context2d.fillStyle = 'white';
- context2d.fillRect(flockBox.top,
- flockBox.left,
- flockBox.width,
- flockBox.height);
- var frameRate = this.flock_.flock(flockBox);
- this.flock_.render(flockingCanvas);
- this.speedometer_.updateMeterNamed(FlockingGeese.MeterNames.JAVASCRIPT,
- frameRate);
- this.updateSpeedDifference_();
-
- if (this.javascriptSimRunning_) {
- var self = this;
- window.webkitRequestAnimationFrame(function() {
- self.simulationTick();
- });
- }
-}
-
-/**
- * Shut down the application instance. This unhooks all the event listeners
- * and deletes the objects created in moduleDidLoad().
- */
-FlockingGeese.prototype.terminate = function() {
- goog.events.removeAll();
- this.stopJavaScriptSimulation_();
-}
-
-/**
- * Handle a mousedown on the application view.
- * @param {Event} mouseEvent The event that triggered this handler.
- */
-FlockingGeese.prototype.mouseDown_ = function(mouseEvent) {
- mouseEvent.preventDefault();
- mouseEvent.stopPropagation();
- // Listen for mouse-move and mouse-up events. Dragging stops when the
- // mouse-up event arrives.
- if (this.mouseMoveListener_ == null) {
- this.mouseMoveListener_ = goog.events.listen(
- this.container_,
- goog.events.EventType.MOUSEMOVE,
- this.mouseMove_, true, this);
- }
- if (this.mouseUpListener_ == null) {
- this.mouseUpListener_ = goog.events.listen(
- window,
- goog.events.EventType.MOUSEUP,
- this.mouseUp_, true, this);
- }
- this.setAttractorFromEvent_(mouseEvent);
-}
-
-/**
- * Handle a mousemove on the application view.
- * @param {Event} mouseEvent The event that triggered this handler.
- */
-FlockingGeese.prototype.mouseMove_ = function(mouseEvent) {
- this.setAttractorFromEvent_(mouseEvent);
-}
-
-/**
- * Handle a mouseup on the application view.
- * @param {Event} mouseEvent The event that triggered this handler.
- */
-FlockingGeese.prototype.mouseUp_ = function(mouseEvent) {
- if (this.mouseMoveListener_ != null) {
- goog.events.unlistenByKey(this.mouseMoveListener_);
- this.mouseMoveListener_ = null;
- }
- if (this.mouseUpListener_ != null) {
- goog.events.unlistenByKey(this.mouseUpListener_);
- this.mouseUpListener_ = null;
- }
-}
-
-/**
- * Set the attractor position from the coordinates in a browser event.
- * @param {Event} event The event.
- */
-FlockingGeese.prototype.setAttractorFromEvent_ = function(event) {
- var origin = goog.style.getPageOffset(this.container_);
- var attractor = new goog.math.Vec2(event.clientX - origin.x,
- event.clientY - origin.y);
- if (this.flock_.attractors.length == 0) {
- this.flock_.attractors.push(attractor);
- }
- this.flock_.attractors[0] = attractor;
- this.invokeNaClMethod('setAttractorLocation x:' + attractor.x +
- ' y:' + attractor.y);
-}
-
-/**
- * Start up the JavaScript implementation of the simulation by enabling the
- * simulation timer.
- * @private
- */
-FlockingGeese.prototype.startJavaScriptSimulation_ = function() {
- // Start up the JavaScript implementation of the simulation.
- if (this.javascriptSimRunning_)
- return; // Don't run a tick if the sim is already running.
- this.javascriptSimRunning_ = true;
- this.simulationTick();
-}
-
-/**
- * Stop the JavaScript implementation of the simulation by clearing the
- * simulation timer.
- * @private
- */
-FlockingGeese.prototype.stopJavaScriptSimulation_ = function() {
- // Stop the JavaScript implementation of the simulation.
- this.javascriptSimRunning_ = false;
-}
-
-/**
- * Recompute the speed difference between JavaScript and Native Client.
- * Color the result depending on which is faster.
- * @private
- */
-FlockingGeese.prototype.updateSpeedDifference_ = function() {
- var speedDifferenceLabel =
- document.getElementById(FlockingGeese.DomIds.SPEED_DIFFERENCE_LABEL);
- var naclSpeed = this.speedometer_.valueForMeterNamed(
- FlockingGeese.MeterNames.NACL,
- Speedometer.Attributes.ODOMETER_DISPLAY_VALUE);
- var jsSpeed = this.speedometer_.valueForMeterNamed(
- FlockingGeese.MeterNames.JAVASCRIPT,
- Speedometer.Attributes.ODOMETER_DISPLAY_VALUE);
- if (naclSpeed == 0 || jsSpeed == 0) {
- speedDifferenceLabel.innerHTML = 'Not available&hellip;';
- speedDifferenceLabel.style.fontStyle = 'italic';
- speedDifferenceLabel.style.color = '#949596';
- } else {
- var diff = naclSpeed / jsSpeed;
- speedDifferenceLabel.innerHTML = diff.toFixed(1) + 'X';
- speedDifferenceLabel.style.fontStyle = 'normal';
- speedDifferenceLabel.style.color = diff > 1.0 ? '#009933' : '#FF0033';
- }
-}
-
-/**
- * Find the center point of the simulation canvas. If the a canvas element
- * with id |GOOSE_CANVAS| doesn't exist, return (0, 0).
- * @return {goog.math.Vec2} The center of the simulation canvas, measured in
- * pixels.
- * @private
- */
-FlockingGeese.prototype.getCanvasCenter_ = function() {
- var flockingCanvas =
- document.getElementById(FlockingGeese.DomIds.GOOSE_CANVAS);
- if (flockingCanvas)
- return new goog.math.Vec2(flockingCanvas.width / 2,
- flockingCanvas.height / 2);
- else
- return new goog.math.Vec2(0, 0);
-}
« no previous file with comments | « experimental/flocking_geese/js/flock.js ('k') | experimental/flocking_geese/js/frame_counter.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698