1
This commit is contained in:
parent
edefe4189e
commit
23e9ef0af5
@ -30,6 +30,7 @@ enum EntitySubType_e
|
|||||||
};
|
};
|
||||||
|
|
||||||
class Room;
|
class Room;
|
||||||
|
class Obstacle;
|
||||||
class ColliderComponent;
|
class ColliderComponent;
|
||||||
class MovementComponent;
|
class MovementComponent;
|
||||||
class Entity
|
class Entity
|
||||||
@ -45,6 +46,8 @@ class Entity
|
|||||||
std::list<ColliderComponent*> colliders;
|
std::list<ColliderComponent*> colliders;
|
||||||
bool deleted = false;
|
bool deleted = false;
|
||||||
|
|
||||||
|
Obstacle* last_collision_door = nullptr;
|
||||||
|
|
||||||
Entity() {};
|
Entity() {};
|
||||||
virtual ~Entity();
|
virtual ~Entity();
|
||||||
virtual void Initialize() {};
|
virtual void Initialize() {};
|
||||||
|
@ -14,6 +14,7 @@ struct HumanFrameData
|
|||||||
};
|
};
|
||||||
|
|
||||||
class CircleCollider;
|
class CircleCollider;
|
||||||
|
class Obstacle;
|
||||||
class Human : public Entity
|
class Human : public Entity
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -96,6 +96,9 @@ void Player::UpdateMove()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (last_collision_door && !TestCollision(last_collision_door)) {
|
||||||
|
last_collision_door = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::UpdateShot()
|
void Player::UpdateShot()
|
||||||
@ -193,6 +196,11 @@ void Player::ObstacleInteraction(Obstacle* entity)
|
|||||||
for (auto& pair : room->human_hash_) {
|
for (auto& pair : room->human_hash_) {
|
||||||
pair.second->new_objects.insert(entity);
|
pair.second->new_objects.insert(entity);
|
||||||
pair.second->part_objects.insert(entity);
|
pair.second->part_objects.insert(entity);
|
||||||
|
if (entity->TestCollision(pair.second)) {
|
||||||
|
pair.second->last_collision_door = entity;
|
||||||
|
} else if (pair.second->last_collision_door == entity) {
|
||||||
|
pair.second->last_collision_door = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,7 +285,9 @@ void Room::CollisionDetection(Entity* sender, int detection_flags, std::vector<E
|
|||||||
}
|
}
|
||||||
if (a8::HasBitFlag(detection_flags, ET_Obstacle) && pair.second->entity_type == ET_Obstacle) {
|
if (a8::HasBitFlag(detection_flags, ET_Obstacle) && pair.second->entity_type == ET_Obstacle) {
|
||||||
if (sender->entity_type == ET_Bullet || sender->entity_type == ET_Player) {
|
if (sender->entity_type == ET_Bullet || sender->entity_type == ET_Player) {
|
||||||
if (pair.second != sender && sender->TestCollision(pair.second)) {
|
if (pair.second != sender &&
|
||||||
|
(sender->last_collision_door == nullptr || sender->last_collision_door != pair.second) &&
|
||||||
|
sender->TestCollision(pair.second)) {
|
||||||
objects.push_back(pair.second);
|
objects.push_back(pair.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user