1
This commit is contained in:
parent
fe88e08ab8
commit
22bc63e402
@ -132,17 +132,76 @@ void AndroidNewAI::DefaultAi()
|
||||
|
||||
void AndroidNewAI::ChangeToStateOldAI(AndroidState_e to_state)
|
||||
{
|
||||
|
||||
old_ai_data_.state = to_state;
|
||||
old_ai_data_.state_elapsed_time = 0;
|
||||
switch (old_ai_data_.state) {
|
||||
case AS_moving:
|
||||
{
|
||||
Human* hum = (Human*)owner;
|
||||
hum->move_dir = a8::Vec2(1.0f, 0);
|
||||
hum->move_dir.Rotate(a8::RandAngle());
|
||||
hum->move_dir.Normalize();
|
||||
hum->attack_dir = hum->move_dir;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void AndroidNewAI::DoMoveOldAI()
|
||||
{
|
||||
|
||||
Human* hum = (Human*)owner;
|
||||
if (hum->room->IsWaitingStart()) {
|
||||
return;
|
||||
}
|
||||
if (owner->UpdatedTimes() % 2 == 0) {
|
||||
Human* hum = (Human*)owner;
|
||||
int speed = std::max(1, (int)hum->GetSpeed());
|
||||
if (a8::HasBitFlag(hum->status, HS_NewBieGuideAndroid) &&
|
||||
hum->room->GetFrameNo() - hum->enable_frameno < SERVER_FRAME_RATE * 8) {
|
||||
hum->move_dir = hum->room->GetFirstNewBie()->GetPos() - hum->GetPos();
|
||||
hum->move_dir.Normalize();
|
||||
}
|
||||
for (int i = 0; i < speed; ++i) {
|
||||
a8::Vec2 old_pos = hum->GetPos();
|
||||
hum->SetPos(hum->GetPos() + hum->move_dir);
|
||||
if (hum->IsCollisionInMapService()) {
|
||||
hum->SetPos(old_pos);
|
||||
if (i == 0) {
|
||||
hum->FindPathInMapService();
|
||||
}
|
||||
break;
|
||||
}
|
||||
hum->room->grid_service->MoveHuman(hum);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AndroidNewAI::DoAttackOldAI()
|
||||
{
|
||||
|
||||
Human* hum = (Human*)owner;
|
||||
if (hum->room->IsWaitingStart()) {
|
||||
return;
|
||||
}
|
||||
if (hum->room->GetGasData().gas_mode == GasInactive) {
|
||||
return;
|
||||
}
|
||||
if (owner->UpdatedTimes() % 10 == 0) {
|
||||
Human* enemy = owner->room->FindEnemy((Human*)owner);
|
||||
if (enemy) {
|
||||
Human* sender = (Human*)owner;
|
||||
a8::Vec2 shot_dir = enemy->GetPos() - sender->GetPos();
|
||||
if (std::abs(shot_dir.x) > FLT_EPSILON ||
|
||||
std::abs(shot_dir.y) > FLT_EPSILON) {
|
||||
shot_dir.Normalize();
|
||||
shot_dir.Rotate((rand() % 10) / 180.0f);
|
||||
sender->attack_dir = shot_dir;
|
||||
sender->Shot(shot_dir);
|
||||
}
|
||||
}
|
||||
old_ai_data_.last_target = enemy;
|
||||
}
|
||||
}
|
||||
|
||||
void AndroidNewAI::UpdateAiLevel1()
|
||||
|
Loading…
x
Reference in New Issue
Block a user