IceDragon200

PS_Spritesheeter

Apr 20th, 2011
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ICY_Spritesheeter
  2. // Arranged by IceDragon
  3. // Code from various locations
  4. // Last Modified : 04/20/2011
  5.  
  6. var title = "Spritesheeter";
  7. var modetitle = "SpriteMode";
  8. // Set up UI.
  9. var dlg = new Window('dialog', title, [100,100,380,240]);
  10. dlg.scTxt = dlg.add('statictext',[10,17,60,35],"Cells X >");
  11. dlg.CellX = dlg.add('edittext',[65,15,95,35],'4');
  12.  
  13. dlg.scTxt = dlg.add('statictext',[100,17,150,35],"Cells Y ^");
  14. dlg.CellY = dlg.add('edittext',[155,15,185,35],'2');
  15.  
  16. dlg.okayBtn = dlg.add('button', [200,14,260,38],'Start!', {name:'ok'});
  17. var okayset = false
  18. dlg.okayBtn.onClick = function() { okayset = true ; dlg.close() ; }
  19.  
  20. dlg.CellAssem = dlg.add('checkbox', [10,60,176,80],"Assemble Spritesheet");
  21. dlg.CellBreak = dlg.add('checkbox',[10,80,176,100],"Disasemble Spritesheet");
  22.  
  23. dlg.show();
  24. var assemble  =  dlg.CellAssem.value;
  25. var breakdown = dlg.CellBreak.value;
  26. var workDoc   = activeDocument ;
  27.  
  28. if (okayset == true) {
  29.  
  30. //Spritesheet to layers
  31. if (breakdown == 1) {
  32.  
  33. var cellintx = parseInt(dlg.CellX.text);
  34. var cellinty = parseInt(dlg.CellY.text);
  35. var nextrow = parseInt(dlg.CellX.text);
  36. var cellsizew = workDoc.width/cellintx;
  37. var cellsizeh =workDoc.height/cellinty;
  38.  
  39.  
  40. // Make Duplicate layers because Photoshop doesn't have paste over function.LOL
  41. var dups = cellintx * cellinty;
  42. for(var i = 1; i < dups; i++)
  43. {
  44. workDoc.artLayers[0].duplicate();
  45. };
  46.  
  47. // Rename layers
  48. var lyrCount = workDoc.layers.length
  49. for(var i = lyrCount-1; i>=0;i--)
  50. {
  51. workDoc.artLayers[i].name = 'Frame '+(lyrCount-i-1);
  52. };
  53.  
  54. // Begin shifting the layers working from the top layer down. It moves the images so that the lower left cell becomes the top layer
  55. // and the upper left cell becomes the bottom layer (frame 0). The outer loop determins the row and the inner loop determins the column
  56. var cellmovex = cellintx -1;
  57. var cellmovey = cellinty -1;
  58. var columncount =0;
  59. var columnshift = -cellsizew*cellmovex;
  60. var rowshift = -cellsizeh*cellmovey;
  61. for(var i=0; i<=cellinty-1; i++)
  62. {
  63. for(var subi =columncount ; subi <=nextrow-1; subi++)
  64. {
  65. workDoc.artLayers[subi].translate(columnshift, rowshift);
  66. columnshift = columnshift + cellsizew;
  67. };
  68.  
  69. columncount += cellintx;
  70. nextrow += cellintx;
  71. columnshift = -cellsizew*cellmovex;
  72. rowshift = rowshift +cellsizeh;
  73. };
  74.  
  75. // Crop final image once all the layers are in place.
  76. workDoc.crop (new Array(0,0,cellsizew,cellsizeh));
  77.  
  78. }
  79.  
  80. if (assemble == 1) {
  81.  
  82. //Layers to SpriteSheet
  83. var cellintx = parseInt(dlg.CellX.text);
  84. var nextrow = parseInt(dlg.CellX.text);
  85. var cellsizew = workDoc.width/cellintx;
  86.     // Arrange layers into a sprite sheet.
  87.  
  88.     if (documents.length > 0)
  89.     {
  90.         var cols = cellintx;
  91.        
  92.         // --------------------------
  93.         docRef = workDoc;  
  94.         var activeLayer = docRef.activeLayer;
  95.  
  96.         numLayers = docRef.artLayers.length;    
  97.        
  98.         var rows = Math.ceil(numLayers/cols);
  99.        
  100.          var spriteX = docRef.width;
  101.          var spriteY = docRef.height;  
  102.        
  103.         // put things in order
  104.         app.preferences.rulerUnits = Units.PIXELS;
  105.        
  106.         // resize the canvas
  107.          newX = spriteX * cols;
  108.          newY = spriteY * rows;
  109.        
  110.          docRef.resizeCanvas( newX, newY, AnchorPosition.TOPLEFT );
  111.              
  112.         // move the layers around
  113.          var rowi = 0;
  114.          var coli = 0;
  115.        
  116.          for (i=(numLayers - 1); i >= 0; i--)
  117.          {    
  118.              docRef.artLayers[i].visible = 1;
  119.            
  120.               var movX = spriteX*coli;
  121.               var movY = spriteY*rowi;
  122.              
  123.              docRef.artLayers[i].translate(movX, movY);
  124.            
  125.              coli++;
  126.              if (coli > (cols - 1))
  127.              {
  128.                  rowi++;
  129.                  coli = 0;
  130.              }
  131.          }
  132.     }
  133.   }
  134.  
  135.   } // If Okay was pressed
Advertisement
Add Comment
Please, Sign In to add comment