bool willCollide(Vector2 positionToMoveTo, Texture2D movingObject) { Vector2 currentViewport = currentMap.getViewport(); //Vector2 moveToRelativeToScreen = new Vector2(positionToMoveTo.X - currentViewport.X, positionToMoveTo.Y - currentViewport.Y); Matrix movingObjectMatrix = Matrix.CreateTranslation(positionToMoveTo.X, positionToMoveTo.Y, 0); Color[,] movingObjectColours = Helpers.TextureTo2DArray(movingObject); //check for consumable objects foreach (ConsumableMapObject obj in currentMap.getNonEnterableObjects()) { Vector2 objPositionRelativeToScreen = new Vector2(obj.getLocation().X - currentViewport.X, obj.getLocation().Y - currentViewport.Y); Matrix objectMatrix = Matrix.CreateTranslation(objPositionRelativeToScreen.X, objPositionRelativeToScreen.Y, 0); Color[,] nonEnterableObjectColours = Helpers.TextureTo2DArray(obj.getTexture()); Vector2 collisionPoint = Helpers.TexturesCollide(nonEnterableObjectColours, objectMatrix, movingObjectColours, movingObjectMatrix); if (collisionPoint.X != -1) { collidingObject = obj; currentPlayer.setAdjacantObject(obj); return(true); } } //check for enterable objects. foreach (EnterableMapObject obj in currentMap.getEnterableObjects()) { Vector2 objPositionRelativeToScreen = new Vector2(obj.getLocation().X - currentViewport.X, obj.getLocation().Y - currentViewport.Y); Matrix objectMatrix = Matrix.CreateTranslation(objPositionRelativeToScreen.X, objPositionRelativeToScreen.Y, 0); Color[,] nonEnterableObjectColours = Helpers.TextureTo2DArray(obj.getTexture()); Vector2 collisionPoint = Helpers.TexturesCollide(nonEnterableObjectColours, objectMatrix, movingObjectColours, movingObjectMatrix); if (collisionPoint.X != -1) { Vector2 actualObjectPosition = new Vector2((positionToMoveTo.X + currentViewport.X), positionToMoveTo.Y + currentViewport.Y); if (obj.canEnterFromPosition(actualObjectPosition)) { worldMapPos = new Vector2((obj.getLocation().X + obj.getTexture().Width / 2) - currentViewport.X, obj.getLocation().Y - currentViewport.Y + obj.getTexture().Height); currentPlayer.setPosition(new Vector2(0, 0)); currentMap = obj.getMap(); } return(true); } } if (currentMap.moveWillExitMap(positionToMoveTo, movingObject)) { return(true); } Color[,] exitColours = Helpers.TextureTo2DArray(currentMap.getExitTexture()); Matrix exitMatrix = Matrix.CreateTranslation(currentMap.getExitPos().X, currentMap.getExitPos().Y, 0); Vector2 exitCollisionPoint = Helpers.TexturesCollide(exitColours, exitMatrix, movingObjectColours, movingObjectMatrix); if (exitCollisionPoint.X != -1) { currentPlayer.setPosition(worldMapPos); currentMap = worldMap; return(true); } //check for leaving the map if (positionToMoveTo.X < 0 || positionToMoveTo.Y < 0 || positionToMoveTo.X > (graphics.PreferredBackBufferWidth - currentPlayer.getTexture().Width) || positionToMoveTo.Y > (graphics.PreferredBackBufferHeight - currentPlayer.getTexture().Height)) { return(true); } collidingObject = null; currentPlayer.setAdjacantObject(null); return(false); }