aboutsummaryrefslogtreecommitdiff
path: root/archive/include/hgevector.h
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
commit3bd383baf6a17e734329e1fc677c7e86283db772 (patch)
tree69a9148087577f797624ceb9c71323a2563d6bb4 /archive/include/hgevector.h
parent543e4f570be9b279ba558ca61cc02cda251af384 (diff)
downloadbullet-lab-remix-3bd383baf6a17e734329e1fc677c7e86283db772.tar.xz
Added support for relative line numbers.
Added instructions for, brk and cont. (They are still untested...) Parser code cleanup. Removed garbage output to stderr. Reorganize the repository structure. Updated BLR2 code move it into archive. Added BLR1 files.
Diffstat (limited to 'archive/include/hgevector.h')
-rw-r--r--archive/include/hgevector.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/archive/include/hgevector.h b/archive/include/hgevector.h
new file mode 100644
index 0000000..b86bd01
--- /dev/null
+++ b/archive/include/hgevector.h
@@ -0,0 +1,54 @@
+/*
+** Haaf's Game Engine 1.7
+** Copyright (C) 2003-2007, Relish Games
+** hge.relishgames.com
+**
+** hgeVector helper class
+*/
+
+
+#ifndef HGEVECTOR_H
+#define HGEVECTOR_H
+
+#include <math.h>
+
+/*
+** Fast 1.0/sqrtf(float) routine
+*/
+float InvSqrt(float x);
+
+class hgeVector
+{
+public:
+ float x,y;
+
+ hgeVector(float _x, float _y) { x=_x; y=_y; }
+ hgeVector() { x=0; y=0; }
+
+ hgeVector operator- () const { return hgeVector(-x, -y); }
+ hgeVector operator- (const hgeVector &v) const { return hgeVector(x-v.x, y-v.y); }
+ hgeVector operator+ (const hgeVector &v) const { return hgeVector(x+v.x, y+v.y); }
+ hgeVector& operator-= (const hgeVector &v) { x-=v.x; y-=v.y; return *this; }
+ hgeVector& operator+= (const hgeVector &v) { x+=v.x; y+=v.y; return *this; }
+ bool operator== (const hgeVector &v) const { return (x==v.x && y==v.y); }
+ bool operator!= (const hgeVector &v) const { return (x!=v.x || y!=v.y); }
+
+ hgeVector operator/ (const float scalar) const { return hgeVector(x/scalar, y/scalar); }
+ hgeVector operator* (const float scalar) const { return hgeVector(x*scalar, y*scalar); }
+ hgeVector& operator*= (const float scalar) { x*=scalar; y*=scalar; return *this; }
+
+ float Dot(const hgeVector *v) const { return x*v->x + y*v->y; }
+ float Length() const { return sqrtf(Dot(this)); }
+ float Angle(const hgeVector *v = 0) const;
+
+ void Clamp(const float max) { if(Length() > max) { Normalize(); x *= max; y *= max; } }
+ hgeVector* Normalize() { float rc=InvSqrt(Dot(this)); x*=rc; y*=rc; return this; }
+ hgeVector* Rotate(float a);
+};
+
+inline hgeVector operator* (const float s, const hgeVector &v) { return v*s; }
+inline float operator^ (const hgeVector &v, const hgeVector &u) { return v.Angle(&u); }
+inline float operator% (const hgeVector &v, const hgeVector &u) { return v.Dot(&u); }
+
+
+#endif