diff options
Diffstat (limited to 'gaunt01/src/trapdoor.cpp')
| -rw-r--r-- | gaunt01/src/trapdoor.cpp | 51 |
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(); |
