添加穿透处理

This commit is contained in:
aozhiwei 2019-07-26 15:27:07 +08:00
parent 631375cdac
commit bf1a2b7ff5
2 changed files with 27 additions and 7 deletions

View File

@ -45,11 +45,20 @@ void Bullet::Update(int delta_time)
if (hum != master && !hum->dead &&
(hum->team_id == 0 || master->team_id != hum->team_id)) {
if (hum->TestCollision(&bullet_collider)) {
if (meta->i->is_through()) {
//可穿透
if (hited_humans_.find(hum) == hited_humans_.end()) {
hited_humans_.insert(hum);
objects.insert(hum);
}
} else {
objects.insert(hum);
}
}
}
}
}//end for
float bullet_range = meta->i->range() + master->ability.shot_range + master->BuffAttrAbs(kHAT_ShotRange);
if (!meta->i->is_through()) {
std::set<ColliderComponent*> colliders;
room->map_service.GetColliders(pos.x, pos.y, colliders);
@ -58,8 +67,6 @@ void Bullet::Update(int delta_time)
objects.insert(collider->owner);
}
}
}
float bullet_range = meta->i->range() + master->ability.shot_range + master->BuffAttrAbs(kHAT_ShotRange);
if (!objects.empty() || distance > bullet_range ) {
deleted = true;
if (!objects.empty()) {
@ -68,6 +75,16 @@ void Bullet::Update(int delta_time)
PostAttack();
room->RemoveObjectLater(this);
}
} else {
if (!objects.empty()) {
OnHit(objects);
}
if (distance > bullet_range ) {
deleted = true;
PostAttack();
room->RemoveObjectLater(this);
}
}
}
}

View File

@ -30,4 +30,7 @@ class Bullet : public Entity
void OnHit(std::set<Entity*>& objects);
void PostAttack();
private:
std::set<Human*> hited_humans_;
};