This commit is contained in:
aozhiwei 2019-03-20 11:32:41 +08:00
parent 458542ede3
commit 7dd296d55d
6 changed files with 44 additions and 2 deletions

View File

@ -4,6 +4,7 @@
#include "metamgr.h" #include "metamgr.h"
#include "movement.h" #include "movement.h"
#include "room.h" #include "room.h"
#include "collider.h"
Bullet::Bullet():Entity() Bullet::Bullet():Entity()
{ {
@ -19,6 +20,7 @@ Bullet::~Bullet()
void Bullet::Initialize() void Bullet::Initialize()
{ {
RecalcSelfCollider();
} }
void Bullet::Update(int delta_time) void Bullet::Update(int delta_time)
@ -31,3 +33,13 @@ void Bullet::Update(int delta_time)
room->AddDeletedObject(objects[0]->entity_uniid); room->AddDeletedObject(objects[0]->entity_uniid);
} }
} }
void Bullet::RecalcSelfCollider()
{
if (!self_collider_) {
self_collider_ = new CircleCollider();
colliders.push_back(self_collider_);
}
self_collider_->pos = Vector2D();
self_collider_->rad = meta->i->bullet_rad();
}

View File

@ -9,6 +9,7 @@ namespace MetaData
} }
class Human; class Human;
class CircleCollider;
class Bullet : public Entity class Bullet : public Entity
{ {
public: public:
@ -22,4 +23,9 @@ class Bullet : public Entity
virtual ~Bullet() override; virtual ~Bullet() override;
virtual void Initialize() override; virtual void Initialize() override;
virtual void Update(int delta_time) override; virtual void Update(int delta_time) override;
void RecalcSelfCollider();
private:
CircleCollider* self_collider_ = nullptr;
}; };

View File

@ -30,5 +30,12 @@ Entity::~Entity()
bool Entity::TestCollision(Entity* b) bool Entity::TestCollision(Entity* b)
{ {
return false; for (auto& a_collider : b->colliders) {
for (auto& b_collider : b->colliders) {
if (a_collider->Intersect(b_collider)) {
return false;
}
}
}
return true;
} }

View File

@ -6,6 +6,7 @@
#include "metamgr.h" #include "metamgr.h"
#include "room.h" #include "room.h"
#include "bullet.h" #include "bullet.h"
#include "collider.h"
Human::Human() Human::Human()
{ {
@ -26,6 +27,7 @@ void Human::Initialize()
helmet_meta = MetaMgr::Instance()->GetEquip(helmet); helmet_meta = MetaMgr::Instance()->GetEquip(helmet);
chest_meta = MetaMgr::Instance()->GetEquip(chest); chest_meta = MetaMgr::Instance()->GetEquip(chest);
weapon_meta = MetaMgr::Instance()->GetEquip(weapon); weapon_meta = MetaMgr::Instance()->GetEquip(weapon);
RecalcSelfCollider();
} }
float Human::GetSpeed() float Human::GetSpeed()
@ -101,3 +103,13 @@ void Human::Shot(Vector2D& target_dir)
room->AddBullet(bullet); room->AddBullet(bullet);
} }
} }
void Human::RecalcSelfCollider()
{
if (!self_collider_) {
self_collider_ = new CircleCollider();
colliders.push_back(self_collider_);
}
self_collider_->pos = Vector2D();
self_collider_->rad = meta->i->radius();
}

View File

@ -15,6 +15,7 @@ struct HumanFrameData
::google::protobuf::RepeatedPtrField<::cs::MFShot> shots; ::google::protobuf::RepeatedPtrField<::cs::MFShot> shots;
}; };
class CircleCollider;
class Human : public Entity class Human : public Entity
{ {
public: public:
@ -57,5 +58,9 @@ class Human : public Entity
virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override;
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override;
void Shot(Vector2D& target_dir); void Shot(Vector2D& target_dir);
void RecalcSelfCollider();
private:
CircleCollider* self_collider_ = nullptr;
}; };

2
third_party/tools vendored

@ -1 +1 @@
Subproject commit 0fe613a85023d94103a013cadcc4927004aab8b4 Subproject commit 23026cb4e2ec630f6d421f742b65de6752a57b9d