1
This commit is contained in:
parent
4e87a28977
commit
0db1c211fd
@ -175,6 +175,7 @@ void AndroidAI::ChangeToStateOldAI(AndroidState_e to_state)
|
|||||||
move_dir.Rotate(a8::RandAngle());
|
move_dir.Rotate(a8::RandAngle());
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
hum->SetMoveDir(move_dir);
|
hum->SetMoveDir(move_dir);
|
||||||
|
hum->GetMoveHelper()->CalcTargetPos(500);
|
||||||
hum->SetAttackDir(hum->GetMoveDir());
|
hum->SetAttackDir(hum->GetMoveDir());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -544,6 +545,7 @@ void AndroidAI::ChangeToStateNewAI(AndroidStateEx_e to_state)
|
|||||||
move_dir.Rotate(a8::RandAngle());
|
move_dir.Rotate(a8::RandAngle());
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
hum->SetMoveDir(move_dir);
|
hum->SetMoveDir(move_dir);
|
||||||
|
hum->GetMoveHelper()->CalcTargetPos(500);
|
||||||
hum->SetAttackDir(hum->GetMoveDir());
|
hum->SetAttackDir(hum->GetMoveDir());
|
||||||
if (node_->param1 <= 1) {
|
if (node_->param1 <= 1) {
|
||||||
moving_ = false;
|
moving_ = false;
|
||||||
@ -557,6 +559,7 @@ void AndroidAI::ChangeToStateNewAI(AndroidStateEx_e to_state)
|
|||||||
a8::Vec2 move_dir = node_->target.Get()->GetPos() - hum->GetPos();
|
a8::Vec2 move_dir = node_->target.Get()->GetPos() - hum->GetPos();
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
hum->SetMoveDir(move_dir);
|
hum->SetMoveDir(move_dir);
|
||||||
|
hum->GetMoveHelper()->CalcTargetPos(500);
|
||||||
hum->SetAttackDir(hum->GetMoveDir());
|
hum->SetAttackDir(hum->GetMoveDir());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -241,6 +241,7 @@ void HeroAI::UpdatePursuit()
|
|||||||
if (distance > 10) {
|
if (distance > 10) {
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
myself->SetMoveDir(move_dir);
|
myself->SetMoveDir(move_dir);
|
||||||
|
myself->GetMoveHelper()->CalcTargetPos(500);
|
||||||
myself->SetAttackDir(myself->GetMoveDir());
|
myself->SetAttackDir(myself->GetMoveDir());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,6 +294,7 @@ void HeroAI::DoMoveAI()
|
|||||||
//if (hero->room->GetFrameNo() - node_->last_adjust_dir_frameno > SERVER_FRAME_RATE * 3) {
|
//if (hero->room->GetFrameNo() - node_->last_adjust_dir_frameno > SERVER_FRAME_RATE * 3) {
|
||||||
a8::Vec2 dir = hero->GetPos() - hero->room->GetGasData().pos_new;
|
a8::Vec2 dir = hero->GetPos() - hero->room->GetGasData().pos_new;
|
||||||
hero->SetMoveDir(dir);
|
hero->SetMoveDir(dir);
|
||||||
|
hero->GetMoveHelper()->CalcTargetPos(500);
|
||||||
node_->last_adjust_dir_frameno = hero->room->GetFrameNo();
|
node_->last_adjust_dir_frameno = hero->room->GetFrameNo();
|
||||||
//}
|
//}
|
||||||
#endif
|
#endif
|
||||||
@ -359,6 +361,7 @@ void HeroAI::ChangeToStateAI(HeroState_e to_state)
|
|||||||
|
|
||||||
}
|
}
|
||||||
hero->SetMoveDir(move_dir);
|
hero->SetMoveDir(move_dir);
|
||||||
|
hero->GetMoveHelper()->CalcTargetPos(500);
|
||||||
hero->SetAttackDir(hero->GetMoveDir());
|
hero->SetAttackDir(hero->GetMoveDir());
|
||||||
if (node_->param1 <= 1) {
|
if (node_->param1 <= 1) {
|
||||||
moving_ = false;
|
moving_ = false;
|
||||||
@ -372,6 +375,7 @@ void HeroAI::ChangeToStateAI(HeroState_e to_state)
|
|||||||
a8::Vec2 move_dir = node_->target.Get()->GetPos() - hero->GetPos();
|
a8::Vec2 move_dir = node_->target.Get()->GetPos() - hero->GetPos();
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
hero->SetMoveDir(move_dir);
|
hero->SetMoveDir(move_dir);
|
||||||
|
hero->GetMoveHelper()->CalcTargetPos(500);
|
||||||
hero->SetAttackDir(hero->GetMoveDir());
|
hero->SetAttackDir(hero->GetMoveDir());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -387,6 +391,7 @@ void HeroAI::ChangeToStateAI(HeroState_e to_state)
|
|||||||
a8::Vec2 move_dir = target_pos - hero->GetPos();
|
a8::Vec2 move_dir = target_pos - hero->GetPos();
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
hero->SetMoveDir(move_dir);
|
hero->SetMoveDir(move_dir);
|
||||||
|
hero->GetMoveHelper()->CalcTargetPos(500);
|
||||||
hero->SetAttackDir(hero->GetMoveDir());
|
hero->SetAttackDir(hero->GetMoveDir());
|
||||||
node_->target_pos = target_pos;
|
node_->target_pos = target_pos;
|
||||||
}
|
}
|
||||||
@ -398,6 +403,7 @@ void HeroAI::ChangeToStateAI(HeroState_e to_state)
|
|||||||
a8::Vec2 move_dir = node_->target_obstacle.Get()->GetPos() - hero->GetPos();
|
a8::Vec2 move_dir = node_->target_obstacle.Get()->GetPos() - hero->GetPos();
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
hero->SetMoveDir(move_dir);
|
hero->SetMoveDir(move_dir);
|
||||||
|
hero->GetMoveHelper()->CalcTargetPos(500);
|
||||||
hero->SetAttackDir(hero->GetMoveDir());
|
hero->SetAttackDir(hero->GetMoveDir());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -550,6 +556,7 @@ void HeroAI::UpdateSweepMine()
|
|||||||
a8::Vec2 move_dir = node_->target_obstacle.Get()->GetPos() - myself->GetPos();
|
a8::Vec2 move_dir = node_->target_obstacle.Get()->GetPos() - myself->GetPos();
|
||||||
move_dir.Normalize();
|
move_dir.Normalize();
|
||||||
myself->SetMoveDir(move_dir);
|
myself->SetMoveDir(move_dir);
|
||||||
|
myself->GetMoveHelper()->CalcTargetPos(500);
|
||||||
myself->SetAttackDir(myself->GetMoveDir());
|
myself->SetAttackDir(myself->GetMoveDir());
|
||||||
}
|
}
|
||||||
float distance = myself->GetPos().Distance(node_->target_obstacle.Get()->GetPos());
|
float distance = myself->GetPos().Distance(node_->target_obstacle.Get()->GetPos());
|
||||||
|
@ -2025,14 +2025,14 @@ void Human::_UpdateMove(int speed)
|
|||||||
a8::Vec2 new_pos;
|
a8::Vec2 new_pos;
|
||||||
new_pos.x = out_pos.x;
|
new_pos.x = out_pos.x;
|
||||||
new_pos.y = out_pos.z;
|
new_pos.y = out_pos.z;
|
||||||
SetPos(new_pos);
|
//SetPos(new_pos);
|
||||||
} else {
|
} else {
|
||||||
GetMoveHelper()->CalcTargetPos(500);
|
GetMoveHelper()->CalcTargetPos(500);
|
||||||
if (GetMoveHelper()->GetMovePosition(out_pos)) {
|
if (GetMoveHelper()->GetMovePosition(out_pos)) {
|
||||||
a8::Vec2 new_pos;
|
a8::Vec2 new_pos;
|
||||||
new_pos.x = out_pos.x;
|
new_pos.x = out_pos.x;
|
||||||
new_pos.y = out_pos.z;
|
new_pos.y = out_pos.z;
|
||||||
SetPos(new_pos);
|
//SetPos(new_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CheckSpecObject();
|
CheckSpecObject();
|
||||||
|
@ -156,19 +156,20 @@ void MapInstance::Init()
|
|||||||
navmesh_query_->init(navmesh_, 1024);
|
navmesh_query_->init(navmesh_, 1024);
|
||||||
|
|
||||||
dtTileRef tile_ref = navmesh_->getTileRefAt(0, 0, 0);
|
dtTileRef tile_ref = navmesh_->getTileRefAt(0, 0, 0);
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
glm::vec3 start;
|
glm::vec3 start;
|
||||||
glm::vec3 end;
|
glm::vec3 end;
|
||||||
glm::vec3 hit_point;
|
glm::vec3 hit_point;
|
||||||
start.x = 10;
|
start.x = 141.014694213867;
|
||||||
//start.y = 0.166666701;
|
|
||||||
start.y = 0.0;
|
start.y = 0.0;
|
||||||
start.z = 10;
|
start.z = 90.133338928223;
|
||||||
end = start;
|
end = start;
|
||||||
end.x = 2000;
|
end.x = 141.014694213867;
|
||||||
end.z = 2000;
|
end.y = 0;
|
||||||
|
end.z = 140.133331298828;
|
||||||
auto a = Raycast(0, start, end, hit_point);
|
auto a = Raycast(0, start, end, hit_point);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,10 @@ MoveHelper::MoveHelper(class MoveableEntity* owner)
|
|||||||
|
|
||||||
bool MoveHelper::GetMovePosition(glm::vec3& out_pos)
|
bool MoveHelper::GetMovePosition(glm::vec3& out_pos)
|
||||||
{
|
{
|
||||||
|
Creature* c = (Creature*)owner_;
|
||||||
|
if (!c->IsPlayer()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (path_index_ < paths_.size()) {
|
if (path_index_ < paths_.size()) {
|
||||||
a8::Vec2 src_pos;
|
a8::Vec2 src_pos;
|
||||||
a8::Vec2 tar_pos;
|
a8::Vec2 tar_pos;
|
||||||
@ -30,7 +34,7 @@ bool MoveHelper::GetMovePosition(glm::vec3& out_pos)
|
|||||||
dir.y = point.dir.z;
|
dir.y = point.dir.z;
|
||||||
|
|
||||||
owner_->SetPos(src_pos + dir * owner_->GetSpeed() * (owner_->room->GetFrameNo() - point.frameno));
|
owner_->SetPos(src_pos + dir * owner_->GetSpeed() * (owner_->room->GetFrameNo() - point.frameno));
|
||||||
if (owner_->GetPos().Distance(src_pos) - point.distance >= 0.0001) {
|
if (owner_->GetPos().Distance(src_pos) - point.distance >= 0.0001f) {
|
||||||
owner_->SetPos(tar_pos);
|
owner_->SetPos(tar_pos);
|
||||||
++path_index_;
|
++path_index_;
|
||||||
if (path_index_ < paths_.size()) {
|
if (path_index_ < paths_.size()) {
|
||||||
@ -53,6 +57,10 @@ bool MoveHelper::GetMovePosition(glm::vec3& out_pos)
|
|||||||
|
|
||||||
void MoveHelper::CalcTargetPos(float distance)
|
void MoveHelper::CalcTargetPos(float distance)
|
||||||
{
|
{
|
||||||
|
Creature* c = (Creature*)owner_;
|
||||||
|
if (!c->IsPlayer()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
path_index_ = 0;
|
path_index_ = 0;
|
||||||
paths_.clear();
|
paths_.clear();
|
||||||
|
|
||||||
@ -61,14 +69,20 @@ void MoveHelper::CalcTargetPos(float distance)
|
|||||||
glm::vec3 hit_point;
|
glm::vec3 hit_point;
|
||||||
|
|
||||||
start.x = owner_->GetPos().x / 10.0f;
|
start.x = owner_->GetPos().x / 10.0f;
|
||||||
|
start.y = 0;
|
||||||
start.z = owner_->GetPos().y / 10.0f;
|
start.z = owner_->GetPos().y / 10.0f;
|
||||||
|
|
||||||
a8::Vec2 target_pos2d = owner_->GetPos() + owner_->GetMoveDir() * distance;
|
a8::Vec2 target_pos2d = owner_->GetPos() + owner_->GetMoveDir() * distance;
|
||||||
end.x = target_pos2d.x / 10.0f;
|
end.x = target_pos2d.x / 10.0f;
|
||||||
|
end.y = 0;
|
||||||
end.z = target_pos2d.y / 10.0f;
|
end.z = target_pos2d.y / 10.0f;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
a8::XPrintf("start:%f,%f,%f end:%f,%f,%f\n", {start.x, start.y, start.z, end.x, end.y, end.z});
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool is_hit = false;
|
||||||
MovePathPoint point;
|
MovePathPoint point;
|
||||||
Creature* c = (Creature*)owner_;
|
|
||||||
if (c->HasBuffEffect(kBET_ThroughWall) ||
|
if (c->HasBuffEffect(kBET_ThroughWall) ||
|
||||||
c->HasBuffEffect(kBET_Fly)) {
|
c->HasBuffEffect(kBET_Fly)) {
|
||||||
point.tar_pos = end * 10.f;
|
point.tar_pos = end * 10.f;
|
||||||
@ -86,7 +100,8 @@ void MoveHelper::CalcTargetPos(float distance)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int ret = owner_->room->map_instance->Raycast(0, start, end, hit_point);
|
int ret = owner_->room->map_instance->Raycast(0, start, end, hit_point);
|
||||||
if (ret > 1) {
|
if (ret > 0) {
|
||||||
|
is_hit = true;
|
||||||
point.tar_pos = hit_point * 10.f;
|
point.tar_pos = hit_point * 10.f;
|
||||||
} else {
|
} else {
|
||||||
point.tar_pos = end * 10.f;
|
point.tar_pos = end * 10.f;
|
||||||
@ -104,5 +119,23 @@ void MoveHelper::CalcTargetPos(float distance)
|
|||||||
point.dir.x = dir.x;
|
point.dir.x = dir.x;
|
||||||
point.dir.z = dir.y;
|
point.dir.z = dir.y;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
a8::XPrintf("CalcTargetPos src_pos:%f,%f tar_pos:%f,%f is_hit:%d start:%f,%f,%f end:%f,%f,%f\n",
|
||||||
|
{
|
||||||
|
point.src_pos.x,
|
||||||
|
point.src_pos.z,
|
||||||
|
point.tar_pos.x,
|
||||||
|
point.tar_pos.z,
|
||||||
|
is_hit ? 1 : 0,
|
||||||
|
|
||||||
|
start.x,
|
||||||
|
start.y,
|
||||||
|
start.z,
|
||||||
|
|
||||||
|
end.x,
|
||||||
|
end.y,
|
||||||
|
end.z
|
||||||
|
});
|
||||||
|
#endif
|
||||||
paths_.push_back(point);
|
paths_.push_back(point);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user