summaryrefslogtreecommitdiffstats
path: root/Portal.h
diff options
context:
space:
mode:
Diffstat (limited to 'Portal.h')
-rw-r--r--Portal.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/Portal.h b/Portal.h
new file mode 100644
index 0000000..a4cb349
--- /dev/null
+++ b/Portal.h
@@ -0,0 +1,73 @@
+#ifndef PORTAL_H_
+#define PORTAL_H_
+
+#include "LevelObject.h"
+#include "Polygon.h"
+#include <math.h>
+
+
+class Portal : public LevelObject {
+ private:
+ float width, height, thickness;
+ Vertex pos;
+ float orient;
+
+ Polygon createPolygon() const {
+ Polygon p;
+
+ float s = sinf(orient);
+ float c = cosf(orient);
+ float x = width/2*c;
+ float y = width/2*s;
+ float ts = thickness/2*s;
+ float tc = thickness/2*c;
+
+ p.push_back(Vertex(pos.getX()-x-ts, pos.getY()-y+tc));
+ p.push_back(Vertex(pos.getX()-x+ts, pos.getY()-y-tc));
+ p.push_back(Vertex(pos.getX()+x+ts, pos.getY()+y-tc));
+ p.push_back(Vertex(pos.getX()+x-ts, pos.getY()+y+tc));
+
+ return p;
+ }
+
+ public:
+ Portal(float width, float height, float thickness) {
+ this->width = width;
+ this->height = height;
+ this->thickness = thickness;
+
+ orient = 0;
+ }
+
+ float getWidth() const {return width;}
+ float getHeight() const {return height;}
+ float getThickness() const {return thickness;}
+
+ const Vertex& getPosition() const {return pos;}
+ void setPosition(Vertex v) {pos = v;}
+
+ float getOrientation() const {return orient;}
+ void setOrientation(float orient) {this->orient = orient;}
+
+ virtual bool hit(const Vertex &v) const {return createPolygon().contains(v);}
+ virtual int getPriority() const {return 1;}
+
+ virtual const char* getType() const {
+ return "Portal";
+ }
+
+ virtual void move(float x, float y) {
+ pos.setX(pos.getX()+x);
+ pos.setY(pos.getY()+y);
+ }
+
+ virtual void rotate(float a) {
+ orient = fmodf(orient+a, 2*M_PI);
+ }
+
+ virtual Vertex getCenter() const {
+ return pos;
+ }
+};
+
+#endif /*PORTAL_H_*/