#include "trapdoor.h" trapdoor::trapdoor(ofVec2f _boundTR,ofVec2f _boundBR,ofVec2f _doorSize) { surround=morphmesh("trapdoor-surround.xml"); lid=morphmesh("trapdoor-lid.xml"); if (!surround.isLoaded()||!lid.isLoaded()) printf("problem loading trap door mesh.\n"); texture.loadImage("TextureTrapdoor.jpg"); sounds=new ofSoundPlayer[4]; sounds[0].loadSound("creeky door short1.wav"); sounds[1].loadSound("creeky door short2.wav"); sounds[2].loadSound("creeky door short3.wav"); sounds[3].loadSound("voice falling down hole.wav"); boundTR=_boundTR; boundBR=_boundBR; size=_doorSize; start(); } trapdoor::~trapdoor() { } void trapdoor::start(){ //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); startPos(ofVec2f(x,y)); } void trapdoor::startPos(ofVec2f pos){ position=pos; startTime=ofGetElapsedTimef(); doorAngle=0; doorSpeed=0; opening=false; //for (int i=0;i<4;i++) sounds[i].stop(); } vector trapdoor::getCorners(){ vector corners; corners.push_back(ofVec2f(position.x-(size.x/2),position.y-(size.y/2))); corners.push_back(ofVec2f(position.x+(size.x/2),position.y-(size.y/2))); corners.push_back(ofVec2f(position.x+(size.x/2),position.y+(size.y/2))); corners.push_back(ofVec2f(position.x-(size.x/2),position.y+(size.y/2))); return corners; } void trapdoor::setBoundingRect(float x,float y, float width,float height){ boundingRect=ofRectangle(x,y,width,height); } ofRectangle trapdoor::getBoundingRect(){ return boundingRect; } 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); } bool trapdoor::checkUpdate(const vector& players) { float segTime=(ofGetElapsedTimef()-startTime); if (segTime>3) { doorSpeed=(doorSpeed+((cos(doorAngle*0.0174532925)/ofGetFrameRate())*50))*0.95; doorAngle-=doorSpeed; if (!opening) { int whichsound=(int)ofRandom(2.9999999); sounds[whichsound].play(); //sound.play(); opening=true; } } if (segTime>6) { start(); return true; } else return false; } void trapdoor::draw() { glEnable(GL_DEPTH_TEST); ofSetHexColor(0xffffff); bindTexture(texture); ofPushMatrix(); //ofRotate(90,-1,0,0); ofTranslate(ofVec3f(position.x,position.y,0)); //ofRotate(180,-1,0,0); //for now size =40x40 ofRotate(90,-1,0,0); ofScale(.15,.15,.15); surround.draw(); ofPushMatrix(); ofTranslate(90,0,0); ofRotate(doorAngle,0,0,-1); lid.draw(); ofPopMatrix(); ofPushMatrix(); ofTranslate(-90,0,0); ofRotate(180,0,1,0); ofRotate(doorAngle,0,0,-1); lid.draw(); ofPopMatrix(); ofPopMatrix(); unbindTexture(texture); glDisable(GL_DEPTH_TEST); }