public static bool IsAtBufferZone(Vector3 pPoint) { Vector3 mainBotLeft = CProjectData.mainHeader.BotLeftCorner; Vector3 mainTopRight = CProjectData.mainHeader.TopRightCorner; float distanceFromWholeForestBorder = CUtils.GetDistanceFromBorder(pPoint, mainBotLeft, mainTopRight); Vector3 tileBotLeft = CProjectData.currentTileHeader.BotLeftCorner; Vector3 tileTopRight = CProjectData.currentTileHeader.TopRightCorner; float distanceFromCurrentTileBorder = CUtils.GetDistanceFromBorder(pPoint, tileBotLeft, tileTopRight); //is close at tile border if (distanceFromCurrentTileBorder < CProjectData.bufferSize) { //is close at whole forest border - only corners are considered a buffer zone if (distanceFromWholeForestBorder < CProjectData.bufferSize) { float distanceXFromCurrentTileBorder = CUtils.GetDistanceFromBorderX(pPoint, tileBotLeft, tileTopRight); float distanceYFromCurrentTileBorder = CUtils.GetDistanceFromBorderY(pPoint, tileBotLeft, tileTopRight); float distanceXFromForest = CUtils.GetDistanceFromBorderX(pPoint, mainBotLeft, mainTopRight); float distanceYFromForest = CUtils.GetDistanceFromBorderY(pPoint, mainBotLeft, mainTopRight); bool isAtTileCorner = distanceXFromCurrentTileBorder < CProjectData.bufferSize && distanceYFromCurrentTileBorder < CProjectData.bufferSize; bool isNotAtForestCorner = distanceXFromForest > CProjectData.bufferSize || distanceYFromForest > CProjectData.bufferSize; return(isAtTileCorner && isNotAtForestCorner); } return(true); } return(false); }