移动优化

This commit is contained in:
aozhiwei 2019-06-11 13:48:03 +08:00
parent d0db4e8aff
commit 9dc884d02d
2 changed files with 10 additions and 47 deletions

View File

@ -1860,7 +1860,7 @@ bool Human::InWalkZone()
if (pos.y + meta->i->radius() > walk_zone_center.y + walk_zone->_max.y - delta) { if (pos.y + meta->i->radius() > walk_zone_center.y + walk_zone->_max.y - delta) {
return false; return false;
} }
return false; return true;
} }
void Human::ClearWalkZone() void Human::ClearWalkZone()
@ -1884,6 +1884,8 @@ void Human::UpdateMoveInWalkZone(int speed)
} else { } else {
ClearWalkZone(); ClearWalkZone();
pos = old_pos; pos = old_pos;
movement->RayDetection();
App::Instance()->perf.params[5]++;
UpdateMoveInMap(speed - i); UpdateMoveInMap(speed - i);
return; return;
} }
@ -1896,11 +1898,17 @@ void Human::UpdateMoveInMap(int speed)
for (int i = 0; i < speed; ++i) { for (int i = 0; i < speed; ++i) {
Vector2D old_pos = pos; Vector2D old_pos = pos;
pos = pos + move_dir; pos = pos + move_dir;
if (IsCollision()) { if (movement->TestCollision()) {
pos = old_pos; pos = old_pos;
GenerateWalkZone(); GenerateWalkZone();
UpdateMoveInWalkZone(speed - i); UpdateMoveInWalkZone(speed - i);
return; return;
} else {
movement->passed_distance += 1;
if (movement->passed_distance + 10 > movement->target_distance) {
movement->RayDetection();
App::Instance()->perf.params[5]++;
}
} }
room->grid_service.MoveHuman(this); room->grid_service.MoveHuman(this);
} }

View File

@ -122,51 +122,6 @@ void Player::UpdateMove()
#endif #endif
return; return;
} }
#if 0
int speed = std::max(1, (int)GetSpeed());
#ifdef RAY_DETECTION
for (int i = 0; i < speed; ++i) {
Vector2D old_pos = pos;
pos = pos + move_dir;
if (movement->TestCollision()) {
App::Instance()->perf.params[0]++;
pos = old_pos;
FindPath();
movement->RayDetection();
if (rand() % 3 == 0) {
i += 1;
}
} else {
movement->passed_distance += 1;
if (movement->passed_distance + 10 > movement->target_distance) {
movement->RayDetection();
App::Instance()->perf.params[5]++;
}
}
room->grid_service.MoveHuman(this);
}
#else
for (int i = 0; i < speed; ++i) {
Vector2D old_pos = pos;
pos = pos + move_dir;
if (IsCollision()) {
pos = old_pos;
#if 1
FindPath();
if (rand() % 3 == 0) {
i += 1;
}
#else
if (i == 0) {
FindPath();
}
break;
#endif
}
room->grid_service.MoveHuman(this);
}
#endif
#endif
if (in_walk_zone) { if (in_walk_zone) {
UpdateMoveInWalkZone(std::max(1, (int)GetSpeed())); UpdateMoveInWalkZone(std::max(1, (int)GetSpeed()));
} else { } else {