1
This commit is contained in:
parent
9e697629a2
commit
d4b03e49ba
@ -1777,28 +1777,6 @@ void Creature::SummonObstacle(Buff* buff, int id, const Position& target_pos)
|
||||
}
|
||||
}
|
||||
|
||||
bool Creature::CollisonDetection()
|
||||
{
|
||||
ColliderComponent* pickup_collider = nullptr;
|
||||
return CollisonDetectionAndGetCollider(&pickup_collider);
|
||||
}
|
||||
|
||||
bool Creature::CollisonDetectionAndGetCollider(ColliderComponent** pickup_collider)
|
||||
{
|
||||
bool through_wall = HasBuffEffect(kBET_ThroughWall) ||
|
||||
HasBuffEffect(kBET_Fly);
|
||||
AabbCollider aabb_box;
|
||||
GetAabbBox(aabb_box);
|
||||
return room->map_service->CollisionDetectionAndGetCollider
|
||||
(
|
||||
room,
|
||||
through_wall,
|
||||
GetPos(),
|
||||
&aabb_box,
|
||||
pickup_collider
|
||||
);
|
||||
}
|
||||
|
||||
void Creature::FillSkillCasterState(SkillCasterState* caster_state)
|
||||
{
|
||||
caster_state->caster.Attach(this);
|
||||
@ -2163,21 +2141,6 @@ void Creature::SetMaxHP(float max_hp)
|
||||
#endif
|
||||
}
|
||||
|
||||
bool Creature::TryMove(const Position& target_pos, Position& out_pos)
|
||||
{
|
||||
bool move_ok = false;
|
||||
Position old_pos = GetPos();
|
||||
out_pos = GetPos();
|
||||
|
||||
SetPos(target_pos);
|
||||
if (CollisonDetection()) {
|
||||
out_pos = target_pos;
|
||||
move_ok = true;
|
||||
} else {
|
||||
}
|
||||
return move_ok;
|
||||
}
|
||||
|
||||
void Creature::SetInfiniteBulletMode()
|
||||
{
|
||||
inventory_[IS_9MM].num = FIGHTING_MODE_BULLET_NUM;
|
||||
@ -2190,12 +2153,6 @@ void Creature::SetInfiniteBulletMode()
|
||||
|
||||
void Creature::FindLocation()
|
||||
{
|
||||
ColliderComponent* target_collider = nullptr;
|
||||
if (CollisonDetectionAndGetCollider(&target_collider)) {
|
||||
if (!target_collider) {
|
||||
A8_ABORT();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Creature::Attackable(Room* room)
|
||||
@ -2340,13 +2297,7 @@ bool Creature::TrySummonHero(const mt::Hero* hero_meta, glm::vec3 dir, Position
|
||||
collider._max.x = hero_meta->radius();
|
||||
collider._max.y = hero_meta->radius();
|
||||
collider.MoveCenter(hero_meta->move_offset_x(), hero_meta->move_offset_y());
|
||||
return !room->map_service->CollisionDetection
|
||||
(
|
||||
room,
|
||||
through_wall,
|
||||
born_pos,
|
||||
&collider
|
||||
);
|
||||
abort();
|
||||
}
|
||||
|
||||
Hero* Creature::InternalSummonHero(Buff* buff, const mt::Hero* hero_meta, glm::vec3 dir, Position born_pos,
|
||||
|
@ -225,8 +225,6 @@ class Creature : public MoveableEntity
|
||||
void _UpdateSpecMove();
|
||||
|
||||
void CheckSpecObject();
|
||||
bool CollisonDetection();
|
||||
bool CollisonDetectionAndGetCollider(ColliderComponent** pickup_collider);
|
||||
void SummonObstacle(Buff* buff, int id, const Position& target_pos);
|
||||
void SummonHero(Buff* buff, const Position& pos, const glm::vec3& dir);
|
||||
void FillSkillCasterState(SkillCasterState* caster_state);
|
||||
@ -249,7 +247,6 @@ class Creature : public MoveableEntity
|
||||
float GetHPRate();
|
||||
void GetHitEnemys(std::set<Creature*>& enemys, float radius);
|
||||
void GetHitEnemys(std::set<Creature*>& enemys, const glm::vec3 center, float radius);
|
||||
bool TryMove(const Position& target_pos, Position& out_pos);
|
||||
void SetInfiniteBulletMode();
|
||||
void FindLocation();
|
||||
bool CheckCollision();
|
||||
|
@ -77,8 +77,12 @@ void Incubator::AllocAndroid(Human* target, int num)
|
||||
#else
|
||||
hum->SetPos(target->GetPos() + dir * (MetaMgr::Instance()->incubator_base_length + rand_len));
|
||||
#endif
|
||||
#if 1
|
||||
if (true) {
|
||||
#else
|
||||
if (hum->CollisonDetection() || !CanSee(hum, target)) {
|
||||
hum->SetPos(old_pos);
|
||||
#endif
|
||||
} else {
|
||||
room->EnableHuman(hum);
|
||||
#ifdef DEBUG
|
||||
|
@ -297,72 +297,3 @@ int MapService::GetGridId(float world_x, float world_y)
|
||||
int grid_id = (int)(world_x/cell_width_) + (int)(world_y/cell_width_) * map_width_;
|
||||
return grid_id;
|
||||
}
|
||||
|
||||
bool MapService::CollisionDetection(Room* room,
|
||||
bool through_wall,
|
||||
const Position& pos,
|
||||
ColliderComponent* a_collider)
|
||||
{
|
||||
ColliderComponent* pickup_collider = nullptr;
|
||||
return CollisionDetectionAndGetCollider
|
||||
(
|
||||
room,
|
||||
through_wall,
|
||||
pos,
|
||||
a_collider,
|
||||
&pickup_collider
|
||||
);
|
||||
}
|
||||
|
||||
bool MapService::CollisionDetectionAndGetCollider(Room* room,
|
||||
bool through_wall,
|
||||
const Position& pos,
|
||||
ColliderComponent* a_collider,
|
||||
ColliderComponent** pickup_collider)
|
||||
{
|
||||
// 999
|
||||
#if 1
|
||||
#else
|
||||
*pickup_collider = nullptr;
|
||||
if (room->OverBorder(pos, a_collider)){
|
||||
return true;
|
||||
}
|
||||
if (through_wall) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::set<ColliderComponent*> colliders;
|
||||
GetColliders(room, pos.x, pos.y, colliders);
|
||||
|
||||
for (ColliderComponent* collider : colliders) {
|
||||
switch (collider->owner->GetEntityType()) {
|
||||
case ET_Obstacle:
|
||||
{
|
||||
Obstacle* obstacle = (Obstacle*)collider->owner;
|
||||
if (obstacle->meta->prebattle_hide() && room->GetGasData().GetGasMode() == GasInactive) {
|
||||
break;
|
||||
}
|
||||
if (obstacle->meta->collision_hit() != kCollisionHitPass) {
|
||||
if (!obstacle->IsDead(room) && collider->IntersectEx(pos, a_collider)) {
|
||||
*pickup_collider = collider;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ET_Building:
|
||||
case ET_Dummy:
|
||||
{
|
||||
if (collider->IntersectEx(pos, a_collider)) {
|
||||
*pickup_collider = collider;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
@ -32,15 +32,6 @@ class MapService
|
||||
float world_x,
|
||||
float world_y,
|
||||
std::set<ColliderComponent*>& colliders);
|
||||
bool CollisionDetection(Room* room,
|
||||
bool through_wall,
|
||||
const Position& pos,
|
||||
ColliderComponent* collider);
|
||||
bool CollisionDetectionAndGetCollider(Room* room,
|
||||
bool through_wall,
|
||||
const Position& pos,
|
||||
ColliderComponent* collider,
|
||||
ColliderComponent** pickup_collider);
|
||||
|
||||
private:
|
||||
int GetGridId(float world_x, float world_y);
|
||||
|
Loading…
x
Reference in New Issue
Block a user