#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"); boundTR=_boundTR; boundBR=_boundBR; printf("trapdoor bounds: %f,%f - %f,%f\n",boundTR.x,boundTR.y,boundBR.x,boundBR.y); 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); printf("new trapdoor: %f,%f\n",x,y); position=ofVec2f(x,y); startTime=ofGetElapsedTimef(); doorAngle=0; doorSpeed=0; } vector trapdoor::getCorners(){ vector 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& players) { float segTime=(ofGetElapsedTimef()-startTime); if (segTime>5) start(); if (segTime>3) { 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(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); 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); }