本文整理汇总了C++中Estimator::Process方法的典型用法代码示例。如果您正苦于以下问题:C++ Estimator::Process方法的具体用法?C++ Estimator::Process怎么用?C++ Estimator::Process使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Estimator
的用法示例。
在下文中一共展示了Estimator::Process方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ProcessPhysics
/// Processes physics for all registered objects
void PhysicsManager::ProcessPhysics()
{
if (physicsState->simulationPaused)
return;
/// Returns straight away if paused.
if (paused)
return;
if (physicalEntities.Size() == 0)
return;
activeTriangles.Clear();
time_t currentTime = Timer::GetCurrentTimeMs();
time_t millisecondsSinceLastUpdate = currentTime - lastUpdate;
lastUpdate = currentTime;
// std::cout<<"\nCurrent time: "<<currentTime<<" last update: "<<lastUpdate;
/// Throw away time if we've got more than 1 second, since this assumes we're debugging
if (millisecondsSinceLastUpdate > 100){
if (millisecondsSinceLastUpdate > 1000)
std::cout<<"\nPhysicsManager::Throwing away "<<millisecondsSinceLastUpdate / 1000<<" debugging seconds";
millisecondsSinceLastUpdate = 100;
}
float totalTimeSinceLastUpdate = millisecondsSinceLastUpdate * 0.001f;
/// Multiply the total time since last update with the simulation speed multiplier before actual calculations are begun.
totalTimeSinceLastUpdate = totalTimeSinceLastUpdate * simulationSpeed;
/// Just return if simulation speed decreases beyond 0.1%!
if (simulationSpeed <= 0.0001f){
return;
}
/// Debugging time statistics
float messageProcessingTime = 0;
float recalculatingPropertiesDuration = 0;
float collissionProcessingFrameTime = 0;
// Reset previous frame-times
recalculatingPropertiesDuration = 0;
float integration = 0;
collissionProcessingFrameTime = 0;
physicsMeshCollisionChecks = 0;
// To be sent for Collision callback.
List<Message*> messages;
/// Do one process for each 10 ms we've gotten stored up
/// Get sub-time to calculate.
float dt = 0.010f * simulationSpeed;
float timeDiff = dt;
float timeInSecondsSinceLastUpdate = dt;
static float timeRemainingFromLastIteration = 0.f;
/// Add time from last iteration that wasn't spent (since only evaluating one physics step at a time, 10 ms default).
float timeToIterate = totalTimeSinceLastUpdate + timeRemainingFromLastIteration;
float stepSize = 0.010f;
int steps = timeToIterate / stepSize + 0.5f;
/// Use a new step size based on the amount of steps. This will hopefully vary between 5.0 and 15.0 then.
float newStepSize = timeToIterate / steps;
int newStepSizeMs = newStepSize * 1000;
newStepSize = newStepSizeMs * 0.001f;
if (newStepSize < 0.005f || newStepSize > 0.015f)
{
LogPhysics("Step size out of good range: "+String(newStepSize), WARNING);
if (newStepSize < 0.f)
return;
// assert(False)
}
// assert(newStepSize > 0.005f && newStepSize < 0.015f);
// if (steps < 1) // At least 1 physics simulation per frame, yo. Otherwise you get a 'stuttering' effect when some frames have movement and some don't.
// steps = 1;
float timeLeft = timeToIterate - steps * newStepSizeMs * 0.001f;
/// Store time we won't simulate now.
timeRemainingFromLastIteration = timeLeft;
// std::cout<<"\nSteps: "<<steps;
for(int i = 0; i < steps; ++i)
{
/// Set current time in physics for this frame. This time is not the same as real time.
physicsNowMs += newStepSizeMs;
/// Process estimators (if any) within all registered entities?
int milliseconds = newStepSizeMs;
for (int i = 0 ; i < physicalEntities.Size(); ++i)
{
Entity * entity = physicalEntities[i];
List<Estimator*> & estimators = entity->physics->estimators;
for (int j = 0; j < estimators.Size(); ++j)
{
Estimator * estimator = estimators[j];
estimator->Process(milliseconds);
if (entity->name == "ExplosionEntity")
int lp = 5;
// Recalculate other stuff too.
//.........这里部分代码省略.........