Files

48 lines
1.1 KiB
C++

#include "speed.hpp"
#include <algorithm>
#include <cmath>
static float current_speed = 0.0f;
static float max_speed = 40.0f;
static float accel_rate = 2.0f;
static float decel_rate = 5.0f;
void speed_strategy_reset()
{
current_speed = 0.0f;
}
float calc_base_speed(const TrackInfo& info)
{
float target = max_speed * 0.7f; // 默认中速
switch (info.scene)
{
case TRACK_STRAIGHT:
target = max_speed;
break;
case TRACK_GENTLE_CURVE:
target = max_speed * 0.6f;
break;
case TRACK_SHARP_CURVE:
target = max_speed * 0.35f;
break;
case TRACK_LOST_LINE:
target = max_speed * 0.2f;
break;
case TRACK_CROSS:
target = max_speed * 0.5f;
break;
}
if (std::fabs(info.deviation) > 0.6f)
target *= 0.6f;
float diff = target - current_speed;
float rate = (diff > 0) ? accel_rate : decel_rate;
current_speed += rate * (diff > 0 ? 1 : -1) * 0.01f;
current_speed = std::clamp(current_speed, 0.0f, max_speed);
return current_speed;
}