public void AddToRegister(string key, ICanCollide gameObject, RegisterSide side) { CheckObjectForNull(gameObject); var register = _collisionRegisters[key]; if (side == RegisterSide.Left) { if (register.RegistredItems.Item1.Contains(gameObject)) { throw new GameObjectAlreadyExistsInRegisterException(); } register.RegistredItems.Item1.Add(gameObject); } else { if (register.RegistredItems.Item2.Contains(gameObject)) { throw new GameObjectAlreadyExistsInRegisterException(); } register.RegistredItems.Item2.Add(gameObject); } }
public static bool CheckForCollision(ICanCollide first, ICanCollide second) { var firstFarVerticle = new Vector2i(first.Position.X + first.Size.X, first.Position.Y + first.Size.Y); var secondFarVerticle = new Vector2i(second.Position.X + second.Size.X, second.Position.Y + second.Size.Y); return(SecondCollideWithFirstOnX(first, second, firstFarVerticle, secondFarVerticle) && SecondCollideWithFirstOnY(first, second, firstFarVerticle, secondFarVerticle)); }
public void RemoveObjectFromAllRegisters(ICanCollide gameObject) { CheckObjectForNull(gameObject); foreach (var register in _collisionRegisters.Values) { register.RegistredItems.Item1.Remove(gameObject); register.RegistredItems.Item2.Remove(gameObject); } }
/// <summary> /// Legg til et element i listene over elementer som kan kollidere dersom listene ikke allerede inneholder elementet /// </summary> /// <param name="canCollide">Elementet du vil legge inn</param> public void AddCollidable(ICanCollide canCollide) { if(_canCollideList.Contains(canCollide)) { return; } if (canCollide == null) { Console.WriteLine("Unable to add collidable!"); return; } _canCollideList.Add(canCollide); _listToCheck.Add(canCollide); }
public void RemoveObjectFromAllRegisterBySide(ICanCollide gameObject, RegisterSide side) { CheckObjectForNull(gameObject); foreach (var register in _collisionRegisters.Values) { if (side == RegisterSide.Left) { register.RegistredItems.Item1.Remove(gameObject); } else { register.RegistredItems.Item2.Remove(gameObject); } } }
public void RemoveObjectFromRegisterBySide(string key, ICanCollide gameObject, RegisterSide side) { CheckObjectForNull(gameObject); if (!_collisionRegisters.ContainsKey(key)) { throw new KeyNotFoundInRegisterException(); } var register = _collisionRegisters[key]; if (side == RegisterSide.Left) { register.RegistredItems.Item1.Remove(gameObject); } else { register.RegistredItems.Item2.Remove(gameObject); } }
/// <summary> /// Fjern et element i listene over elementer som kan kollidere /// </summary> /// <param name="toRemove"></param> public void RemoveCollidable(ICanCollide toRemove) { _canCollideList.Remove(toRemove); _listToCheck.Remove(toRemove); }
private static bool SecondCollideWithFirstOnX(ICanCollide first, ICanCollide second, Vector2i firstFarVerticle, Vector2i secondFarVerticle) { return(ValueBeetweenValues(first.Position.X, second.Position.X, firstFarVerticle.X) || ValueBeetweenValues(first.Position.X, secondFarVerticle.X, firstFarVerticle.X) || ValueBeetweenValues(second.Position.X, first.Position.X, secondFarVerticle.X)); }