document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. (function r(f){/in/(document.readyState)?setTimeout(r,9,f):f()})(function(){
  2.     var i, imax, j, jmax;
  3.     var stage, stats, timer, sprite, light;
  4.     var frameRate = 60;
  5.     var m,t,s,cubeMaterial,cubeMaterials = [];
  6.     var el = document.getElementById("three-stage");
  7.     var isDown, isDrag, dragPoint, startAngle, tween;
  8.     var sizeW = 21, sizeH = 7, rows = 11, cols = 11;
  9.     var panels = [];
  10.     var panelMatNormal = new THREE.MeshBasicMaterial({color: 0x5555FF, opacity: 0.6});
  11.     var panelMatActive = new THREE.MeshBasicMaterial({color: 0x5555FF, opacity: 0.9});
  12.     var cube, angle = 0;
  13.  
  14.     //ステージ
  15.     var stage = new FieldStage(el, 520, 390, {x:sizeW, y:sizeH, z:sizeW}, false);
  16.     stage.distance = 1000;
  17.  
  18.     //get material
  19.     function getMaterial(texture, texture2, isBasic){
  20.         if(stage.useWebgl() && !isBasic){
  21.             return new THREE.MeshLambertMaterial({map: texture});
  22.         }
  23.         return new THREE.MeshBasicMaterial({map: (stage.useWebgl() ? texture : texture2 || texture)});
  24.     };
  25.  
  26.     // reset all panels
  27.     function clearSelectPanel(){
  28.         var i;
  29.         for(i in panels){
  30.             panels[i].visible = false;
  31.         }
  32.     };
  33.  
  34.     //cycle engine
  35.     function update(){
  36.         TWEEN.update();
  37.         light.position.x = cube.getMesh().position.x;
  38.         light.position.y = cube.getMesh().position.y + sizeW;
  39.         light.position.z = cube.getMesh().position.z;
  40.         stage.update(cube.getMesh().position);
  41.         stats.update();
  42.         stage.getRenderer().render(stage.getScene(), stage.getCamera());
  43.     };
  44.  
  45.  
  46.     //Cubeの各面のマテリアル
  47.     //No.1
  48.     m = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture001.png\'));
  49.     t = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture001_top.png\'));
  50.     cubeMaterials.push([
  51.         m, // right
  52.         m, // left
  53.         t, // top
  54.         m, // bottom
  55.         m, // back
  56.         m  // front
  57.     ]);
  58.  
  59.     //No.2
  60.     t = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture002_top.png\'));
  61.     cubeMaterials.push([
  62.         m, // right
  63.         m, // left
  64.         t, // top
  65.         m, // bottom
  66.         m, // back
  67.         m  // front
  68.     ]);
  69.  
  70.     //No.3
  71.     t = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture003_top.png\'));
  72.     cubeMaterials.push([
  73.         m, // right
  74.         m, // left
  75.         t, // top
  76.         m, // bottom
  77.         m, // back
  78.         m  // front
  79.     ]);
  80.  
  81.     //Cube
  82.     m = getMaterial(
  83.         THREE.ImageUtils.loadTexture(\'images/cube001.png\'),
  84.         THREE.ImageUtils.loadTexture(\'images/cube002.png\'),
  85.         true
  86.     );
  87.     cubeMaterial = [
  88.         m, // right
  89.         m, // left
  90.         m, // top
  91.         m, // bottom
  92.         m, // back
  93.         m // front
  94.     ];
  95.  
  96.  
  97.     //フィールドデータ生成
  98.     var mtx = new FieldGenerator(cols, rows)
  99.                 .add("h", [0.5, 0.4, 0.1])
  100.                 .add("t", [0.3, 0.5, 0.2])
  101.                 .get();
  102.     var r2 = Math.floor(rows/2);
  103.     var c2 = Math.floor(cols/2);
  104.     mtx[r2][c2].h = 1;
  105.     stage.makeWalls(mtx, cubeMaterials);
  106.  
  107.     //mr.cube
  108.     cube = new MrCube(sizeW, cubeMaterial, mtx);
  109.     cube.cellY = sizeH;
  110.     cube.setTo(c2, r2);
  111.     stage.getScene().addObject(cube.getMesh());
  112.  
  113.     //ライティング (webgl only)
  114.     var defLight = new THREE.AmbientLight(0x333333);
  115.     stage.getScene().addLight(defLight);
  116.     light = new THREE.PointLight(0xFFFFFF, 3, 250);
  117.     light.position.set(0, 150, 0);
  118.     stage.getScene().addLight(light);
  119.  
  120.     //インターフェイスパネル
  121.     var pm;
  122.     var pl = - cols * sizeW / 2 + sizeW / 2;
  123.     var pt = - rows * sizeW / 2 + sizeW / 2;
  124.     for (i = 0; i < rows; i++) {
  125.         for (j = 0; j < cols; j++) {
  126.             pm = new THREE.Mesh(new THREE.Plane(sizeW, sizeW, 1, 1), panelMatNormal);
  127.             pm.rotation.x = -90 * Math.PI / 180;
  128.             pm.position.set(j * sizeW + pl, (mtx[i][j].h+1) * sizeH + 0.5, i * sizeW + pt);
  129.             pm.visible = false;
  130.             pm.isPanel = true;
  131.             panels.push(pm);
  132.             stage.getScene().addObject(pm);
  133.         }
  134.     }
  135.  
  136.     //mouse events
  137.     $(window).keydown(function(e){
  138.         e.preventDefault();
  139.         switch(e.keyCode){
  140.             case 37:
  141.                 cube.moveTo(angle);
  142.                 break;
  143.             case 38:
  144.                 cube.moveTo((angle+1)%4);
  145.                 break;
  146.             case 39:
  147.                 cube.moveTo((angle+2)%4);
  148.                 break;
  149.             case 40:
  150.                 cube.moveTo((angle+3)%4);
  151.                 break;
  152.             default:
  153.                 break;
  154.         }
  155.     });
  156.     $(el).mousedown(function(e){
  157.         e.preventDefault();
  158.         dragPoint = new THREE.Vector2(e.pageX, e.pageY);
  159.         startAngle = stage.cameraAngle3.clone();
  160.         if(tween) tween.stop();
  161.         isDown = true;
  162.     });
  163.     $(el).mousewheel(function(e, delta){
  164.         e.preventDefault();
  165.         stage.distance += delta * 100;
  166.         stage.distance = Math.max(Math.min(stage.distance, 1800), 400);
  167.     });
  168.     $(document).mouseup(function(e){
  169.         isDown = false;
  170.         isDrag = false;
  171.  
  172.         var xx = stage.cameraAngle3.x + 45;
  173.         xx = Math.round(xx/90) * 90 - 45;
  174.  
  175.         angle = ((360 - (xx - 45)) / 90) % 4;
  176.         if(angle < 0) angle += 4;
  177.  
  178.         var yy = Math.floor(stage.cameraAngle3.y/10) * 10;
  179.         yy = Math.min(Math.max(yy, 15), 50);
  180.  
  181.         tween = new TWEEN.Tween(stage.cameraAngle3)
  182.             .to({
  183.                 x: xx,
  184.                 y: yy,
  185.                 z: xx
  186.             }, 1000)
  187.             .easing(TWEEN.Easing.Elastic.EaseOut)
  188.             .start();
  189.     });
  190.     $(document).mousemove(function(e){
  191.         clearSelectPanel();
  192.         if(!isDrag){
  193.             var i, list, xx, yy, mouse3D;
  194.             xx = (e.offsetX || e.layerX) / stage.stageWidth;
  195.             yy = -(e.offsetY || e.layerY) / stage.stageHeight;
  196.             mouse3D = stage.getProjector().unprojectVector(
  197.                 new THREE.Vector3(
  198.                     xx * 2 - 1,
  199.                     yy * 2 + 1,
  200.                     0.5
  201.                 ),
  202.                 stage.getCamera()
  203.             );
  204.             stage.getRay().direction = mouse3D.subSelf(stage.getCamera().position).normalize();
  205.             list = stage.getRay().intersectScene(stage.getScene());
  206.             for(i in list){
  207.                 if(list[i].object.isPanel){
  208.                     list[i].object.visible = true;
  209.                     break;
  210.                 }
  211.             }
  212.         }
  213.         if(isDown){
  214.             stage.cameraAngle3.x = (dragPoint.x - e.pageX) / 5 + startAngle.x;
  215.             stage.cameraAngle3.y = (e.pageY - dragPoint.y) / 10 + startAngle.y;
  216.             stage.cameraAngle3.y = Math.min(Math.max(stage.cameraAngle3.y, 10), 55);
  217.             stage.cameraAngle3.z = (dragPoint.x - e.pageX) / 5 + startAngle.z;
  218.             if(!isDrag && Math.abs(dragPoint.x - e.pageX) + Math.abs(e.pageY - dragPoint.y) > 5){
  219.                 isDrag = true;
  220.             }
  221.         }
  222.     });
  223.  
  224.  
  225.     //Stats SetUp
  226.     stats = new Stats();
  227.     stats.domElement.style.position = \'absolute\';
  228.     stats.domElement.style.top = \'0px\';
  229.     stats.domElement.style.zIndex = 100;
  230.     el.appendChild(stats.domElement);
  231.     document.getElementById("renderer").innerHTML = stage.useWebgl() ? "WebGLRenderer" : "CanvasRenderer" ;
  232.  
  233.     //cycle engine start
  234.     timer = setInterval(update, 1000 / frameRate);
  235. });
');