github.com/armen/terraform@v0.5.2-0.20150529052519-caa8117a08f1/website/source/assets/javascripts/app/Engine.Shape.js (about)

     1  (function(
     2  	Engine,
     3  	Point,
     4  	Polygon,
     5  	Vector
     6  ){
     7  
     8  Engine.Shape = function(x, y, width, height, points, polygons){
     9  	var i, ref, point, poly;
    10  
    11  	this.pos  = new Vector(x, y);
    12  	this.size = new Vector(width, height);
    13  	this.sizeRef = this.size.clone();
    14  
    15  	ref = {};
    16  	this.points = [];
    17  	this.polygons = [];
    18  
    19  	for (i = 0; i < points.length; i++) {
    20  		point = new Point(
    21  			points[i].id,
    22  			points[i].x,
    23  			points[i].y,
    24  			this.size
    25  		);
    26  		ref[point.id] = point;
    27  		this.points.push(point);
    28  	}
    29  
    30  	for (i = 0; i < polygons.length; i++) {
    31  		poly = polygons[i];
    32  		this.polygons.push(new Polygon(
    33  			ref[poly.points[0]],
    34  			ref[poly.points[1]],
    35  			ref[poly.points[2]],
    36  			poly.color,
    37  			poly.stroke
    38  		));
    39  	}
    40  };
    41  
    42  Engine.Shape.prototype = {
    43  
    44  	breathing: false,
    45  
    46  	breath: 0,
    47  	breathLength: 1,
    48  	breatheIn: false,
    49  
    50  	resize: function(newSize, offset){
    51  		var len, p;
    52  
    53  		this.size.x = newSize;
    54  		this.size.y = newSize;
    55  		this.sizeRef.x = newSize;
    56  		this.sizeRef.y = newSize;
    57  
    58  		this.pos.x = -(newSize / 2);
    59  		this.pos.y = -(newSize / 2 + offset);
    60  
    61  		for (p = 0, len = this.points.length; p < len; p++) {
    62  			this.points[p].resize();
    63  		}
    64  	},
    65  
    66  	startBreathing: function(){
    67  		var p;
    68  
    69  		this.breathing = true;
    70  		this.breath = this.breathLength;
    71  
    72  		for (p = 0; p < this.points.length; p++) {
    73  			this.points[p].updateBreathingPhysics();
    74  		}
    75  	},
    76  
    77  	breathe: function(tick){
    78  		var p, scale, newSize;
    79  
    80  		this.breath += tick;
    81  
    82  		if (this.breath < this.breathLength) {
    83  			return;
    84  		}
    85  
    86  		scale = 1;
    87  
    88  		newSize = Vector.mult(this.sizeRef, scale);
    89  
    90  		for (p = 0; p < this.points.length; p++) {
    91  			this.points[p].updateTarget(newSize);
    92  		}
    93  
    94  		this.breath = 0;
    95  	},
    96  
    97  	update: function(engine){
    98  		var p;
    99  
   100  		if (this.breathing === true) {
   101  			this.breathe(engine.tick);
   102  		}
   103  
   104  		for (p = 0; p < this.points.length; p++)  {
   105  			this.points[p].update(engine);
   106  		}
   107  
   108  		for (p = 0; p < this.polygons.length; p++) {
   109  			this.polygons[p].update(engine);
   110  		}
   111  
   112  		return this;
   113  	},
   114  
   115  	draw: function(ctx, scale, engine){
   116  		var p, poly;
   117  
   118  		ctx.translate(
   119  			this.pos.x * scale >> 0,
   120  			this.pos.y * scale >> 0
   121  		);
   122  		for (p = 0; p < this.polygons.length; p++) {
   123  			poly = this.polygons[p];
   124  			ctx.beginPath();
   125  			ctx.moveTo(
   126  				poly.a.pos.x * scale,
   127  				poly.a.pos.y * scale
   128  			);
   129  			ctx.lineTo(
   130  				poly.b.pos.x * scale,
   131  				poly.b.pos.y * scale
   132  			);
   133  			ctx.lineTo(
   134  				poly.c.pos.x * scale,
   135  				poly.c.pos.y * scale
   136  			);
   137  			ctx.closePath();
   138  			ctx.fillStyle   = poly.fillStyle;
   139  			ctx.fill();
   140  			ctx.lineWidth = poly.strokeWidth * scale;
   141  			ctx.strokeStyle = poly.strokeStyle;
   142  			ctx.stroke();
   143  		}
   144  		ctx.setTransform(1, 0, 0, 1, 0, 0);
   145  		ctx.translate(
   146  			engine.width  / 2 * engine.scale >> 0,
   147  			engine.height / 2 * engine.scale >> 0
   148  		);
   149  		return this;
   150  	}
   151  
   152  };
   153  
   154  })(
   155  	window.Engine,
   156  	window.Engine.Point,
   157  	window.Engine.Polygon,
   158  	window.Vector
   159  );