1
This commit is contained in:
parent
8b76a1cd57
commit
32d2325e20
@ -73,6 +73,7 @@ void AndroidNewAI::Update(int delta_time)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
UpdateNewAI();
|
UpdateNewAI();
|
||||||
|
hum->UpdateViewObjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
float AndroidNewAI::GetAttackRate()
|
float AndroidNewAI::GetAttackRate()
|
||||||
|
@ -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)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -129,6 +129,7 @@ void Player::InternalUpdate(int delta_time)
|
|||||||
if (has_use_item_id) {
|
if (has_use_item_id) {
|
||||||
UpdateUseItemId();
|
UpdateUseItemId();
|
||||||
}
|
}
|
||||||
|
UpdateViewObjects();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user