MCPcopy Create free account
hub / github.com/codecombat/codecombat / generateBorder

Function generateBorder

app/lib/terrain-generation.js:494–597  ·  view source on GitHub ↗
(result)

Source from the content-addressed store, hash-verified

492}
493
494function 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,

Callers 1

generateThangsFunction · 0.85

Calls 2

addThangFunction · 0.85
getRandomThangFunction · 0.85

Tested by

no test coverage detected