From 7eb7b1a64d5a22ae707c0a9d4115cb3c326f472f Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Thu, 19 Apr 2012 03:14:18 +0100 Subject: working border --- gaunt01/src/testApp.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 8 deletions(-) (limited to 'gaunt01/src/testApp.cpp') diff --git a/gaunt01/src/testApp.cpp b/gaunt01/src/testApp.cpp index 4047f69..785eb5a 100644 --- a/gaunt01/src/testApp.cpp +++ b/gaunt01/src/testApp.cpp @@ -13,6 +13,39 @@ Is this too much work for every frame? Should it be put in a seperate thread? */ + +bool OutsidePolygon(vector& polygon,ofPoint p) +//thanks to Paul Bourke +//http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/ +{ + int counter = 0; + int i; + double xinters; + ofPoint p1,p2; + + p1 = polygon[0]; + for (i=1;i<=polygon.size();i++) { + p2 = polygon[i % polygon.size()]; + if (p.y > min(p1.y,p2.y)) { + if (p.y <= max(p1.y,p2.y)) { + if (p.x <= max(p1.x,p2.x)) { + if (p1.y != p2.y) { + xinters = (p.y-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x; + if (p1.x == p2.x || p.x <= xinters) + counter++; + } + } + } + } + p1 = p2; + } + + if (counter % 2 == 0) + return true; + else + return false; +} + void testApp::setup(){ bLearnBakground = true; @@ -96,6 +129,8 @@ void testApp::setup(){ light.setPosition(ofGetWidth(),0,ofGetHeight()); light.enable(); + + drawingborder=false; } @@ -294,7 +329,10 @@ void testApp::update(){ players[blobsManager.blobs.at(i).id].update(blob); //create model } map::iterator it; - for (it=players.begin();it!=players.end();it++) if(ids.find(it->first)==ids.end()) it->second.active=false; + for (it=players.begin();it!=players.end();it++) { + if (ids.find(it->first)==ids.end()||(border.size()>3&&OutsidePolygon(border,ofPoint(it->second.getWorldPosition().x,it->second.getWorldPosition().y)))) it->second.active=false; + else it->second.active=true; + } } if (trapDoor.checkUpdate(players)) updatePlane(); Bird.update(players,cam_angle); @@ -339,8 +377,9 @@ void testApp::draw(){ glDisable(GL_DEPTH_TEST); ofSetHexColor(0xffffff); colorImg.getTextureReference().bind(); + map::iterator it; for(int i=0;i1) { + ofSetHexColor(0x00ff00); + ofPushMatrix(); + ofRotate(cam_angle,1,0,0); + for (int i=0;i