2013-08-28 06:02:55 +00:00
|
|
|
/**
|
|
|
|
* @author Mat Groves http://matgroves.com/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
PIXI.Rope = function(texture, points)
|
|
|
|
{
|
|
|
|
PIXI.Strip.call( this, texture );
|
|
|
|
this.points = points;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
try
|
|
|
|
{
|
|
|
|
this.verticies = new Float32Array( points.length * 4);
|
|
|
|
this.uvs = new Float32Array( points.length * 4);
|
|
|
|
this.colors = new Float32Array( points.length * 2);
|
|
|
|
this.indices = new Uint16Array( points.length * 2);
|
|
|
|
}
|
|
|
|
catch(error)
|
|
|
|
{
|
|
|
|
this.verticies = verticies
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
this.uvs = uvs
|
|
|
|
this.colors = colors
|
|
|
|
this.indices = indices
|
|
|
|
}
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
this.refresh();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// constructor
|
|
|
|
PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype );
|
|
|
|
PIXI.Rope.prototype.constructor = PIXI.Rope;
|
|
|
|
|
|
|
|
PIXI.Rope.prototype.refresh = function()
|
|
|
|
{
|
|
|
|
var points = this.points;
|
|
|
|
if(points.length < 1)return;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var uvs = this.uvs
|
|
|
|
var indices = this.indices;
|
|
|
|
var colors = this.colors;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var lastPoint = points[0];
|
|
|
|
var nextPoint;
|
|
|
|
var perp = {x:0, y:0};
|
|
|
|
var point = points[0];
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
this.count-=0.2;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
uvs[0] = 0
|
|
|
|
uvs[1] = 1
|
|
|
|
uvs[2] = 0
|
|
|
|
uvs[3] = 1
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
colors[0] = 1;
|
|
|
|
colors[1] = 1;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
indices[0] = 0;
|
|
|
|
indices[1] = 1;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var total = points.length;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
|
|
|
for (var i = 1; i < total; i++)
|
2013-08-28 06:02:55 +00:00
|
|
|
{
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var point = points[i];
|
|
|
|
var index = i * 4;
|
|
|
|
// time to do some smart drawing!
|
|
|
|
var amount = i/(total-1)
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
if(i%2)
|
|
|
|
{
|
|
|
|
uvs[index] = amount;
|
|
|
|
uvs[index+1] = 0;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
uvs[index+2] = amount
|
|
|
|
uvs[index+3] = 1
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
uvs[index] = amount
|
|
|
|
uvs[index+1] = 0
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
uvs[index+2] = amount
|
|
|
|
uvs[index+3] = 1
|
|
|
|
}
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
index = i * 2;
|
|
|
|
colors[index] = 1;
|
|
|
|
colors[index+1] = 1;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
index = i * 2;
|
|
|
|
indices[index] = index;
|
|
|
|
indices[index + 1] = index + 1;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
lastPoint = point;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
PIXI.Rope.prototype.updateTransform = function()
|
|
|
|
{
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var points = this.points;
|
|
|
|
if(points.length < 1)return;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
|
|
|
var verticies = this.verticies
|
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var lastPoint = points[0];
|
|
|
|
var nextPoint;
|
|
|
|
var perp = {x:0, y:0};
|
|
|
|
var point = points[0];
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
this.count-=0.2;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
|
|
|
verticies[0] = point.x + perp.x
|
2013-08-28 06:02:55 +00:00
|
|
|
verticies[1] = point.y + perp.y //+ 200
|
2013-11-06 04:51:23 +00:00
|
|
|
verticies[2] = point.x - perp.x
|
2013-08-28 06:02:55 +00:00
|
|
|
verticies[3] = point.y - perp.y//+200
|
|
|
|
// time to do some smart drawing!
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var total = points.length;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
|
|
|
for (var i = 1; i < total; i++)
|
2013-08-28 06:02:55 +00:00
|
|
|
{
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var point = points[i];
|
|
|
|
var index = i * 4;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
if(i < points.length-1)
|
|
|
|
{
|
|
|
|
nextPoint = points[i+1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
nextPoint = point
|
|
|
|
}
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
perp.y = -(nextPoint.x - lastPoint.x);
|
|
|
|
perp.x = nextPoint.y - lastPoint.y;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var ratio = (1 - (i / (total-1))) * 10;
|
|
|
|
if(ratio > 1)ratio = 1;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y);
|
|
|
|
var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio;
|
|
|
|
perp.x /= perpLength;
|
|
|
|
perp.y /= perpLength;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
perp.x *= num;
|
|
|
|
perp.y *= num;
|
2013-11-06 04:51:23 +00:00
|
|
|
|
|
|
|
verticies[index] = point.x + perp.x
|
2013-08-28 06:02:55 +00:00
|
|
|
verticies[index+1] = point.y + perp.y
|
2013-11-06 04:51:23 +00:00
|
|
|
verticies[index+2] = point.x - perp.x
|
2013-08-28 06:02:55 +00:00
|
|
|
verticies[index+3] = point.y - perp.y
|
|
|
|
|
|
|
|
lastPoint = point;
|
|
|
|
}
|
2013-11-06 04:51:23 +00:00
|
|
|
|
2013-08-28 06:02:55 +00:00
|
|
|
PIXI.DisplayObjectContainer.prototype.updateTransform.call( this );
|
|
|
|
}
|
|
|
|
|
|
|
|
PIXI.Rope.prototype.setTexture = function(texture)
|
|
|
|
{
|
2013-11-06 04:51:23 +00:00
|
|
|
// stop current texture
|
2013-08-28 06:02:55 +00:00
|
|
|
this.texture = texture;
|
|
|
|
this.updateFrame = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|