示例#1
0
//--------------------------------------------------------------
void testApp::update() {

	
	
	box2d.update();
  
  switch(mode){
    case START:{


    }
      break;
    case WON:{
      if(ofGetElapsedTimeMillis()-trans_time > 3000){
        mode=START;
        customParticles.clear();
        bullets.clear();
        apples.clear();
        level=0;
      }
     
    }
      break;
    case PLAY:
      if(ofGetElapsedTimeMillis()-sprite_timer >500){
        sprite_timer= ofGetElapsedTimeMillis();
        CustomParticle * p = customParticles[0].get();
        p->cur.loadImage("hero.gif");
        p->cur.resize(p->cur.getWidth()*0.05, p->cur.getHeight()*0.05);
        p->height= p->cur.getHeight();
        p->width = p->cur.getWidth();
      }
      //BOSS BATTLE
      if(level==4){
        CustomParticle * p = customParticles[1].get();
        
          if(p->getPosition().x > ofGetWidth()-20){
            p->setVelocity(-p->getVelocity().x, p->getVelocity().y);
          }
      
        idx++;
        if(idx%(int)ofRandom(50, 100) == 0){
          customParticles[1].get()->addAttractionPoint(movePt, -4.0f);
         
          movePt.x=(int)ofRandom(100,620);
          movePt.y=(int)ofRandom(10,400);
          
          customParticles[1].get()->addAttractionPoint(movePt, 10.0f);
        }
      }
      
      //BULLETS
      for(int i=0; i<bullets.size(); i++) {
        bullets[i].get()->age++;
        if(bullets[i].get()->age > 100){
          bullets.erase(bullets.begin()+i);
        }
      }
      //BAD BULLETS
      if(level > 1){
        int prob=20;
        if(level == 4) prob=30;
        if(ofRandom(1000)<prob){
          ofLog()<<"SHOOOOOOOT";
  //        shoot.play();
          apples.push_back(ofPtr<Bullet>(new Bullet(1)));
          Bullet * p = apples.back().get();
          
          p->setPhysics(0.4, 0.5, 0.31);
          p->setup(box2d.getWorld(), customParticles[1]->getPosition().x, customParticles[1]->getPosition().y-10, p->width, p->height);
          p->addForce(customParticles[1]->getVelocity(), 80);
          p->addForce(ofVec2f(0,1), 60);
          if(level > 2){
            p->addAttractionPoint(customParticles[0].get()->getPosition(), 50.0f);
          }
          
          SoundData * s = new SoundData();
         
          p->setData(s);
         
          SoundData * sd = (SoundData*)p->getData();
          sd->type = BADBULLET;
          sd->bHit	= false;
        }
      }
      
      for(int i=0; i<apples.size(); i++) {
        apples[i].get()->age++;
        if(apples[i].get()->age > 100){
          apples.erase(apples.begin()+i);
        }
      }
      
      for(int i=0; i<customParticles.size();i++){
        CustomParticle * p = customParticles[i].get();
        if(i==0){
          if(p->getPosition().x > ofGetWidth()-50){
            p->setVelocity(-p->getVelocity().x, p->getVelocity().y);
          }
        }
        SoundData * sd = (SoundData*)p->getData();
        if(sd->bHit){
          customParticles[i].get()->hurt(10);
        }
        if(p->hp < 0 && i!= 0){
          
          p->addForce(ofVec2f(3,-5), 40);

        }
        if(customParticles[0].get()->hp < 0){
          trans_time = ofGetElapsedTimeMillis();
          //win.play();
          ofLog()<<"LOST";
          mode=LOST;
        }
        
        if((customParticles.size()< 2 || customParticles[1].get()->hp < 0) &&ofGetElapsedTimeMillis()-trans_time > 500){
          if(level<4){
            ofLog()<<"LVLUP";
            level++;
            setLevel(level);
            trans_time=ofGetElapsedTimeMillis();
//          }else{
//            trans_time = ofGetElapsedTimeMillis();
//            win.play();
//            mode=WON;
          }
        }
        if(level==4 && customParticles[1].get()->hp<0){
          trans_time = ofGetElapsedTimeMillis();
          win.play();
          ofLog()<<"WON";
          mode=WON;
        }
      }
      break;
  }
    // remove shapes offscreen
    ofRemove(bullets, ofxBox2dBaseShape::shouldRemoveOffScreen);
//    ofRemove(bullets,bulletDies);
    ofRemove(customParticles, ofxBox2dBaseShape::shouldRemoveOffScreen);
    
}
示例#2
0
//--------------------------------------------------------------
void testApp::draw(){

// MARK: DRAW KINECT POINT CLOUD    
//    int inc = 20;
//    for (int i = 0; i < kinect.pointCloud.size(); i+=inc) {
//        
//        float z = (kinect.pointCloud[i].z < 0.001) ? 1 : kinect.pointCloud[i].z;
//
//        float prox = (1.0 - z);
//        float sz = pow(prox, 3) * inc;
//        ofCircle(kinect.pointCloud[i].x * (float)ofGetWidth(), kinect.pointCloud[i].y * (float)ofGetHeight(), sz);
//
//        int limit_w = kinect.getOutputWidth();
//        if(i % limit_w == 0) {
//            i += inc * limit_w;
//        }
//    }
    
    
// MARK: DRAW BOX2D PARTICLES TO FBO
    fbo.begin();
    ofClear(0, 0, 0, 255);
    
    if(isFilterActive) {
        shader.begin();
        shader.setUniform1i("u_ratio", ledRatio);
    }
    
    for(int i = 0; i < b2dParticles.size(); i++) {
        CustomParticle p = b2dParticles[i];
        Data * customData = (Data*)p.getData();        
        
        
        if(kinect.pointCloud.size() > 0) {
//            int relativeX = ofMap(p.getPosition().x, 0, FBO_W, 0, kinect.getOutputWidth());            
            int relativeX = ofMap(p.getPosition().x, 0, FBO_W, 0, OUTPUT_SCREEN_W);
            relativeX = ofMap(relativeX, 0, OUTPUT_SCREEN_W, 0, kinect.getOutputWidth());
            int relativeY = ofMap(p.getPosition().y, 0, FBO_H, 0, kinect.getOutputHeight());
            
            int relativeKinectIndex = relativeX + (kinect.getOutputWidth() * relativeY);
            
            if(relativeKinectIndex < kinect.pointCloud.size()) {
                ofPoint kinectPoint = kinect.pointCloud[relativeKinectIndex];
                float z = (kinectPoint.z < 0.001) ? 1 : kinectPoint.z;
                float prox = 1.2 - z;
                
                float sz = 0;
                switch(customData->scope) {
                    case PERSONAL:
                        sz += personalMinParticleSize;
                        break;
                    case NEIGHBORHOOD:
                        sz += neighborhoodMinParticleSize;
                        break;
                    case CITY:
                        sz += cityMinParticleSize;
                        break;
                }                
                sz += prox * 80.0;

                float r = p.getRadius();
                
                // property = (target - property) / speed
                r += (sz - r) / 4.0f;
                
                p.setRadius(r);
            }
        }    

        p.draw();
    }
    
    if(isDebugingBox2d) { 
        ofEnableAlphaBlending();
        
        // DRAW JOINTS
        for(int j = 0; j < b2dJoints.size(); j++) {
            ofSetColor(255, 70);
            b2dJoints[j].draw();        
        }
        
        // DRAW ANCHORS
        ofSetColor(70);
        ofCircle(personalAnchorBottom.getPosition(), 4);
        ofCircle(personalAnchorTop.getPosition(), 4);
        ofCircle(personalAnchorLeft.getPosition(), 4);
        ofCircle(personalAnchorRight.getPosition(), 4);
        ofCircle(neighborhoodAnchorBottom.getPosition(), 4);
        ofCircle(neighborhoodAnchorTop.getPosition(), 4);
        ofCircle(neighborhoodAnchorLeft.getPosition(), 4);
        ofCircle(neighborhoodAnchorRight.getPosition(), 4);
        ofCircle(cityAnchorBottom.getPosition(), 4);
        ofCircle(cityAnchorTop.getPosition(), 4);
        ofCircle(cityAnchorLeft.getPosition(), 4);
        ofCircle(cityAnchorRight.getPosition(), 4);
    }

    if(isFilterActive) {        
        shader.end();
    }
    
    fbo.end();
    
    ofSetColor(255);
    fbo.draw(0,0);
// --------------------------------------------
    
// CHEAT: PILLARS MASK
    ofSetColor(25, 255);
    ofFill();
    ofRect(OUTPUT_SCREEN_W/3.0, 0, (FBO_W-OUTPUT_SCREEN_W)/2.0, FBO_H);
    ofRect(FBO_W - (OUTPUT_SCREEN_W/3.0) - (FBO_W-OUTPUT_SCREEN_W)/2.0, 0, (FBO_W-OUTPUT_SCREEN_W)/2.0, FBO_H);
// --------------------------------------------
    
    if(isGUIActive) {
        drawGUI();
    }
    
}