From db0e9e72e369c32aeb0591811054d0aca8ac41c2 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 1 Apr 2023 11:21:35 +0800 Subject: [PATCH] 1 --- server/gameserver/airraid.cc | 66 +++++++++++++++++++----------------- server/gameserver/airraid.h | 1 + 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/server/gameserver/airraid.cc b/server/gameserver/airraid.cc index 2abde424..f19490db 100644 --- a/server/gameserver/airraid.cc +++ b/server/gameserver/airraid.cc @@ -40,37 +40,7 @@ void AirRaid::Exec(int airraid_id) if (!raid_meta) { return; } - glm::vec3 dir = GlmHelper::UP; - GlmHelper::RotateY(dir, a8::RandAngle()); - float rnd_rad = room_->GetGasData().new_area_meta->rad() > 0 ? rand() % room_->GetGasData().new_area_meta->rad() : 0; - glm::vec2 v2_center= room_->GetGasData().pos_new + glm::vec2(dir.x, dir.z) * (100.f + rnd_rad); - glm::vec3 center = glm::vec3(v2_center.x, 0.0f, v2_center.y); - { - std::vector humans; - #if 0 - room_->GetAlivePlayers(humans, room_->GetRoomMaxPlayerNum()); - #endif - if (humans.size() > 3) { - std::random_shuffle(humans.begin(), humans.end()); - for (Human* hum : humans) { - if (!hum->poisoning) { - // 99 - #if 1 - #else - center = hum->GetPos() + dir * (200 + rand() % 500); - #endif - break; - } - } - } - #ifdef DEBUG1 - if (humans.size() > 0) { - center = humans[0]->GetPos(); - } - #endif - } - room_->frame_event.AddAirRaid(raid_meta->appear_time(), center, raid_meta->rad()); - + glm::vec3 center; auto raid_cb = [this, raid_meta, center] (int event, const a8::Args* args) @@ -126,3 +96,37 @@ void AirRaid::Exec(int airraid_id) raid_cb, &room_->xtimer_attacher_); } + +bool AirRaid::GenAirRaidPos(const mt::AirRaid* raid_meta, glm::vec3& center) +{ + glm::vec3 dir = GlmHelper::UP; + GlmHelper::RotateY(dir, a8::RandAngle()); + float rnd_rad = rand() % std::max(room_->GetGasData().new_area_meta->rad(), 100); + glm::vec2 v2_center = room_->GetGasData().pos_new + glm::vec2(dir.x, dir.z) * (100.f + rnd_rad); + center = glm::vec3(v2_center.x, 0.0f, v2_center.y); + { + std::vector humans; + #if 0 + room_->GetAlivePlayers(humans, room_->GetRoomMaxPlayerNum()); + #endif + if (humans.size() > 3) { + std::random_shuffle(humans.begin(), humans.end()); + for (Human* hum : humans) { + if (!hum->poisoning) { + // 99 + #if 1 + #else + center = hum->GetPos() + dir * (200 + rand() % 500); + #endif + break; + } + } + } + #ifdef DEBUG1 + if (humans.size() > 0) { + center = humans[0]->GetPos(); + } + #endif + } + room_->frame_event.AddAirRaid(raid_meta->appear_time(), center, raid_meta->rad()); +} diff --git a/server/gameserver/airraid.h b/server/gameserver/airraid.h index b1c9bff0..0d38356b 100644 --- a/server/gameserver/airraid.h +++ b/server/gameserver/airraid.h @@ -12,6 +12,7 @@ class AirRaid private: void Exec(int airraid_id); + bool GenAirRaidPos(const mt::AirRaid* raid_meta, glm::vec3& center); private: Room* room_ = nullptr;