本文整理汇总了C++中CarState::getOpponents方法的典型用法代码示例。如果您正苦于以下问题:C++ CarState::getOpponents方法的具体用法?C++ CarState::getOpponents怎么用?C++ CarState::getOpponents使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CarState
的用法示例。
在下文中一共展示了CarState::getOpponents方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: wDrive
CarControl MyDriver::wDrive(CarState cs){
// Update clock variables for graphing over time
_timePrevious = _timeCurrent;
_timeCurrent = Clock::now();
_dt = _timeCurrent - _timePrevious;
_runtime += _dt;
if (_logging)
Renderer::get().setWindowTitle(std::to_string(_dt.count()));
// Temporarily copy old sensors to delta and reset sensors with max distance
memcpy(&_driving.delta[0], &_driving.sensors[0], sizeof(_driving.sensors));
std::fill_n(_driving.sensors, ALL_SENSORS, 200.f);
// Directly mapping track sensors to front 19 sensors
int zero = 0;
for (int i = 0; i < HALF_SENSORS; i++){
float distance = cs.getTrack(i);
if (distance <= 0.f)
zero++;
if (distance < _driving.sensors[i + QUART_SENSORS])
_driving.sensors[i + QUART_SENSORS] = distance;
}
if (zero == 19)
_driving.crashed = true;
else if (_driving.crashed)
_driving.crashed = false;
// Iterate through opponent sensors
for (int i = 0; i < ALL_SENSORS; i++){
//std::cout << "i - " << i << "\n";
float distance = cs.getOpponents(i);
// If no opponent, skip sensor
if (distance >= _awarnessOpponent * 200.f)
continue;
// Calculate amount of track sensors to block, and round to nearest even integer
float raw = distance / (_awarnessOpponent * 200.f);
float block = ((1.f - raw) * (float)((_maxBlock - 2) + 2));
block = glm::roundEven(block);
// Apply smaller distances to sensor array
for (int x = block / 2; x >= -(block / 2 - 1); x--){
int sensor = (i + x) % ALL_SENSORS;
float dropOff = glm::abs(changeRange(block / 2, -(block / 2 - 1), -1.f, 1.f, x));
if (_driving.sensors[sensor] > distance + dropOff * _blockDropOff)
_driving.sensors[sensor] = distance + dropOff * _blockDropOff;
}
}
// Calculate difference using old sensors stored in delta
for (int i = 0; i < ALL_SENSORS; i++){
_driving.delta[i] = _driving.delta[i] - _driving.sensors[i];
if (_driving.delta[i] < 0.f)
_driving.delta[i] = glm::abs(_driving.delta[i]);
else
_driving.delta[i] = 0.f;
if (_driving.delta[i] > 0.25f)
_driving.delta[i] = 0.f;
}
// Decreasing sensors around furthest ray
// if furthest ray is on left, decrease right sensors
// if furthest ray is on right, decrease left sensors
// if furthest ray is in the middle, decrease both sides sensors
if (_driving.furthestRay <= QUART_SENSORS){
for (int i = _driving.furthestRay; i < HALF_SENSORS; i++){
_driving.sensors[QUART_SENSORS + i] *= changeRange(_driving.furthestRay, 18, 1, 0, i);
}
}
if (_driving.furthestRay >= QUART_SENSORS){
for (int i = _driving.furthestRay; i >= 0; i--){
_driving.sensors[QUART_SENSORS + i] *= changeRange(_driving.furthestRay, 0, 1, 0, i);
}
}
// Choosing which ray to steer towards, and how fast
float maxDistance = _driving.sensors[_driving.furthestRay + QUART_SENSORS];
for (int i = 0; i < HALF_SENSORS; i++){
//.........这里部分代码省略.........