1
This commit is contained in:
parent
56a073aea8
commit
43997995f4
@ -8,6 +8,7 @@
|
||||
#include "creature.h"
|
||||
#include "collider.h"
|
||||
#include "roomobstacle.h"
|
||||
#include "human.h"
|
||||
|
||||
float VirtualBullet::GetStrengthenWall()
|
||||
{
|
||||
@ -273,7 +274,23 @@ void VirtualBullet::ForceRemove()
|
||||
|
||||
void VirtualBullet::OnHit(std::set<Entity*>& objects)
|
||||
{
|
||||
std::shared_ptr<Ability> old_context_ability = sender.Get()->context_ability;
|
||||
a8::Vec2 old_context_dir = sender.Get()->context_dir;
|
||||
a8::Vec2 old_context_pos = sender.Get()->context_pos;
|
||||
sender.Get()->context_dir = dir;
|
||||
sender.Get()->context_pos = GetPos();
|
||||
|
||||
for (auto& target : objects) {
|
||||
bool old_is_dead = target->IsDead(room);
|
||||
target->OnBulletHit(this);
|
||||
if (target->IsDead(room) && !old_is_dead) {
|
||||
OnKillTarget(target);
|
||||
}
|
||||
}
|
||||
|
||||
sender.Get()->context_dir = old_context_dir;
|
||||
sender.Get()->context_pos = old_context_pos;
|
||||
sender.Get()->context_ability = old_context_ability;
|
||||
}
|
||||
|
||||
void VirtualBullet::Init()
|
||||
@ -311,3 +328,13 @@ void VirtualBullet::OnStrengthen(Obstacle* ob)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VirtualBullet::OnKillTarget(Entity* target)
|
||||
{
|
||||
if (target->IsCreature(room)) {
|
||||
Creature* c = (Creature*)target;
|
||||
if (c->IsHuman() && sender.Get() && sender.Get()->IsHuman()) {
|
||||
sender.Get()->AsHuman()->stats.IncWeaponKills(gun_meta->i->id(), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ namespace MetaData
|
||||
}
|
||||
|
||||
struct GridCell;
|
||||
class Entity;
|
||||
class Room;
|
||||
class Obstacle;
|
||||
class VirtualBullet : public IBullet, public ITask
|
||||
@ -51,6 +52,7 @@ class VirtualBullet : public IBullet, public ITask
|
||||
std::set<GridCell*>& GetGridList() { return grid_list_; };
|
||||
bool TestCollision(Room* room, ColliderComponent* b);
|
||||
void OnStrengthen(Obstacle* ob);
|
||||
void OnKillTarget(Entity* target);
|
||||
|
||||
private:
|
||||
bool later_removed_ = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user