Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**/ package nape.geom;
- /**/ import nape.mixin.Pool;
- /**/ import nape.mixin.Names;
- /**/ import nape.mixin.MixList;
- /**/ import nape.mixin.Algorithm;
- /**/ import nape.geom.MacMath;
- /**/ import nape.util.FastMath;
- /**/ import nape.Const;
- /**/ #if flash
- /**/ import flash.geom.Point;
- /**/ #end
- /**/ class Vec2 {
- /**/ static public var znape_pool:Vec2;
- /**/ public var znape_next:Vec2;
- /**/ public var znape_npv2:NpV2;
- /**/ public function new() {}
- /**/ public static inline function get(x:Float,y:Float) {
- /**/ var ret = {
- /**/ if(Vec2.znape_pool==null) new Vec2();
- /**/ else {
- /**/ var ret = Vec2.znape_pool;
- /**/ Vec2.znape_pool = ret.znape_next;
- /**/ ret;
- /**/ }
- /**/ };
- /**/ ret.znape_npv2 = NpV2.get(x,y);
- /**/ return ret;
- /**/ }
- /**/ public inline function free () {
- /**/ this.znape_next = Vec2.znape_pool;
- /**/ Vec2.znape_pool = this;
- /**/ this.znape_free();
- /**/ }
- /**/ public inline function znape_free() {
- /**/ znape_npv2.free();
- /**/ znape_npv2 = null;
- /**/ }
- /**/ #if flash
- /**/ public static inline function fromPoint(point:Point) {
- /**/ return get(point.x,point.y);
- /**/ }
- /**/ #end
- /**/ public inline function clone() return get(x(),y())
- /**/ public inline function x() return znape_npv2.x
- /**/ public inline function y() return znape_npv2.y
- /**/ public inline function setX(x:Float) znape_npv2.x = x
- /**/ public inline function setY(y:Float) znape_npv2.y = y
- /**/ public inline function set(x:Float,y:Float) {
- /**/ setX(x);
- /**/ setY(y);
- /**/ }
- /**/ public inline function setvec(v:Vec2) set(v.x(),v.y())
- /**/ #if flash
- /**/ public inline function getPoint() return new Point(x(),y())
- /**/ public inline function setPoint(point:Point) set(point.x,point.y)
- /**/ #end
- /**/ public inline function dotProduct (v:Vec2) return znape_npv2.dot (v.znape_npv2)
- /**/ public inline function crossProduct(v:Vec2) return znape_npv2.cross(v.znape_npv2)
- /**/ public inline function length () return znape_npv2.length()
- /**/ public inline function squaredLength() return znape_npv2.lsq ()
- /**/ public inline function normalise () znape_npv2.normalise()
- /**/ public inline function negate() znape_npv2.negate()
- /**/ public inline function toString() return znape_npv2.toString()
- /**/ }
- /**/ class NpV2 {
- /**/ static public var znape_pool:NpV2;
- /**/ public var znape_next:NpV2;
- /**/ public inline function begin() return znape_next
- /**/ public inline function znp_setbeg(i:NpV2) znape_next=i
- /**/ public inline function znp_new (o:NpV2) return o
- /**/ public inline function znp_delete(i:NpV2) {}
- /**/ public inline function znp_delelt(o:NpV2) {
- /**/ o.znape_next = NpV2.znape_pool;
- /**/ NpV2.znape_pool = o;
- /**/ o.znape_free();
- /**/ }
- /**/ public inline function znp_clear ( ) return true
- /**/ public inline function elem() return this
- /**/ public inline function next() return znape_next
- /**/ public inline function add(o:NpV2) {
- /**/ var temp = znp_new(o);
- /**/ temp.znape_next = begin();
- /**/ znp_setbeg(temp);
- /**/ }
- /**/ public inline function addAll(list: NpV2) {
- /**/ {
- /**/ var npiterator = list.begin();
- /**/ while(npiterator != null) {
- /**/ var i = npiterator.elem();
- /**/ {
- /**/ add(i);
- /**/ }
- /**/ npiterator = npiterator.znape_next;
- /**/ }
- /**/ };
- /**/ }
- /**/ public inline function pop():Void {
- /**/ var ret = begin();
- /**/ znp_setbeg(ret.znape_next);
- /**/ znp_delelt(ret.elem());
- /**/ znp_delete(ret);
- /**/ }
- /**/ public inline function pop_unsafe():NpV2 {
- /**/ var ret = front();
- /**/ pop();
- /**/ return ret;
- /**/ }
- /**/ public inline function remove(obj:NpV2):Bool {
- /**/ var pre = null;
- /**/ var cur = begin();
- /**/ var ret = false;
- /**/ while(cur!=null) {
- /**/ if(cur.elem()==obj) {
- /**/ erase(pre,cur);
- /**/ ret = true;
- /**/ break;
- /**/ }
- /**/ pre = cur;
- /**/ cur = cur.znape_next;
- /**/ }
- /**/ return ret;
- /**/ }
- /**/ public inline function erase(pre:NpV2,cur:NpV2):NpV2 {
- /**/ var old = cur; cur = cur.znape_next;
- /**/ if(pre==null) znp_setbeg (cur);
- /**/ else pre.znape_next = cur;
- /**/ znp_delelt(old.elem());
- /**/ znp_delete(old);
- /**/ return cur;
- /**/ }
- /**/ public inline function splice(pre:NpV2,cur:NpV2,n:Int):NpV2 {
- /**/ while(n-->0 && cur!=null)
- /**/ cur = erase(pre,cur);
- /**/ return cur;
- /**/ }
- /**/ public inline function clear() {
- /**/ if(znp_clear()) {
- /**/ while(!empty()) {
- /**/ var old = begin();
- /**/ znp_setbeg(old.znape_next);
- /**/ znp_delelt(old.elem());
- /**/ znp_delete(old);
- /**/ }
- /**/ }else znp_setbeg(null);
- /**/ }
- /**/ public inline function reverse() {
- /**/ var cur = begin();
- /**/ var pre = null;
- /**/ while(cur!=null) {
- /**/ var nx = cur.znape_next;
- /**/ cur.znape_next = pre;
- /**/ znp_setbeg(cur);
- /**/ pre = cur;
- /**/ cur = nx;
- /**/ }
- /**/ }
- /**/ public inline function empty():Bool return begin()==null
- /**/ public inline function size():Int {
- /**/ var cnt = 0;
- /**/ var cur = begin();
- /**/ while(cur!=null) { cnt++; cur=cur.znape_next; }
- /**/ return cnt;
- /**/ }
- /**/ public inline function has(obj:NpV2) return ({
- /**/ var ret = false;
- /**/ {
- /**/ var npiterator = this.begin();
- /**/ while(npiterator != null) {
- /**/ var npite = npiterator.elem();
- /**/ {
- /**/ {
- /**/ if(npite==obj) {
- /**/ ret = true;
- /**/ break;
- /**/ }
- /**/ };
- /**/ }
- /**/ npiterator = npiterator.znape_next;
- /**/ }
- /**/ };
- /**/ ret;
- /**/ })
- /**/ public inline function front() return begin().elem()
- /**/ public inline function back() {
- /**/ var ret = begin();
- /**/ var cur = ret;
- /**/ while(cur!=null) { ret = cur; cur = cur.znape_next; }
- /**/ return ret.elem();
- /**/ }
- /**/ public inline function at(ind:Int) return iterator_at(ind).elem()
- /**/ public inline function iterator_at(ind:Int) {
- /**/ var ret = begin();
- /**/ while(ind-->0) ret = ret.znape_next;
- /**/ return ret;
- /**/ }
- /**/ public inline function insert(cur:NpV2,o:NpV2) {
- /**/ if(cur==null) { add(o); return begin(); }
- /**/ else {
- /**/ var temp = znp_new(o);
- /**/ temp.znape_next = cur.znape_next;
- /**/ cur.znape_next = temp;
- /**/ return temp;
- /**/ }
- /**/ }
- /**/ public var x:Float; public var y:Float ;
- /**/ public function new() {}
- /**/ public static inline function get(x:Float, y:Float) {
- /**/ var ret = {
- /**/ if(NpV2.znape_pool==null) new NpV2();
- /**/ else {
- /**/ var ret = NpV2.znape_pool;
- /**/ NpV2.znape_pool = ret.znape_next;
- /**/ ret;
- /**/ }
- /**/ };
- /**/ ret.set(x,y);
- /**/ return ret;
- /**/ }
- /**/ public inline function free() {
- /**/ this.znape_next = NpV2.znape_pool;
- /**/ NpV2.znape_pool = this;
- /**/ this.znape_free();
- /**/ }
- /**/ public inline function znape_free() {}
- /**/ public inline function set (x:Float, y:Float) { this.x = x; this.y = y; }
- /**/ public inline function setvec(v:NpV2) { this.x = v.x; this.y = v.y; }
- /**/ public inline function clone() return get(x,y)
- /**/ public inline function negate() {
- /**/ this.x = -this.x;
- /**/ this.y = -this.y;
- /**/ }
- /**/ public inline function dot (v:NpV2) return (this.x*v.x + this.y*v.y)
- /**/ public inline function cross(v:NpV2) return (this.x*v.y - this.y*v.x)
- /**/ public inline function lsq () return (this.x*this.x + this.y*this.y)
- /**/ public inline function length() return FastMath.sqrt( (this.x*this.x + this.y*this.y) )
- /**/ public inline function normalise() {
- /**/ var d = (this.x*this.x + this.y*this.y) ;
- /**/ var imag = if(d<Const.EPSILON) 0 else FastMath.invsqrt(d);
- /**/ this.x *= imag;
- /**/ this.y *= imag;
- /**/ }
- /**/ public inline function toString() return "<"+x+","+y+">"
- /**/ }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement