This commit is contained in:
aozhiwei 2022-12-01 18:52:06 +08:00
parent 89f9ebdbb8
commit c365ac66ff
6 changed files with 8 additions and 39 deletions

View File

@ -466,19 +466,13 @@ void AndroidAI::DoMoveNewAI()
}
if (std::abs(hum->GetMoveDir().x) > FLT_EPSILON ||
std::abs(hum->GetMoveDir().y) > FLT_EPSILON) {
hum->on_move_collision =
[this] () {
ChangeToStateNewAI(ASE_RandomWalk);
return false;
};
int speed = std::max(1, (int)hum->GetSpeed()) * 1;
a8::Vec2 old_pos = hum->GetPos();
hum->_UpdateMove(speed);
if (owner->room->IsPveRoom() && IsNearGas()) {
hum->SetPos(old_pos);
hum->on_move_collision();
ChangeToStateNewAI(ASE_RandomWalk);
}
hum->on_move_collision = nullptr;
if (node_->nearest_human.Get()) {
if (node_->main_state != ASE_Pursuit &&
hum->GetPos().ManhattanDistance(node_->nearest_human.Get()->GetPos()) < 200) {

View File

@ -3301,16 +3301,7 @@ void Creature::_UpdateSpecMove()
move_dir.Normalize();
SetMoveDir(move_dir);
bool is_collision = false;
std::function<bool ()> old_on_move_collision = on_move_collision;
on_move_collision =
[&is_collision] () {
is_collision = true;
return false;
};
_UpdateMove(std::min((int)target_distance, (int)GetSpeed()));
on_move_collision = old_on_move_collision;
move_dir = old_move_dir;
target_distance = target_pos.Distance(GetPos());
if (is_collision || target_distance <= 1.0001f) {

View File

@ -86,7 +86,6 @@ class Creature : public MoveableEntity
int shot_hole = 0;
Creature* shot_passenger = nullptr;
a8::Vec2 target_pos;
std::function<bool ()> on_move_collision;
bool poisoning = false;
long long poisoning_time = 0;
bool playing_skill = false;

View File

@ -273,33 +273,12 @@ void HeroAI::DoMoveAI()
}
if (std::abs(hero->GetMoveDir().x) > FLT_EPSILON ||
std::abs(hero->GetMoveDir().y) > FLT_EPSILON) {
auto old_on_move_collision_func = hero->on_move_collision;
hero->on_move_collision =
[this] () {
if (node_->main_state == HSE_FollowMaster) {
ChangeToStateAI(HSE_FollowMaster);
} else {
ChangeToStateAI(HSE_RandomWalk);
}
return false;
};
int speed = std::max(1, (int)hero->GetSpeed()) * 1;
a8::Vec2 old_pos = hero->GetPos();
hero->_UpdateMove(speed);
if (owner->room->IsPveRoom() && IsNearGas()) {
#if 1
hero->SetPos(old_pos);
hero->on_move_collision();
#else
//if (hero->room->GetFrameNo() - node_->last_adjust_dir_frameno > SERVER_FRAME_RATE * 3) {
a8::Vec2 dir = hero->GetPos() - hero->room->GetGasData().pos_new;
hero->SetMoveDir(dir);
hero->GetMoveHelper()->CalcTargetPos(500);
node_->last_adjust_dir_frameno = hero->room->GetFrameNo();
//}
#endif
}
hero->on_move_collision = old_on_move_collision_func;
}
}

View File

@ -180,9 +180,11 @@ void Hero::InternalUpdateMove(float speed)
if (!CheckCollision()) {
room->grid_service->MoveCreature(this);
} else {
#if 0
if (on_move_collision && !on_move_collision()) {
SetPos(old_pos);
}
#endif
}
}

View File

@ -2101,10 +2101,12 @@ void Human::_InternalUpdateMove(float speed)
SetPos(old_pos);
return;
}
#if 0
if (on_move_collision && !on_move_collision()) {
SetPos(old_pos);
return;
}
#endif
nx = 0;
}
@ -2114,10 +2116,12 @@ void Human::_InternalUpdateMove(float speed)
SetPos(old_pos);
return;
}
#if 0
if (on_move_collision && !on_move_collision()) {
SetPos(old_pos);
return;
}
#endif
ny = 0;
}
@ -3552,7 +3556,7 @@ void Human::OnLand()
if (IsAndroid() && team_uuid.empty()) {
MustBeAddBuff(this, kBeRecycleBuffId);
}
#endif
#endif
if (IsPlayer()) {
StartRefreshViewTimer();
}