diff options
| author | Mike Buland <Mike.Buland@mjfirm.com> | 2016-10-24 14:14:19 -0600 |
|---|---|---|
| committer | Mike Buland <Mike.Buland@mjfirm.com> | 2016-10-24 14:14:19 -0600 |
| commit | 39d593054de993469809170ebf53a231caac92fb (patch) | |
| tree | 4dfec57800e0d994977b96491d44ad0cb6126c2d /js | |
| parent | af8190aea9296ae82fbb08ebf01a15ce45faa8d1 (diff) | |
| download | lost-39d593054de993469809170ebf53a231caac92fb.tar.gz lost-39d593054de993469809170ebf53a231caac92fb.tar.bz2 lost-39d593054de993469809170ebf53a231caac92fb.tar.xz lost-39d593054de993469809170ebf53a231caac92fb.zip | |
It's all responsive now. Also it can loop.
Diffstat (limited to '')
| -rw-r--r-- | js/lost.css | 46 | ||||
| -rw-r--r-- | js/lost.html | 27 | ||||
| -rw-r--r-- | js/lost.js | 266 |
3 files changed, 248 insertions, 91 deletions
diff --git a/js/lost.css b/js/lost.css new file mode 100644 index 0000000..7c51760 --- /dev/null +++ b/js/lost.css | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | @media (orientation: portrait) { | ||
| 2 | } | ||
| 3 | |||
| 4 | @media (orientation: landscape) { | ||
| 5 | #maze-box { | ||
| 6 | display:inline-block; | ||
| 7 | vertical-align: middle; | ||
| 8 | } | ||
| 9 | #button-box { | ||
| 10 | display: inline-block; | ||
| 11 | vertical-align: middle; | ||
| 12 | } | ||
| 13 | #floor-box { | ||
| 14 | display: block; | ||
| 15 | vertical-align: top; | ||
| 16 | } | ||
| 17 | #sidebar { | ||
| 18 | display: inline-block; | ||
| 19 | vertical-align: top; | ||
| 20 | } | ||
| 21 | #ui-box { | ||
| 22 | text-align: center; | ||
| 23 | vertical-align: top; | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 27 | #maze-box { | ||
| 28 | text-align: center; | ||
| 29 | } | ||
| 30 | |||
| 31 | #button-box { | ||
| 32 | text-align: center; | ||
| 33 | } | ||
| 34 | |||
| 35 | #button-box table { | ||
| 36 | margin-left: auto; | ||
| 37 | margin-right: auto; | ||
| 38 | } | ||
| 39 | |||
| 40 | .float-clear { | ||
| 41 | clear: both; | ||
| 42 | } | ||
| 43 | |||
| 44 | #floor-box { | ||
| 45 | text-align: center; | ||
| 46 | } | ||
diff --git a/js/lost.html b/js/lost.html index 820b1fc..d4443ab 100644 --- a/js/lost.html +++ b/js/lost.html | |||
| @@ -2,8 +2,35 @@ | |||
| 2 | <html> | 2 | <html> |
| 3 | <head> | 3 | <head> |
| 4 | <title>Lost</title> | 4 | <title>Lost</title> |
| 5 | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
| 6 | <link rel="stylesheet" href="lost.css"> | ||
| 5 | </head> | 7 | </head> |
| 6 | <body> | 8 | <body> |
| 9 | <div id="ui-box"> | ||
| 10 | <div id="maze-box"></div> | ||
| 11 | <div id="button-box"></div> | ||
| 12 | </div> | ||
| 13 | <div id="floor-box"></div> | ||
| 14 | <div class="float-clear"></div> | ||
| 15 | <div id="editor-cont"> | ||
| 16 | <p>Provide a number below for each dimension in the new maze. The numbers are the size of each dimension. Entering "10, 3" will create a maze that is 10 wide and 3 tall. Entering "5, 5, 5, 5, 5" will create a 5 dimensional maze, every dimension will be 5 wide.</p> | ||
| 17 | <div id="editor-box"></div> | ||
| 18 | </div> | ||
| 19 | <div id="share-box"></div> | ||
| 7 | <script src="lost.js"></script> | 20 | <script src="lost.js"></script> |
| 21 | <script type="text/javascript"> | ||
| 22 | lostInit({ | ||
| 23 | 'render': { | ||
| 24 | 'name': 'RenderCanvas2D', | ||
| 25 | 'params': { | ||
| 26 | 'maze': 'maze-box', | ||
| 27 | 'buttons': 'button-box', | ||
| 28 | 'readout': 'floor-box' | ||
| 29 | } | ||
| 30 | }, | ||
| 31 | 'editor': 'editor-box', | ||
| 32 | 'share': 'share-box' | ||
| 33 | }); | ||
| 34 | </script> | ||
| 8 | </body> | 35 | </body> |
| 9 | </html> | 36 | </html> |
| @@ -321,7 +321,7 @@ Map.prototype.get = function get( Position ) | |||
| 321 | return this.aCell[this.getIndex( Position )]; | 321 | return this.aCell[this.getIndex( Position )]; |
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | Map.prototype.addWorm = function addWorm( pStart ) | 324 | Map.prototype.addWorm = function addWorm( pStart, dLoopChance ) |
| 325 | { | 325 | { |
| 326 | if( this.pPlayer === null ) | 326 | if( this.pPlayer === null ) |
| 327 | { | 327 | { |
| @@ -337,7 +337,8 @@ Map.prototype.addWorm = function addWorm( pStart ) | |||
| 337 | new Worm( | 337 | new Worm( |
| 338 | iNewId, | 338 | iNewId, |
| 339 | pStart, | 339 | pStart, |
| 340 | this | 340 | this, |
| 341 | dLoopChance | ||
| 341 | ) | 342 | ) |
| 342 | ); | 343 | ); |
| 343 | return iNewId; | 344 | return iNewId; |
| @@ -440,13 +441,14 @@ function Vector( pPos, iDir ) | |||
| 440 | // | 441 | // |
| 441 | // Class: Worm | 442 | // Class: Worm |
| 442 | // | 443 | // |
| 443 | function Worm( iId, pStart, rMap ) | 444 | function Worm( iId, pStart, rMap, dLoopChance ) |
| 444 | { | 445 | { |
| 445 | // Initialize basic state, we start with distance set to 1 | 446 | // Initialize basic state, we start with distance set to 1 |
| 446 | this.iId = iId; | 447 | this.iId = iId; |
| 447 | this.pPosition = pStart; | 448 | this.pPosition = pStart; |
| 448 | this.rMap = rMap; | 449 | this.rMap = rMap; |
| 449 | this.iDist = 1; | 450 | this.iDist = 1; |
| 451 | this.dLoopChance = dLoopChance; | ||
| 450 | 452 | ||
| 451 | // Setup walls here to create an opening. We're only going to do | 453 | // Setup walls here to create an opening. We're only going to do |
| 452 | // this on the first two dimensions. This assumes that we have at least | 454 | // this on the first two dimensions. This assumes that we have at least |
| @@ -480,10 +482,14 @@ Worm.prototype.timestep = function timestep() | |||
| 480 | 482 | ||
| 481 | // Possible directions | 483 | // Possible directions |
| 482 | let pDirs = []; | 484 | let pDirs = []; |
| 485 | let pLoopDirs; | ||
| 483 | 486 | ||
| 487 | let cCur; | ||
| 484 | for(;;) | 488 | for(;;) |
| 485 | { | 489 | { |
| 490 | cCur = this.rMap.get( this.pPosition ); | ||
| 486 | let pBack = null; | 491 | let pBack = null; |
| 492 | pLoopDirs = []; | ||
| 487 | for( let j = 0; j < iDims; j++ ) | 493 | for( let j = 0; j < iDims; j++ ) |
| 488 | { | 494 | { |
| 489 | let iSize = this.rMap.getSize( j ); | 495 | let iSize = this.rMap.getSize( j ); |
| @@ -500,6 +506,11 @@ Worm.prototype.timestep = function timestep() | |||
| 500 | { | 506 | { |
| 501 | pBack = pPos; | 507 | pBack = pPos; |
| 502 | } | 508 | } |
| 509 | else if( (cCur.iWalls&(1<<(j*2))) === 0 && | ||
| 510 | xCell.iPath === this.iId ) | ||
| 511 | { | ||
| 512 | pLoopDirs.push( new Vector( pPos, j*2 ) ); | ||
| 513 | } | ||
| 503 | } | 514 | } |
| 504 | 515 | ||
| 505 | pPos = this.pPosition.translate( j, 1 ); | 516 | pPos = this.pPosition.translate( j, 1 ); |
| @@ -515,6 +526,11 @@ Worm.prototype.timestep = function timestep() | |||
| 515 | { | 526 | { |
| 516 | pBack = pPos; | 527 | pBack = pPos; |
| 517 | } | 528 | } |
| 529 | else if( (cCur.iWalls&(1<<(j*2+1))) === 0 && | ||
| 530 | xCell.iPath === this.iId ) | ||
| 531 | { | ||
| 532 | pLoopDirs.push( new Vector( pPos, j*2+1 ) ); | ||
| 533 | } | ||
| 518 | } | 534 | } |
| 519 | } | 535 | } |
| 520 | 536 | ||
| @@ -536,25 +552,34 @@ Worm.prototype.timestep = function timestep() | |||
| 536 | } | 552 | } |
| 537 | } | 553 | } |
| 538 | 554 | ||
| 555 | cCur = this.rMap.get( this.pPosition ); | ||
| 539 | let iSel = randInt( pDirs.length ); | 556 | let iSel = randInt( pDirs.length ); |
| 540 | let cCur = this.rMap.get( this.pPosition ); | ||
| 541 | cCur.iWalls |= (1<<pDirs[iSel].iDir); | 557 | cCur.iWalls |= (1<<pDirs[iSel].iDir); |
| 542 | let cNext = this.rMap.get( pDirs[iSel].pPos ); | 558 | let cNext = this.rMap.get( pDirs[iSel].pPos ); |
| 543 | cNext.iWalls |= (1<<oppositeDir( pDirs[iSel].iDir )); | 559 | cNext.iWalls |= (1<<oppositeDir( pDirs[iSel].iDir )); |
| 544 | cNext.iDist = ++this.iDist; | 560 | cNext.iDist = ++this.iDist; |
| 545 | cNext.iPath = this.iId; | 561 | cNext.iPath = this.iId; |
| 562 | let oldPosition = this.pPosition; | ||
| 546 | this.pPosition = pDirs[iSel].pPos; | 563 | this.pPosition = pDirs[iSel].pPos; |
| 547 | 564 | ||
| 565 | if( pLoopDirs.length > 0 && lRand.random() <= this.dLoopChance ) | ||
| 566 | { | ||
| 567 | iSel = pLoopDirs[randInt( pLoopDirs.length )]; | ||
| 568 | cCur.iWalls |= (1<<iSel.iDir); | ||
| 569 | cNext = this.rMap.get( iSel.pPos ); | ||
| 570 | cNext.iWalls |= (1<<oppositeDir( iSel.iDir )); | ||
| 571 | } | ||
| 572 | |||
| 548 | return true; | 573 | return true; |
| 549 | } | 574 | } |
| 550 | 575 | ||
| 551 | // | 576 | // |
| 552 | // Class: Render | 577 | // Class: Render |
| 553 | // | 578 | // |
| 554 | function Render( rMap, eParent ) | 579 | function Render( rMap, eMazeContainer ) |
| 555 | { | 580 | { |
| 556 | this.rMap = rMap; | 581 | this.rMap = rMap; |
| 557 | this.eParent = eParent; | 582 | this.eMazeContainer = eMazeContainer; |
| 558 | } | 583 | } |
| 559 | 584 | ||
| 560 | Render.prototype.render = function render() | 585 | Render.prototype.render = function render() |
| @@ -590,15 +615,22 @@ function createMoveButton( rMap, iDim, iDir, sLabel ) | |||
| 590 | // | 615 | // |
| 591 | // Class: RenderCanvas2D | 616 | // Class: RenderCanvas2D |
| 592 | // | 617 | // |
| 593 | function RenderCanvas2D( rMap, eParent ) | 618 | function RenderCanvas2D( rMap, params ) // eMazeContainer, eUIContainer ) |
| 594 | { | 619 | { |
| 595 | Render.call( this, rMap, eParent ); | 620 | let eMazeContainer = document.getElementById(params['maze']); |
| 621 | let eUIContainer = document.getElementById(params['buttons']); | ||
| 622 | let eReadoutBox = document.getElementById(params['readout']); | ||
| 623 | |||
| 624 | Render.call( this, rMap, eMazeContainer ); | ||
| 596 | this.rMap.ePlayerMoved.connect( | 625 | this.rMap.ePlayerMoved.connect( |
| 597 | RenderCanvas2D.prototype.render.bind( this ) | 626 | RenderCanvas2D.prototype.render.bind( this ) |
| 598 | ); | 627 | ); |
| 599 | this.rMap.ePlayerMoved.connect( | 628 | this.rMap.ePlayerMoved.connect( |
| 600 | RenderCanvas2D.prototype.updateButtons.bind( this ) | 629 | RenderCanvas2D.prototype.updateButtons.bind( this ) |
| 601 | ); | 630 | ); |
| 631 | this.rMap.ePlayerMoved.connect( | ||
| 632 | RenderCanvas2D.prototype.updateReadout.bind( this ) | ||
| 633 | ); | ||
| 602 | this.rMap.eVictory.connect( | 634 | this.rMap.eVictory.connect( |
| 603 | RenderCanvas2D.prototype.setVictory.bind( this ) | 635 | RenderCanvas2D.prototype.setVictory.bind( this ) |
| 604 | ); | 636 | ); |
| @@ -609,12 +641,34 @@ function RenderCanvas2D( rMap, eParent ) | |||
| 609 | 641 | ||
| 610 | this.pExtPosition = new Position( rMap.getDims() ); | 642 | this.pExtPosition = new Position( rMap.getDims() ); |
| 611 | 643 | ||
| 612 | this.iIconSize = 11; | ||
| 613 | this.iBorder = 3; | ||
| 614 | this.iIconSquare = Math.ceil( | 644 | this.iIconSquare = Math.ceil( |
| 615 | Math.sqrt((this.rMap.getDims()-2)*2 + 1) | 645 | Math.sqrt((this.rMap.getDims()-2)*2 + 1) |
| 616 | ); | 646 | ); |
| 617 | 647 | ||
| 648 | let iTargetSize = eMazeContainer.clientWidth; | ||
| 649 | if( eMazeContainer.clientHeight !== 0 && | ||
| 650 | eMazeContainer.clientHeight < iTargetSize ) | ||
| 651 | iTargetSize = eMazeContainer.clientHeight; | ||
| 652 | |||
| 653 | if( window.innerHeight < window.innerWidth ) | ||
| 654 | { | ||
| 655 | // Portrait view | ||
| 656 | if( iTargetSize === 0 ) | ||
| 657 | iTargetSize = window.innerHeight*0.9; | ||
| 658 | } | ||
| 659 | else | ||
| 660 | { | ||
| 661 | if( iTargetSize > window.innerHeight/2 ) | ||
| 662 | iTargetSize = window.innerHeight/2; | ||
| 663 | } | ||
| 664 | |||
| 665 | this.iBorder = 3; | ||
| 666 | this.iIconSize = Math.floor( | ||
| 667 | ((iTargetSize/this.rMap.getSize( 0 ))-3-(this.iIconSquare*3))/this.iIconSquare | ||
| 668 | ); | ||
| 669 | if( this.iIconSize > 15 ) | ||
| 670 | this.iIconSize = 15; | ||
| 671 | |||
| 618 | this.iCellSize = | 672 | this.iCellSize = |
| 619 | this.iBorder + | 673 | this.iBorder + |
| 620 | this.iIconSquare*(this.iIconSize+this.iBorder); | 674 | this.iIconSquare*(this.iIconSize+this.iBorder); |
| @@ -622,7 +676,7 @@ function RenderCanvas2D( rMap, eParent ) | |||
| 622 | this.eCanvas = document.createElement('canvas'); | 676 | this.eCanvas = document.createElement('canvas'); |
| 623 | this.eCanvas.width = this.iCellSize*this.rMap.getSize( 0 ); | 677 | this.eCanvas.width = this.iCellSize*this.rMap.getSize( 0 ); |
| 624 | this.eCanvas.height = this.iCellSize*this.rMap.getSize( 1 ); | 678 | this.eCanvas.height = this.iCellSize*this.rMap.getSize( 1 ); |
| 625 | eParent.appendChild( this.eCanvas ); | 679 | eMazeContainer.appendChild( this.eCanvas ); |
| 626 | this.ctx = this.eCanvas.getContext("2d"); | 680 | this.ctx = this.eCanvas.getContext("2d"); |
| 627 | this.ctx.lineWidth = 1.0; | 681 | this.ctx.lineWidth = 1.0; |
| 628 | this.ctx.font = Math.ceil(this.iIconSize) + 'px sans serif'; | 682 | this.ctx.font = Math.ceil(this.iIconSize) + 'px sans serif'; |
| @@ -632,10 +686,11 @@ function RenderCanvas2D( rMap, eParent ) | |||
| 632 | 686 | ||
| 633 | this.render(); | 687 | this.render(); |
| 634 | 688 | ||
| 635 | this.btnBox = document.createElement('div'); | 689 | this.btnBox = eUIContainer; |
| 636 | eParent.appendChild( document.createElement('br') ); | 690 | this.readoutBox = eReadoutBox; |
| 637 | eParent.appendChild( document.createElement('br') ); | 691 | this.readoutNode = document.createTextNode(''); |
| 638 | eParent.appendChild( this.btnBox ); | 692 | this.readoutBox.appendChild( this.readoutNode ); |
| 693 | this.updateReadout(); | ||
| 639 | 694 | ||
| 640 | let cardTbl; | 695 | let cardTbl; |
| 641 | let cardRow; | 696 | let cardRow; |
| @@ -698,25 +753,28 @@ function RenderCanvas2D( rMap, eParent ) | |||
| 698 | 753 | ||
| 699 | this.btnBox.appendChild( cardTbl ); | 754 | this.btnBox.appendChild( cardTbl ); |
| 700 | 755 | ||
| 701 | cardTbl = document.createElement('table'); | 756 | if( this.rMap.getDims() >= 3 ) |
| 702 | for( let j = 3; j < this.rMap.getDims(); j++ ) | ||
| 703 | { | 757 | { |
| 704 | cardRow = document.createElement('tr'); | 758 | cardTbl = document.createElement('table'); |
| 705 | cardTbl.appendChild( cardRow ); | 759 | for( let j = 3; j < this.rMap.getDims(); j++ ) |
| 760 | { | ||
| 761 | cardRow = document.createElement('tr'); | ||
| 762 | cardTbl.appendChild( cardRow ); | ||
| 706 | 763 | ||
| 707 | cardTd = document.createElement('td'); | 764 | cardTd = document.createElement('td'); |
| 708 | this.aMoveButtons[j*2] = cardTd.appendChild( | 765 | this.aMoveButtons[j*2] = cardTd.appendChild( |
| 709 | createMoveButton( this.rMap, j, -1, (j+1) + '-' ) | 766 | createMoveButton( this.rMap, j, -1, (j+1) + '-' ) |
| 710 | ); | 767 | ); |
| 711 | cardRow.appendChild( cardTd ); | 768 | cardRow.appendChild( cardTd ); |
| 712 | 769 | ||
| 713 | cardTd = document.createElement('td'); | 770 | cardTd = document.createElement('td'); |
| 714 | this.aMoveButtons[j*2+1] = cardTd.appendChild( | 771 | this.aMoveButtons[j*2+1] = cardTd.appendChild( |
| 715 | createMoveButton( this.rMap, j, 1, (j+1) + '+' ) | 772 | createMoveButton( this.rMap, j, 1, (j+1) + '+' ) |
| 716 | ); | 773 | ); |
| 717 | cardRow.appendChild( cardTd ); | 774 | cardRow.appendChild( cardTd ); |
| 775 | } | ||
| 776 | this.btnBox.appendChild( cardTbl ); | ||
| 718 | } | 777 | } |
| 719 | this.btnBox.appendChild( cardTbl ); | ||
| 720 | 778 | ||
| 721 | this.updateButtons(); | 779 | this.updateButtons(); |
| 722 | } | 780 | } |
| @@ -739,7 +797,23 @@ RenderCanvas2D.prototype.render = function render() | |||
| 739 | let iPlayerIcon = | 797 | let iPlayerIcon = |
| 740 | Math.floor(this.iIconSquare*0.5) + | 798 | Math.floor(this.iIconSquare*0.5) + |
| 741 | Math.floor(this.iIconSquare*0.5) * this.iIconSquare; | 799 | Math.floor(this.iIconSquare*0.5) * this.iIconSquare; |
| 800 | |||
| 801 | this.ctx.beginPath(); | ||
| 802 | this.ctx.strokeStyle = 'whitesmoke'; | ||
| 803 | for( let x = 0; x < this.rMap.getSize( 0 ); x++ ) | ||
| 804 | { | ||
| 805 | this.ctx.moveTo( x*iSize, 0 ); | ||
| 806 | this.ctx.lineTo( x*iSize, this.rMap.getSize( 1 )*iSize ); | ||
| 807 | } | ||
| 808 | for( let y = 0; y < this.rMap.getSize( 1 ); y++ ) | ||
| 809 | { | ||
| 810 | this.ctx.moveTo( 0, y*iSize ); | ||
| 811 | this.ctx.lineTo( this.rMap.getSize( 0 )*iSize, y*iSize ); | ||
| 812 | } | ||
| 813 | this.ctx.stroke(); | ||
| 742 | 814 | ||
| 815 | this.ctx.beginPath(); | ||
| 816 | this.ctx.strokeStyle = 'black'; | ||
| 743 | for( let x = 0; x < this.rMap.getSize( 0 ); x++ ) | 817 | for( let x = 0; x < this.rMap.getSize( 0 ); x++ ) |
| 744 | { | 818 | { |
| 745 | for( let y = 0; y < this.rMap.getSize( 1 ); y++ ) | 819 | for( let y = 0; y < this.rMap.getSize( 1 ); y++ ) |
| @@ -887,6 +961,20 @@ RenderCanvas2D.prototype.updateButtons = function updateButtons() | |||
| 887 | } | 961 | } |
| 888 | } | 962 | } |
| 889 | 963 | ||
| 964 | RenderCanvas2D.prototype.updateReadout = function updateReadout() | ||
| 965 | { | ||
| 966 | if( this.rMap.getDims() <= 2 ) | ||
| 967 | return; | ||
| 968 | |||
| 969 | let text = 'Floor: ' + this.rMap.pPlayer.get( 2 ); | ||
| 970 | for( let j = 3; j < this.rMap.getDims(); j++ ) | ||
| 971 | { | ||
| 972 | text += ', ' + this.rMap.pPlayer.get( j ) | ||
| 973 | } | ||
| 974 | |||
| 975 | this.readoutNode.textContent = text; | ||
| 976 | } | ||
| 977 | |||
| 890 | RenderCanvas2D.prototype.setVictory = function setVictory() | 978 | RenderCanvas2D.prototype.setVictory = function setVictory() |
| 891 | { | 979 | { |
| 892 | while( this.btnBox.hasChildNodes() ) | 980 | while( this.btnBox.hasChildNodes() ) |
| @@ -914,72 +1002,68 @@ RenderCanvas2D.prototype.setFloor = function setFloor( aFloor ) | |||
| 914 | // Initialize | 1002 | // Initialize |
| 915 | // | 1003 | // |
| 916 | 1004 | ||
| 917 | let p = new Position( 4, 3, 3, 3, 3 ); | 1005 | function lostInit( properties ) |
| 918 | |||
| 919 | if( document.location.search !== '' ) | ||
| 920 | { | 1006 | { |
| 921 | let dat = document.location.search.slice(1); | 1007 | let p = new Position( 4, 3, 3, 3, 3 ); |
| 922 | let datChunks = dat.split('&'); | 1008 | |
| 923 | for( let j = 0; j < datChunks.length; j++ ) | 1009 | if( document.location.search !== '' ) |
| 924 | { | 1010 | { |
| 925 | let pair = datChunks[j].split('='); | 1011 | let dat = document.location.search.slice(1); |
| 926 | if( pair.length == 2 ) | 1012 | let datChunks = dat.split('&'); |
| 1013 | for( let j = 0; j < datChunks.length; j++ ) | ||
| 927 | { | 1014 | { |
| 928 | if( pair[0] == 'seed' ) | 1015 | let pair = datChunks[j].split('='); |
| 929 | { | 1016 | if( pair.length == 2 ) |
| 930 | lRand.setSeed( parseInt( decodeURIComponent( pair[1] ), 10 ) ); | ||
| 931 | } | ||
| 932 | else if( pair[0] == 'dims' ) | ||
| 933 | { | 1017 | { |
| 934 | p = new Position( decodeURIComponent( pair[1] ) ); | 1018 | if( pair[0] == 'seed' ) |
| 1019 | { | ||
| 1020 | lRand.setSeed( parseInt( decodeURIComponent( pair[1] ), 10 ) ); | ||
| 1021 | } | ||
| 1022 | else if( pair[0] == 'dims' ) | ||
| 1023 | { | ||
| 1024 | p = new Position( decodeURIComponent( pair[1] ) ); | ||
| 1025 | } | ||
| 935 | } | 1026 | } |
| 936 | } | 1027 | } |
| 937 | } | 1028 | } |
| 1029 | |||
| 1030 | let m = new Map( p ); | ||
| 1031 | let exit1 = new Position( p.getDims() ); | ||
| 1032 | let exit2 = new Position( p.getDims() ); | ||
| 1033 | exit2.set( 1, p.get( 1 )-1 ); | ||
| 1034 | m.addWorm( exit1, 0.05 ); | ||
| 1035 | m.addWorm( exit2, 0.05 ); | ||
| 1036 | m.buildMaze(); | ||
| 1037 | |||
| 1038 | let eEditorBox = document.getElementById(properties['editor']); | ||
| 1039 | let eShareBox = document.getElementById(properties['share']); | ||
| 1040 | |||
| 1041 | let rend = new RenderCanvas2D( m, properties['render']['params'] ); | ||
| 1042 | |||
| 1043 | let formDiv = eEditorBox; | ||
| 1044 | let form = document.createElement('form'); | ||
| 1045 | let dims = document.createElement('input'); | ||
| 1046 | dims.name = 'dims'; | ||
| 1047 | dims.value = p.toString(); | ||
| 1048 | let sub = document.createElement('input'); | ||
| 1049 | sub.type = 'submit'; | ||
| 1050 | sub.value = 'New maze!'; | ||
| 1051 | form.appendChild( dims ); | ||
| 1052 | form.appendChild( document.createTextNode(' ') ); | ||
| 1053 | form.appendChild( sub ); | ||
| 1054 | formDiv.appendChild( form ); | ||
| 1055 | |||
| 1056 | let d = eShareBox; | ||
| 1057 | let dLink = document.createElement('a'); | ||
| 1058 | let trgUrl = document.location.toString(); | ||
| 1059 | let query = trgUrl.indexOf('?'); | ||
| 1060 | if( query >= 0 ) | ||
| 1061 | { | ||
| 1062 | trgUrl = trgUrl.substring(0, query); | ||
| 1063 | } | ||
| 1064 | trgUrl += '?seed=' + lRand.getSeed() + '&dims=' + p.toString(); | ||
| 1065 | dLink.href = trgUrl; | ||
| 1066 | dLink.appendChild( document.createTextNode('Share this maze!') ); | ||
| 1067 | d.appendChild(dLink); | ||
| 938 | } | 1068 | } |
| 939 | 1069 | ||
| 940 | let m = new Map( p ); | ||
| 941 | let exit1 = new Position( p.getDims() ); | ||
| 942 | let exit2 = new Position( p.getDims() ); | ||
| 943 | exit2.set( 1, p.get( 1 )-1 ); | ||
| 944 | m.addWorm( exit1 ); | ||
| 945 | m.addWorm( exit2 ); | ||
| 946 | m.buildMaze(); | ||
| 947 | |||
| 948 | let rend = new RenderCanvas2D( m, document.body ); | ||
| 949 | |||
| 950 | let formDiv = document.createElement('div'); | ||
| 951 | let form = document.createElement('form'); | ||
| 952 | let dims = document.createElement('input'); | ||
| 953 | dims.name = 'dims'; | ||
| 954 | dims.value = p.toString(); | ||
| 955 | let sub = document.createElement('input'); | ||
| 956 | sub.type = 'submit'; | ||
| 957 | sub.value = 'New maze!'; | ||
| 958 | form.appendChild( dims ); | ||
| 959 | form.appendChild( document.createTextNode(' ') ); | ||
| 960 | form.appendChild( sub ); | ||
| 961 | let pExp = document.createElement('p'); | ||
| 962 | pExp.appendChild( | ||
| 963 | document.createTextNode( | ||
| 964 | 'Provide a number below for each dimension in the new maze. The numbers are the size of each dimension. Entering "10, 3" will create a maze that is 10 wide and 3 tall. Entering "5, 5, 5, 5, 5" will create a 5 dimensional maze, every dimension will be 5 wide.' | ||
| 965 | ) | ||
| 966 | ); | ||
| 967 | formDiv.appendChild( pExp ); | ||
| 968 | formDiv.appendChild( form ); | ||
| 969 | document.body.appendChild( document.createElement('br') ); | ||
| 970 | document.body.appendChild( formDiv ); | ||
| 971 | |||
| 972 | let d = document.createElement('div'); | ||
| 973 | let dLink = document.createElement('a'); | ||
| 974 | let trgUrl = document.location.toString(); | ||
| 975 | let query = trgUrl.indexOf('?'); | ||
| 976 | if( query >= 0 ) | ||
| 977 | { | ||
| 978 | trgUrl = trgUrl.substring(0, query); | ||
| 979 | } | ||
| 980 | trgUrl += '?seed=' + lRand.getSeed() + '&dims=' + p.toString(); | ||
| 981 | dLink.href = trgUrl; | ||
| 982 | dLink.appendChild( document.createTextNode('Share this maze!') ); | ||
| 983 | d.appendChild(dLink); | ||
| 984 | document.body.appendChild( document.createElement('br') ); | ||
| 985 | document.body.appendChild( d ); | ||
