package
{
import com.greensock.TweenLite;
import com.greensock.easing.*
import away3d.core.base.Vertex;
import away3d.materials.BitmapMaterial;
import away3d.materials.ColorMaterial;
import away3d.materials.WireColorMaterial;
import away3d.primitives.BezierPatch;
import away3d.primitives.data.PatchData;
import away3d.containers.ObjectContainer3D;
import away3d.core.base.Vertex;
import flash.display.BitmapData;
import flash.display.Sprite;
/**
$(CBI)* ...
$(CBI)* @author by Özgür Çimen (c) [email protected]
$(CBI)*/
public class warppatch extends ObjectContainer3D
{
private var _patchVerts : Array;
private var _patchMesh : BezierPatch;
private var _texture : BitmapData;
private var _material : BitmapMaterial;
private var _nodes : Array;
private var _uvs : Array;
private var _patchInfo : Array;
private var _segments : int = 10;
private var _patchData : PatchData;
private var wvertex :Array = [];
public function warppatch(ar:Array)
{
wvertex = ar;
createPatch();
}
public function createPatch() : void {
_nodes = new Array();
var array : Array = [];
for (var i : int = 0 ; i < wvertex.length; i ++ )
{
array[i] = i ;
}
_nodes["patch"] = array;
_patchVerts = wvertex;
_uvs = new Array();
_uvs["patch"] = new Array();
_uvs["patch"][BezierPatch.N] = new Array( [1, 1, 0, 0] )
var orientation:int = BezierPatch.N
var mat:WireColorMaterial = new
WireColorMaterial(0x0080C0);
_patchInfo = new Array({ key:"patch",
orientation:orientation, segmentsW:_segments, segmentsH:_segments });
_patchData = new PatchData(_nodes, _patchVerts, _uvs,
_patchInfo, 1);
_patchMesh = new BezierPatch(_patchData,
{ name:"PatchMesh" , material:mat, bothsides:true, ownCanvas:true} );
addChild(_patchMesh);
}
public function setWarpNodePos(_node:int,_x:Number, _y :Number,
_z:Number = 0):void
{
_patchVerts[_node].x = _x;
_patchVerts[_node].y = _y;
_patchVerts[_node].z = _z;
}
public function update():void
{
//warpVerts()
trace(_patchMesh.patchData.vertices[6].x);
_patchMesh.refreshPatch();
}
private function warpVerts() : void
{
var target:Number = _patchVerts[9].z <= 0 ? 1000: -1000
TweenLite.to([5], 1, {z:target, ease: Quad.easeInOut,
onComplete:warpVerts});
TweenLite.to(_patchVerts[6], 1, {z:target, ease:
Quad.easeInOut, onComplete:warpVerts});
TweenLite.to(_patchVerts[9], 1, {z:target, ease:
Quad.easeInOut, onComplete:warpVerts});
TweenLite.to(_patchVerts[10], 1, {z:target, ease:
Quad.easeInOut, onComplete:warpVerts});
}
}
}