public void Run()
{
_backgroundImageElement = Document.GetElementById("backgroundImage").As<ImageElement>();
_imageStripElement = Document.GetElementById("imageStrip").As<ImageElement>();
_tankCanvas = Document.GetElementById("fishTankCanvas").As<CanvasElement>();
_fishesCanvas = Document.GetElementById("fishesCanvas").As<CanvasElement>();
Debug.Assert(_backgroundImageElement != null);
Debug.Assert(_imageStripElement != null);
Debug.Assert(_tankCanvas != null);
Debug.Assert(_fishesCanvas != null);
_tankCanvasContext = (CanvasContext2D)_tankCanvas.GetContext(Rendering.Render2D);
_fishesCanvasContext = (CanvasContext2D)_fishesCanvas.GetContext(Rendering.Render2D);
_fishes = new List<Fish>();
for (int i = 0; i < FishTank.FishCount; i++) {
double x = Math.Floor(Math.Random() * (_width - FishTank.FishWidth) + FishTank.FishWidth / 2);
double y = Math.Floor(Math.Random() * (_height - FishTank.FishHeight) + FishTank.FishHeight / 2);
double z = Math.Floor(Math.Random() * (FishTank.ZFar - FishTank.ZNear));
_fishes.Add(new Fish(this, x, y, z, _imageStripElement, _fishesCanvasContext));
}
OnWindowResize(null);
Window.AddEventListener("resize", OnWindowResize, false);
_tickHandler = OnTick;
QueueUpdate();
}