(result)
| 492 | } |
| 493 | |
| 494 | function generateBorder (result) { |
| 495 | let noiseFactor = result.preset.borderNoise |
| 496 | if (noiseFactor === undefined) { |
| 497 | noiseFactor = 1 |
| 498 | } |
| 499 | const borderOffset = { x: result.preset.borderOffset?.x || 0, y: result.preset.borderOffset?.y || 0 } |
| 500 | const borderSize = result.preset.borderSize ? { x: result.preset.borderSize, y: result.preset.borderSize } : thangSizes.borderSize |
| 501 | let rightX = Math.ceil((result.presetSize.x - borderOffset.x * 2) / borderSize.x) * borderSize.x + borderOffset.x |
| 502 | let topY = Math.ceil((result.presetSize.y - borderOffset.y * 2) / borderSize.y) * borderSize.y + borderOffset.y |
| 503 | // Actually, for junior, just cheat and use the rows/cols, since the viewable area might be bigger than the playable area |
| 504 | if (result.presetSize.rows && result.presetSize.cols) { |
| 505 | rightX = (result.presetSize.cols + 2) * borderSize.x + borderOffset.x |
| 506 | topY = (result.presetSize.rows + 2) * borderSize.y + borderOffset.y |
| 507 | } |
| 508 | for (const i of _.range(borderOffset.x, rightX, borderSize.x)) { |
| 509 | for (const j of _.range(result.preset.borderThickness)) { // eslint-disable-line no-unused-vars |
| 510 | // Bottom wall |
| 511 | while (!addThang(result, { |
| 512 | id: getRandomThang(clusters[result.preset.borders].thangs), |
| 513 | pos: { |
| 514 | x: i + (result.preset.borderSize / 2) + (noiseFactor * _.random(-borderSize.x / 2, borderSize.x / 2)), |
| 515 | y: 0 + (result.preset.borderSize / 2) + (noiseFactor * _.random(-borderSize.y / 2, borderSize.y)) + borderOffset.y |
| 516 | }, |
| 517 | margin: clusters[result.preset.borders].margin |
| 518 | })) { |
| 519 | continue |
| 520 | } |
| 521 | |
| 522 | // Top wall |
| 523 | while (!addThang(result, { |
| 524 | id: getRandomThang(clusters[result.preset.borders].thangs), |
| 525 | pos: { |
| 526 | x: i + (result.preset.borderSize / 2) + (noiseFactor * _.random(-borderSize.x / 2, borderSize.x / 2)), |
| 527 | y: (topY - (result.preset.borderSize / 2)) + (noiseFactor * _.random(-borderSize.y, borderSize.y / 2)) |
| 528 | }, |
| 529 | margin: clusters[result.preset.borders].margin |
| 530 | })) { |
| 531 | continue |
| 532 | } |
| 533 | |
| 534 | // Double wall on top |
| 535 | if (result.presetSize.doubleTopWall) { |
| 536 | addThang(result, { |
| 537 | id: getRandomThang(clusters[result.preset.borders].thangs), |
| 538 | pos: { |
| 539 | x: i + (result.preset.borderSize / 2) + borderOffset.x, |
| 540 | y: topY - ((3 * result.preset.borderSize) / 2) - borderOffset.y |
| 541 | }, |
| 542 | margin: clusters[result.preset.borders].margin |
| 543 | }) |
| 544 | } |
| 545 | // Dungeon wall decorations |
| 546 | if (['dungeon'].includes(result.preset.type)) { |
| 547 | if (((i / result.preset.borderSize) % 2) && (i !== (rightX - borderSize.x))) { |
| 548 | addThang(result, { |
| 549 | id: getRandomThang(clusters.torch.thangs), |
| 550 | pos: { |
| 551 | x: i + result.preset.borderSize + borderOffset.x, |
no test coverage detected