This commit is contained in:
aozhiwei 2021-04-13 21:17:29 +08:00
parent 8b76a1cd57
commit 32d2325e20
4 changed files with 58 additions and 0 deletions

View File

@ -73,6 +73,7 @@ void AndroidNewAI::Update(int delta_time)
return; return;
} }
UpdateNewAI(); UpdateNewAI();
hum->UpdateViewObjects();
} }
float AndroidNewAI::GetAttackRate() float AndroidNewAI::GetAttackRate()

View File

@ -3262,6 +3262,24 @@ void Human::OnLand()
if (IsAndroid() && team_uuid.empty()) { if (IsAndroid() && team_uuid.empty()) {
MustBeAddBuff(this, kBeRecycleBuffId); MustBeAddBuff(this, kBeRecycleBuffId);
} }
if (IsPlayer()) {
refresh_view_timer_ = room->xtimer.AddRepeatTimerAndAttach
(
SERVER_FRAME_RATE * 8,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->UpdateViewObjects();
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->refresh_view_timer_ = nullptr;
});
}
} }
void Human::NextReload(int prev_weapon_id, int prev_weapon_idx) void Human::NextReload(int prev_weapon_id, int prev_weapon_idx)
@ -3433,3 +3451,39 @@ void Human::GetHitAabbBox(AabbCollider& aabb_box)
} }
} }
void Human::UpdateViewObjects()
{
if (view_objects_.size() >= 2) {
std::vector<Human*> deleted_humans;
for (Human* hum : view_objects_) {
if (hum->dead || hum->GetPos().ManhattanDistance(GetPos()) > 1000) {
deleted_humans.push_back(hum);
}
}
for (Human* hum : deleted_humans) {
view_objects_.erase(hum);
}
}
if (view_objects_.size() < 2) {
TouchAllLayerHumanList
(
[this] (Human* hum, bool& stop)
{
if (hum->IsAndroid() && !hum->dead && view_objects_.find(hum) == view_objects_.end()) {
if (hum->GetPos().ManhattanDistance(GetPos()) < 1000) {
view_objects_.insert(hum);
}
if (view_objects_.size() >= 2) {
stop = true;
return;
}
}
});
}
if (view_objects_.size() < 2) {
room->GetIncubator()->AllocAndroid(this, 1 + rand() % 2);
if (refresh_view_timer_) {
room->xtimer.ModifyTimer(refresh_view_timer_, SERVER_FRAME_RATE * (8 + (rand() % 3)));
}
}
}

View File

@ -243,6 +243,7 @@ class Human : public Creature
void SetSeat(int seat) { seat_ = seat; } void SetSeat(int seat) { seat_ = seat; }
void DeadDrop(); void DeadDrop();
virtual std::string GetName() override { return name;}; virtual std::string GetName() override { return name;};
void UpdateViewObjects();
protected: protected:
void _InternalUpdateMove(float speed); void _InternalUpdateMove(float speed);
@ -331,6 +332,7 @@ protected:
Car* car_ = nullptr; Car* car_ = nullptr;
int seat_ = 0; int seat_ = 0;
std::set<Human*> view_objects_; std::set<Human*> view_objects_;
xtimer_list* refresh_view_timer_ = nullptr;
private: private:
CircleCollider* self_collider_ = nullptr; CircleCollider* self_collider_ = nullptr;

View File

@ -129,6 +129,7 @@ void Player::InternalUpdate(int delta_time)
if (has_use_item_id) { if (has_use_item_id) {
UpdateUseItemId(); UpdateUseItemId();
} }
UpdateViewObjects();
} }
} }