summaryrefslogtreecommitdiff
path: root/static/tests/canvas1/jsplatformer5_files/RepeatingGameObject.js
diff options
context:
space:
mode:
authordumpfmprod <dumpfmprod@ubuntu.(none)>2010-06-17 00:34:02 -0400
committerdumpfmprod <dumpfmprod@ubuntu.(none)>2010-06-17 00:34:02 -0400
commite890d6d91db6d716beeb22c94d6bf0a9d88f1ef5 (patch)
tree9891d77bbfaa7459783605b29906d3aa06ba5801 /static/tests/canvas1/jsplatformer5_files/RepeatingGameObject.js
parentf43aa915a5b5268b7b05e2a3f15d128ee218ade5 (diff)
sostler prod commit
Diffstat (limited to 'static/tests/canvas1/jsplatformer5_files/RepeatingGameObject.js')
-rw-r--r--static/tests/canvas1/jsplatformer5_files/RepeatingGameObject.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/static/tests/canvas1/jsplatformer5_files/RepeatingGameObject.js b/static/tests/canvas1/jsplatformer5_files/RepeatingGameObject.js
new file mode 100644
index 0000000..b145e97
--- /dev/null
+++ b/static/tests/canvas1/jsplatformer5_files/RepeatingGameObject.js
@@ -0,0 +1,90 @@
+/**
+ A class that display a repeating texture that can optionall be offset in either
+ the x or y axis
+ @author <a href="mailto:matthewcasperson@gmail.com">Matthew Casperson</a>
+ @class
+*/
+function RepeatingGameObject()
+{
+ /** The width that the final image will take up
+ @type Number
+ */
+ this.width = 0;
+ /** The height that the final image will take up
+ @type Number
+ */
+ this.height = 0;
+ /** How much of the scrollX and scrollY to apply when drawing
+ @type Number
+ */
+ this.scrollFactor = 1;
+
+ /**
+ Initialises this object
+ @return A reference to the initialised object
+ */
+ this.startupRepeatingGameObject = function(image, x, y, z, width, height, scrollFactor)
+ {
+ this.startupVisualGameObject(image, x, y, z);
+ this.width = width;
+ this.height = height;
+ this.scrollFactor = scrollFactor;
+ return this;
+ }
+
+ /**
+ Clean this object up
+ */
+ this.shutdownstartupRepeatingGameObject = function()
+ {
+ this.shutdownVisualGameObject();
+ }
+
+ /**
+ Draws this element to the back buffer
+ @param dt Time in seconds since the last frame
+ @param context The context to draw to
+ @param xScroll The global scrolling value of the x axis
+ @param yScroll The global scrolling value of the y axis
+ */
+ this.draw = function(dt, canvas, xScroll, yScroll)
+ {
+ var areaDrawn = [0, 0];
+
+ for (var y = 0; y < this.height; y += areaDrawn[1])
+ {
+ for (var x = 0; x < this.width; x += areaDrawn[0])
+ {
+ // the top left corner to start drawing the next tile from
+ var newPosition = [this.x + x, this.y + y];
+ // the amount of space left in which to draw
+ var newFillArea = [this.width - x, this.height - y];
+ // the first time around you have to start drawing from the middle of the image
+ // subsequent tiles alwyas get drawn from the top or left
+ var newScrollPosition = [0, 0];
+ if (x==0) newScrollPosition[0] = xScroll * this.scrollFactor;
+ if (y==0) newScrollPosition[1] = yScroll * this.scrollFactor;
+ areaDrawn = this.drawRepeat(canvas, newPosition, newFillArea, newScrollPosition);
+ }
+ }
+ }
+
+ this.drawRepeat = function(canvas, newPosition, newFillArea, newScrollPosition)
+ {
+ // find where in our repeating texture to start drawing (the top left corner)
+ var xOffset = Math.abs(newScrollPosition[0]) % this.image.width;
+ var yOffset = Math.abs(newScrollPosition[1]) % this.image.height;
+ var left = newScrollPosition[0]<0?this.image.width-xOffset:xOffset;
+ var top = newScrollPosition[1]<0?this.image.height-yOffset:yOffset;
+ var width = newFillArea[0] < this.image.width-left?newFillArea[0]:this.image.width-left;
+ var height = newFillArea[1] < this.image.height-top?newFillArea[1]:this.image.height-top;
+
+ // draw the image
+ canvas.drawImage(this.image, left, top, width, height, newPosition[0], newPosition[1], width, height);
+
+ return [width, height];
+ }
+
+
+}
+RepeatingGameObject.prototype = new VisualGameObject();