Beispiel #1
0
//--------------------------------------------------------------
void testApp::update() {
	ofVec2f mouse(ofGetMouseX(), ofGetMouseY());
	ofVec2f mouseVec(ofGetPreviousMouseX()-ofGetMouseX(), ofGetPreviousMouseY()-ofGetMouseY());
	mouseVec.limit(10.0);
	
	for (int i=0; i<NUM_BILLBOARDS; i++) {
		ofSeedRandom(i);
		if(mouse.distance(pos[i]) < ofRandom(100, 200)) {
			vel[i] -= mouseVec; 
		}
		
		pos[i] += vel[i];
		vel[i] *= 0.84f;
		
		if(pos[i].x < 0) pos[i].x = ofGetWidth();
		if(pos[i].x > ofGetWidth()) pos[i].x = 0;
		if(pos[i].y < 0) pos[i].y = ofGetHeight();
		if(pos[i].y > ofGetHeight()) pos[i].y = 0;
		
		ofVec2f center(ofGetWidth()/2, ofGetHeight()/2);
		ofVec2f frc = home[i] - pos[i];
		if(frc.length() > 20.0) {
			frc.normalize();
			frc *= 0.84;
			vel[i] += frc;
		}
		
		// get the 2d heading
		float angle = (float)atan2(-vel[i].y, vel[i].x) + PI;
		rotations[i] = (angle * -1.0);
	}
}
void FboMaskManager::mouseMove(float mouseX, float mouseY){
	if(editing){
		ofxVec2f mouse = mouseVec(mouseX, mouseY);
		ofxVec2f deltaMouse = mouse - lastMouse;
		
		if(dragging){
			dragPoint.point += deltaMouse;
			mask.replacePoint(dragPoint);
		}
		lastMouse = mouse;
	}
}
void PlayerController::Tick(sf::Window *window) {
  b2Body *body = Character()->Body();
  b2Vec2 chrPos = body->GetPosition();
  b2Vec2 base = Character()->ClosestPlanet()->Position();
  float angle_r = RadiansOf(chrPos - base);
  if (chrPos.x < base.x)
    angle_r = -angle_r;
  Character()->Body()->SetTransform(chrPos, angle_r);
  if (left_down_) {
    b2Vec2 mouseVec(mouse_x_ - window->getSize().x / 2.0f,
                    mouse_y_ - window->getSize().y / 2.0f);
    b2Vec2 rotated = RotatedVector(mouseVec, angle_r);
    body->ApplyLinearImpulse(rotated, body->GetPosition());
  }
}
void FboMaskManager::mouseDown(float mouseX, float mouseY){
	if(editing){
		ofxVec2f mouse = mouseVec(mouseX, mouseY);
		
		if(checkShiftKey()){
			
		} else {
			FboMaskSelection nearest = mask.getNearestPoint(mouse);
			float distance = nearest.distance(mouse);
			
			if(nearest.valid && !nearest.midPoint && distance < clickDistance){
				dragging = true;
				dragPoint = nearest;
			}
		}
		
		lastMouse = mouse;
	}
}
void FboMaskManager::mouseUp(float mouseX, float mouseY){
	if(editing){
		ofxVec2f mouse = mouseVec(mouseX, mouseY);
		
		if(dragging){
			
		} else {
			FboMaskSelection nearest = mask.getNearestPoint(mouse);
			float distance = nearest.distance(mouse);
			
			if(nearest.valid){
				if(distance < clickDistance){
					if(!nearest.midPoint){
						if(checkShiftKey()){
							//delete this point!
							mask.deletePoint(nearest);
						}
						
					} else {
						if(!checkShiftKey()){
							//insert a new point at the midpoint
							mask.insertPoint(nearest);
						}
					}
				}
			} else {
				//we need to insert a new shape
				
				if(checkShiftKey()){
					nearest.setPoint(mouse);
					mask.insertShape(nearest);
				}
			}
		}
		
		dragging = false;
		lastMouse = mouse;
	}
}