summaryrefslogtreecommitdiff
path: root/gaunt01/src/trapdoor.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2012-04-01 23:07:39 +0100
committerTim Redfern <tim@eclectronics.org>2012-04-01 23:07:39 +0100
commit0363ee4f188c735a43c6624a2b10a191f74c3029 (patch)
treeb24e56926c4d7055767f98230b9a8da5b70baccf /gaunt01/src/trapdoor.cpp
parent1b9e8ee051740c4b7f35ffc72648364192e35f59 (diff)
nearly working trap door
Diffstat (limited to 'gaunt01/src/trapdoor.cpp')
-rw-r--r--gaunt01/src/trapdoor.cpp51
1 files changed, 41 insertions, 10 deletions
diff --git a/gaunt01/src/trapdoor.cpp b/gaunt01/src/trapdoor.cpp
index b9ec952..ce06b4a 100644
--- a/gaunt01/src/trapdoor.cpp
+++ b/gaunt01/src/trapdoor.cpp
@@ -1,6 +1,6 @@
#include "trapdoor.h"
-trapdoor::trapdoor(ofRectangle _boundingRect,ofVec2f _doorSize)
+trapdoor::trapdoor(ofVec2f _boundTR,ofVec2f _boundBR,ofVec2f _doorSize)
{
surround=morphmesh("trapdoor-surround.xml");
lid=morphmesh("trapdoor-lid.xml");
@@ -8,8 +8,12 @@ trapdoor::trapdoor(ofRectangle _boundingRect,ofVec2f _doorSize)
texture.loadImage("TextureTrapdoor.jpg");
- boundingRect=_boundingRect;
- doorSize=_doorSize;
+ boundTR=_boundTR;
+ boundBR=_boundBR;
+
+ printf("trapdoor bounds: %f,%f - %f,%f\n",boundTR.x,boundTR.y,boundBR.x,boundBR.y);
+
+ size=_doorSize;
start();
}
@@ -17,40 +21,67 @@ trapdoor::trapdoor(ofRectangle _boundingRect,ofVec2f _doorSize)
trapdoor::~trapdoor() {}
void trapdoor::start(){
- position=ofVec2f(boundingRect.x+ofRandom(boundingRect.width),boundingRect.y+ofRandom(boundingRect.height));
+ //place trapdoor within bounds
+ float u=ofRandom(-0.9,0.9); //(-1 to 1)
+ float v=ofRandom(0.05,0.95);
+ float mx=ofGetWidth()/2;
+
+ float x=mx+((boundTR.x-mx)*u*(1-v))+((boundBR.x-mx)*u*v);
+ float y=boundTR.y+((boundBR.y-boundTR.y)*v);
+ printf("new trapdoor: %f,%f\n",x,y);
+
+ position=ofVec2f(x,y);
startTime=ofGetElapsedTimef();
doorAngle=0;
doorSpeed=0;
}
+
+vector<ofVec2f> trapdoor::getCorners(){
+ vector<ofVec2f> corners;
+ corners.push_back(ofVec2f(-size.x/2,-size.y/2));
+ corners.push_back(ofVec2f(size.x/2,-size.y/2));
+ corners.push_back(ofVec2f(size.x/2,size.y/2));
+ corners.push_back(ofVec2f(-size.x/2,size.y/2));
+ return corners;
+}
+
+ofVec2f trapdoor::bounds2UV(ofVec2f point){
+ //returns the 0-1 UV coords of a point on the ground plane relative to its bounds.
+ float v=(point.y-boundTR.y)/(boundBR.y-boundTR.y);
+ float mx=ofGetWidth()/2;
+ float u=((point.x-mx)/(((boundTR.x-mx)*(1-v))+((boundBR.x-mx)*v)))+0.5;
+ return ofVec2f(u,v);
+}
void trapdoor::checkUpdate(const vector<ofVec3f>& players) {
float segTime=(ofGetElapsedTimef()-startTime);
if (segTime>5) start();
if (segTime>3) {
- doorSpeed=(doorSpeed+((cos(doorAngle*0.0174532925)/ofGetFrameRate())*100))*0.95;
- doorAngle+=doorSpeed;
+ doorSpeed=(doorSpeed+((cos(doorAngle*0.0174532925)/ofGetFrameRate())*50))*0.95;
+ doorAngle-=doorSpeed;
}
}
void trapdoor::draw() {
glEnable(GL_DEPTH_TEST);
+ ofSetHexColor(0xffffff);
bindTexture(texture);
ofPushMatrix();
ofRotate(90,-1,0,0);
- ofTranslate(position.x,0,position.y);
- ofRotate(180,-1,0,0);
+ ofTranslate(ofVec3f(position.x,0,position.y));
+ //ofRotate(180,-1,0,0);
//for now size =40x40
ofScale(.1,.1,.1);
surround.draw();
ofPushMatrix();
ofTranslate(90,0,0);
- ofRotate(doorAngle,0,0,1);
+ ofRotate(doorAngle,0,0,-1);
lid.draw();
ofPopMatrix();
ofPushMatrix();
ofTranslate(-90,0,0);
ofRotate(180,0,1,0);
- ofRotate(doorAngle,0,0,1);
+ ofRotate(doorAngle,0,0,-1);
lid.draw();
ofPopMatrix();
ofPopMatrix();