CheckComponentCollision normak version
This commit is contained in:
parent
9882de9308
commit
997f5db24a
2 changed files with 80 additions and 23 deletions
|
@ -13,9 +13,11 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager
|
|||
{
|
||||
//==ПОЛЯ==
|
||||
|
||||
public GameObject gameObject { get; set; }
|
||||
public Rectangle Bounds { get; set; }
|
||||
|
||||
//public GameObject gameObject { get; set; }
|
||||
//public Rectangle Bounds { get; set; }
|
||||
|
||||
public Rectangle Rectangle => new Rectangle();
|
||||
|
||||
bool doesStop;
|
||||
Rectangle stopRectangle;
|
||||
|
||||
|
@ -26,15 +28,11 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager
|
|||
//delegate
|
||||
public delegate void EventHandler(object sender, EventArgs e);
|
||||
|
||||
public CollisionComponent(int x, int y, int width, int height)
|
||||
{
|
||||
Bounds = new Rectangle(x, y, width, height);
|
||||
}
|
||||
//public CollisionComponent(int x, int y, int width, int height)
|
||||
//{
|
||||
// Bounds = new Rectangle(x, y, width, height);
|
||||
//}
|
||||
|
||||
public CollisionComponent(Rectangle bounds)
|
||||
{
|
||||
Bounds = bounds;
|
||||
}
|
||||
|
||||
|
||||
//events
|
||||
|
|
|
@ -22,22 +22,81 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager
|
|||
|
||||
|
||||
//чекаем коллизии в листе
|
||||
public bool CheckComponentCollision(List<CollisionComponent> collisionComponents, CollisionComponent component)
|
||||
public void CheckComponentCollision(Entity entity)
|
||||
{
|
||||
foreach (var collision in collisionComponents)
|
||||
{
|
||||
if (component.Bounds.IntersectsWith(collision.Bounds))
|
||||
//for (int i = 0; i < ObjectsWithCollisions.Count; i++)
|
||||
//{
|
||||
var currentRect = entity.Rectangle;//задаём РЕК
|
||||
var newRect = currentRect; // задаём значение старого РЕК новому РЕК
|
||||
bool flagRemovedObject = false; //флаг удаления
|
||||
|
||||
|
||||
var collidedX = false; // соприкосновение
|
||||
var tryingRectX = currentRect;//переменная для попытки перемещения по X
|
||||
|
||||
tryingRectX.Offset((int)(entity.velocity.X), 0);//задаём значения для tryingRectX по X и по Y
|
||||
|
||||
foreach (var item in ObjectsWithCollisions)//фильтрация
|
||||
{
|
||||
//Register(component, );
|
||||
return true;
|
||||
if (Math.Abs(item.Pos.X - entity.Pos.X) < 550
|
||||
&& Math.Abs(item.Pos.Y - entity.Pos.Y) < 550
|
||||
&& tryingRectX.Intersect(item.Rectangle))
|
||||
|
||||
{
|
||||
collidedX = true;// меняем значение соприкосновения на true
|
||||
entity.OnCollision(item);//подписываем entity на ивент коллизии
|
||||
|
||||
break;// выход
|
||||
}
|
||||
}
|
||||
|
||||
if (collidedX)// срабатывает, если перемещение блокируется
|
||||
{
|
||||
entity.velocity.X = 0;// задаём значение смещения entity на 0
|
||||
}
|
||||
else
|
||||
{
|
||||
newRect.X = tryingRectX.X;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК
|
||||
}
|
||||
|
||||
//==ПОВТОРЯЕМ ТОЖЕ САМОЕ ДЛЯ Y==
|
||||
|
||||
var collidedY = false; // соприкосновение
|
||||
var tryingRectY = currentRect;//переменная для попытки перемещения по X
|
||||
|
||||
tryingRectY.Offset((int)(0, entity.velocity.Y));//задаём значения для tryingRectX по X и по Y
|
||||
|
||||
foreach (var item in ObjectsWithCollisions)//фильтрация
|
||||
{
|
||||
if (Math.Abs(item.Pos.X - entity.Pos.X) < 550
|
||||
&& Math.Abs(item.Pos.Y - entity.Pos.Y) < 550
|
||||
&& tryingRectY.Intersect(item.Rectangle))
|
||||
|
||||
{
|
||||
collidedY = true;// меняем значение соприкосновения на true
|
||||
entity.OnCollision(item);//подписываем entity на ивент коллизии
|
||||
|
||||
break;// выход
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
if (collidedY)// срабатывает, если перемещение блокируется
|
||||
{
|
||||
entity.velocity.Y = 0;// задаём значение смещения entity на 0
|
||||
}
|
||||
else
|
||||
{
|
||||
newRect.Y = tryingRectY.Y;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
//обновление позиций
|
||||
public void UpdateObjectPosition(List<CollisionComponent> collisionComponents, CollisionComponent component)
|
||||
//обновление позиции объекта
|
||||
public void UpdateObjectsPositions()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -51,12 +110,12 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager
|
|||
|
||||
|
||||
//регистрация компонента(его коллизии)
|
||||
public void Register(CollisionComponent component, GameObject gameObject)
|
||||
public void Register(CollisionComponent component)
|
||||
{
|
||||
ObjectsWithCollisions.Add(component);
|
||||
if (component.gameObject is Entity)
|
||||
{
|
||||
ObjectsWithCollisions.Add(component);
|
||||
|
||||
EntitiesWithMovements.Add(component);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue