/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/bjpy
*/
package {
import flash.text.TextField;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public var deb:TextField;
public function FlashTest() {
deb = new TextField();
deb.x = 4;
deb.y = 4;
deb.width = 400;
deb.height = 50;
addChild(deb);
vecTri.push(new Tri(new Vert(32,32, 0,0),
new Vert(128,32,0.5,0),
new Vert(32,128,0,0.5)));
vecTri.push(new Tri(new Vert(128,32, 0.5,0),
new Vert(128,128,0.5,0.5),
new Vert(32,128,0,0.5)));
vecTri.push(new Tri(new Vert(32+96,32, 0+0.5,0),
new Vert(128+96,32,0.5+0.5,0),
new Vert(32+96,128,0+0.5,0.5)));
vecTri.push(new Tri(new Vert(128+96,32, 0.5+0.5,0),
new Vert(128+96,128,0.5+0.5,0.5),
new Vert(32+96,128,0+0.5,0.5)));z
vecTri.push(new Tri(new Vert(32,32+96, 0+0.5,0+0.5),
new Vert(128,32+96,0.5+0.5,0+0.5),
new Vert(32,128+96,0+0.5,0.5+0.5)));
vecTri.push(new Tri(new Vert(128,32+96, 0.5+0.5,0+0.5),
new Vert(128,128+96,0.5+0.5,0.5+0.5),
new Vert(32,128+96,0+0.5,0.5+0.5)));
vecTri.push(new Tri(new Vert(32+96,32+96, 0+0.5,0+0.5),
new Vert(128+96,32+96,0.5+0.5,0+0.5),
new Vert(32+96,128+96,0+0.5,0.5+0.5)));
vecTri.push(new Tri(new Vert(128+96,32+96, 0.5+0.5,0+0.5),
new Vert(128+96,128+96,0.5+0.5,0.5+0.5),
new Vert(32+96,128+96,0+0.5,0.5+0.5)));
vecVert = collectVert(vecTri);
vecMerge = mergeVert(vecVert);
deb.text = "vecVert: " + vecVert.length + " vecMerge: " + vecMerge.length;
replaceVert(vecTri, vecMerge);
/*
//test
var v:Vert;
v = vecMerge[3];
v.y += 32;
v.x += 32;
*/
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecTri:Array = new Array();
public var vecVert:Array;
public var vecMerge:Array;
public function replaceVert(tvec:Array, vvec:Array):void
{
var i:int;
var k:int;
var num:int;
var knum:int;
var v:Vert;
var t:Tri;
num = tvec.length;
knum = vvec.length;
for (i = 0; i < num; i++)
{
t = tvec[i];
for (k = 0; k < knum; k++)
{
v = vvec[k];
if (t.v0.x == v.x && t.v0.y == v.y) { t.v0 = v; }
if (t.v1.x == v.x && t.v1.y == v.y) { t.v1 = v; }
if (t.v2.x == v.x && t.v2.y == v.y) { t.v2 = v; }
}//nextk
}//nexti
}//replace
public function mergeVert(vec:Array):Array
{
var ret:Array;
ret = new Array();
var i:int;
var k:int;
var num:int;
var v:Vert;
var o:Vert;
num = vec.length;
for (i =0; i < num; i++)
{
v = vec[i];
if (v.bTested) { continue; }
v.bTested = true;
ret.push(v);
for (k = 0; k < num; k++)
{
if (k == i) { continue; }
o = vec[k];
if (o == v) { continue; }
if (v.x == o.x && v.y == o.y)
{
o.bTested = true;
}//endif
}//nextk
}//nexti
return ret;
}//merge
public function collectVert(vec:Array):Array
{
var ret:Array;
ret = new Array();
var i:int;
var num:int;
var t:Tri;
num = vec.length;
for (i =0; i < num; i++)
{
t = vec[i];
ret.push(t.v0);
ret.push(t.v1);
ret.push(t.v2);
}//nexti
return ret;
}//collectvert
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2,0);
var t:Tri;
var i:int;
var num:int;
var v0:Vert;
var v1:Vert;
var v2:Vert;
num = vecTri.length;
for (i = 0; i < num; i++)
{
t = vecTri[i];
v0 = t.v0;
v1 = t.v1;
v2 = t.v2;
graphics.moveTo(v0.x, v0.y);
graphics.lineTo(v1.x, v1.y);
graphics.moveTo(v1.x, v1.y);
graphics.lineTo(v2.x, v2.y);
graphics.moveTo(v2.x, v2.y);
graphics.lineTo(v0.x, v0.y);
}//nexti
}//enter
}//classend
}
internal class Vert
{
public var x:Number = 0;
public var y:Number = 0;
public var u:Number = 0;
public var v:Number = 0;
public var bTested:Boolean = false;
public function Vert(x_:Number=0,y_:Number=0,u_:Number=0,v_:Number=0)
{
x = x_;
y = y_;
u = u_;
v = v_;
}//ctor
}//vert
internal class Tri
{
public var v0:Vert;
public var v1:Vert;
public var v2:Vert;
public function Tri(v0_:Vert, v1_:Vert, v2_:Vert)
{
v0 = v0_;
v1 = v1_;
v2 = v2_;
}
}//tri