Ejemplo n.º 1
0
//This is used to start all controlled movements.  It adds velocity in relation to the camera's direction.
void Position::beginMove(Direction direction, float magnitude) {
    float azimuth = look->getAzimuth();
    if (direction == Direction::FRONT) {
        addVelocity(new Point(
                        sin(azimuth*DEG2RAD)*magnitude,
                        0.0,
                        cos(azimuth*DEG2RAD)*magnitude));
    }
    if (direction == Direction::BACK) {
        addVelocity(new Point(
                        -sin(azimuth*DEG2RAD)*magnitude,
                        0.0,
                        -cos(azimuth*DEG2RAD)*magnitude));
    }
    if (direction == Direction::RIGHT) {
        addVelocity(new Point(
                        sin((90 + azimuth)*DEG2RAD)*magnitude,
                        0.0,
                        cos((90 + azimuth)*DEG2RAD)*magnitude));
    }
    if (direction == Direction::LEFT) {
        addVelocity(new Point(
                        -sin((90 + azimuth)*DEG2RAD)*magnitude,
                        0.0,
                        -cos((90 + azimuth)*DEG2RAD)*magnitude));
    }
    if (direction == Direction::UP) {
        velocity->addY(magnitude);
    }
    if (direction == Direction::DOWN) {
        velocity->addY(-magnitude);
    }
}
Ejemplo n.º 2
0
bool idCameraPosition::parseToken(const char *key, const char *(*text)) {
	const char *token = Com_Parse(text);
	if (Q_stricmp(key, "time") == 0) {
		time = atol(token);
		return true;
	} else if (Q_stricmp(key, "type") == 0) {
		type = static_cast<idCameraPosition::positionType>(atoi(token));
		return true;
	} else if (Q_stricmp(key, "velocity") == 0) {
		long t = atol(token);
		token = Com_Parse(text);
		long d = atol(token);
		token = Com_Parse(text);
		float s = atof(token);
		addVelocity(t, d, s);
		return true;
	} else if (Q_stricmp(key, "baseVelocity") == 0) {
		baseVelocity = atof(token);
		return true;
	} else if (Q_stricmp(key, "name") == 0) {
		name = token;
		return true;
	} else if (Q_stricmp(key, "time") == 0) {
		time = atoi(token);
		return true;
	}
	Com_UngetToken();
	return false;
}
Ejemplo n.º 3
0
/*
================
idCameraPosition::parseToken
================
*/
bool idCameraPosition::parseToken( const idStr &key, idParser *src ) {
	idToken token;

	if ( !key.Icmp( "time" ) ) {
		time = src->ParseInt();
		return true;
	}
	else if ( !key.Icmp( "type" ) ) {
		type = static_cast<idCameraPosition::positionType> ( src->ParseInt() );
		return true;
	}
	else if ( !key.Icmp( "velocity" ) ) {
		long t = atol(token);
		long d = src->ParseInt();
		float s = src->ParseFloat();
		addVelocity(t, d, s);
		return true;
	}
	else if ( !key.Icmp( "baseVelocity" ) ) {
		baseVelocity = src->ParseFloat();
		return true;
	}
	else if ( !key.Icmp( "name" ) ) {
		src->ReadToken( &token );
		name = token;
		return true;
	}
	else {
		src->Error( "unknown camera position key: %s", key.c_str() );
		return false;
	}
}
Ejemplo n.º 4
0
void Entity::applyEntityCollision(Entity entity)
{
        if(entity.riddenByEntity == this || entity.ridingEntity == this)
        {
            return;
        }
        double d = entity.posX - posX;
        double d1 = entity.posZ - posZ;
        double d2 = MathHelper.abs_max(d, d1);
        if(d2 >= 0.0099999997764825821)
        {
            d2 = MathHelper.sqrt_double(d2);
            d /= d2;
            d1 /= d2;
            double d3 = 1.0D / d2;
            if(d3 > 1.0D)
            {
                d3 = 1.0D;
            }
            d *= d3;
            d1 *= d3;
            d *= 0.05000000074505806;
            d1 *= 0.05000000074505806;
            d *= 1.0F - entityCollisionReduction;
            d1 *= 1.0F - entityCollisionReduction;
            addVelocity(-d, 0.0D, -d1);
            entity.addVelocity(d, 0.0D, d1);
        }
}
Ejemplo n.º 5
0
		void Particle::doVerlet() {
			if (!_isFixed) {
				if(_params->doGravity) {
					Vec3f gravityForce = _params->gravity;
					addVelocity(gravityForce);
				}
				
				Vec3f curPos = _pos;
				Vec3f vel = _pos - _oldPos;
				//		_pos += vel * _params->drag * _drag + _params->timeStep2;
				_pos += (_pos - _oldPos);// + _params->timeStep2;	// TODO
				_oldPos = curPos;
			}
		}
Ejemplo n.º 6
0
	//--------------------------------------------------------------
	void ftFluidSimulation::update(float _deltaTime){
		float time = ofGetElapsedTimef();
		if (_deltaTime != 0)
			deltaTime = _deltaTime;
		else
			deltaTime = time - lastTime;
		lastTime = time;
		timeStep = deltaTime * speed.get();
		
		if (doReset) {
			doReset.set(false);
			reset();
		}
		
		ofPushStyle();
		
		ofEnableBlendMode(OF_BLENDMODE_DISABLED);
		// OBSTACLE BUFFER;
		
		if (combinedObstacleNeedsToBeCleaned) {
			combinedObstacleBuffer.clear();
			combinedObstacleBuffer.scaleIntoMe(obstacleBuffer);
			combinedObstacleNeedsToBeCleaned = false;
		}
		
		if (addTempObstacleBufferDidChange) {
			ofEnableBlendMode(OF_BLENDMODE_ADD);
			combinedObstacleBuffer.scaleIntoMe(addTempObstacleBuffer);
			addTempObstacleBufferDidChange = false;
			addTempObstacleBuffer.clear();
			combinedObstacleNeedsToBeCleaned = true;
		}
		ofEnableBlendMode(OF_BLENDMODE_DISABLED);

		// CLAMP LENGTH
		if (maxDensity.get() > 0.0) {
			clampLengthShader.update(*densitySwapBuffer.dst,
									 densitySwapBuffer.src->getTextureReference(),
									 maxDensity.get(),
									 clampForce.get());
			densitySwapBuffer.swap();
		}
		if (maxVelocity.get() > 0.0) {
			clampLengthShader.update(*velocitySwapBuffer.dst,
									 velocitySwapBuffer.src->getTextureReference(),
									 maxVelocity.get(),
									 clampForce.get());
			velocitySwapBuffer.swap();
		}
		if (maxTemperature.get() > 0.0) {
			clampLengthShader.update(*temperatureSwapBuffer.dst,
									 temperatureSwapBuffer.src->getTextureReference(),
									 maxTemperature.get(),
									 clampForce.get());
			temperatureSwapBuffer.swap();
		}		
		
		
		// VORTEX CONFINEMENT
		if (vorticity.get() > 0.0) {
			vorticityFirstPassShader.update(vorticityFirstPassBuffer,
											velocitySwapBuffer.src->getTextureReference(),
											combinedObstacleBuffer.getTextureReference());
			
			vorticitySecondPassShader.update(vorticitySecondPassBuffer,
											 vorticityFirstPassBuffer.getTextureReference(),
											 timeStep,
											 vorticity.get(),
											 cellSize.get());
			
			addVelocity(vorticitySecondPassBuffer.getTextureReference());
		}
		
		// ADVECT
		advectShader.update(*velocitySwapBuffer.dst,
							velocitySwapBuffer.src->getTextureReference(),
							velocitySwapBuffer.src->getTextureReference(),
							combinedObstacleBuffer.getTextureReference(),
							timeStep,
							1.0 - (dissipation.get() + velocityOffset.get()),
							cellSize.get());
		velocitySwapBuffer.swap();
		
		
		advectShader.update(*densitySwapBuffer.dst,
							densitySwapBuffer.src->getTextureReference(),
							velocitySwapBuffer.src->getTextureReference(),
							combinedObstacleBuffer.getTextureReference(),
							timeStep,
							1.0 - (dissipation.get() + densityOffset.get()),
							cellSize.get());
		densitySwapBuffer.swap();

		
		// DIFFUSE
		if (viscosity.get() > 0.0) {
			for (int i = 0; i < numJacobiIterations.get(); i++) {
				diffuseShader.update(*velocitySwapBuffer.dst,
									 velocitySwapBuffer.src->getTextureReference(),
									 combinedObstacleBuffer.getTextureReference(),
									 viscosity.get() * deltaTime);
				velocitySwapBuffer.swap();
			}
		 }
		 
		
		
		// SMOKE BUOYANCY
		if (smokeSigma.get() > 0.0 && smokeWeight.get() > 0.0 ) {
			
			advectShader.update(*temperatureSwapBuffer.dst,
								temperatureSwapBuffer.src->getTextureReference(),
								velocitySwapBuffer.src->getTextureReference(),
								combinedObstacleBuffer.getTextureReference(),
								timeStep,
								1.0 - (dissipation.get() + temperatureOffset.get()),
								cellSize.get());
			temperatureSwapBuffer.swap();
			
			smokeBuoyancyShader.update(smokeBuoyancyBuffer,
									   velocitySwapBuffer.src->getTextureReference(),
									   temperatureSwapBuffer.src->getTextureReference(),
									   densitySwapBuffer.src->getTextureReference(),
									   ambientTemperature.get(),
									   timeStep,
									   smokeSigma.get(),
									   smokeWeight.get(),
									   gravity.get());
			addVelocity(smokeBuoyancyBuffer.getTextureReference());
	
		}
		else
			temperatureSwapBuffer.clear();
		
		
		// DIVERGENCE AND JACOBI
		divergenceBuffer.clear();
		divergenceShader.update(divergenceBuffer,
								velocitySwapBuffer.src->getTextureReference(),
								combinedObstacleBuffer.getTextureReference(),
								cellSize.get());
		
		pressureSwapBuffer.clear();
		for (int i = 0; i < numJacobiIterations.get(); i++) {
			jacobiShader.update(*pressureSwapBuffer.dst,
								pressureSwapBuffer.src->getTextureReference(),
								divergenceBuffer.getTextureReference(),
								combinedObstacleBuffer.getTextureReference(),
								cellSize.get());
			pressureSwapBuffer.swap();
		}
		
		// Multiply density by pressure and or vorticity
		if(densityFromPressure != 0) {
			densityFloatMultiplierShader.update(*densitySwapBuffer.dst,
												densitySwapBuffer.src->getTextureReference(),
												pressureSwapBuffer.src->getTextureReference(),
												densityFromPressure.get());
			densitySwapBuffer.swap();
		}
		
		if(densityFromVorticity != 0) {
			densityVec2MultiplierShader.update(*densitySwapBuffer.dst,
											   densitySwapBuffer.src->getTextureReference(),
											   vorticitySecondPassBuffer.getTextureReference(),
											   -densityFromVorticity.get());
			densitySwapBuffer.swap();
		}
		
		
		// Drain some fluid
		if(addPressureBufferDidChange == true) {
			addPressureBufferDidChange = false;
			addShader.update(*pressureSwapBuffer.dst,
							 pressureSwapBuffer.src->getTextureReference(),
							 addPressureBuffer.getTextureReference(),
							 1.0);
			pressureSwapBuffer.swap();
		}
		
		substractGradientShader.update(*velocitySwapBuffer.dst,
									   velocitySwapBuffer.src->getTextureReference(),
									   pressureSwapBuffer.src->getTextureReference(),
									   combinedObstacleBuffer.getTextureReference(),
									   cellSize.get());
		velocitySwapBuffer.swap();
		
		ofPopStyle();
	}
Ejemplo n.º 7
0
void GameObject::addVelocity(const Point& delta)
{
    addVelocity(delta.x, delta.y);
}
Ejemplo n.º 8
0
		virtual void addVelocity(float x, float y){ addVelocity(sf::Vector2f(x, y)); }