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,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.  
  13.     //ステージ
  14.     var stage = new FieldStage(el, 520, 390, {x:sizeW, y:sizeH, z:sizeW}, false);
  15.     stage.distance = 1000;
  16.  
  17.     //get material
  18.     function getMaterial(texture){
  19.         if(stage.useWebgl()){
  20.             return new THREE.MeshLambertMaterial({map: texture});
  21.         }
  22.         return new THREE.MeshBasicMaterial({map: texture});
  23.     };
  24.  
  25.     // reset all panels
  26.     function clearSelectPanel(){
  27.         var i;
  28.         for(i in panels){
  29.             panels[i].visible = false;
  30.         }
  31.     };
  32.  
  33.     //cycle engine
  34.     function update(){
  35.         TWEEN.update();
  36.         stage.update();
  37.         stats.update();
  38.         stage.getRenderer().render(stage.getScene(), stage.getCamera());
  39.     };
  40.  
  41.  
  42.     //Cubeの各面のマテリアル
  43.     //No.1
  44.     m = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture001.png\'));
  45.     t = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture001_top.png\'));
  46.     cubeMaterials.push([
  47.         m, // right
  48.         m, // left
  49.         t, // top
  50.         m, // bottom
  51.         m, // back
  52.         m  // front
  53.     ]);
  54.  
  55.     //No.2
  56.     t = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture002_top.png\'));
  57.     cubeMaterials.push([
  58.         m, // right
  59.         m, // left
  60.         t, // top
  61.         m, // bottom
  62.         m, // back
  63.         m  // front
  64.     ]);
  65.  
  66.     //No.3
  67.     t = getMaterial(THREE.ImageUtils.loadTexture(\'images/texture003_top.png\'));
  68.     cubeMaterials.push([
  69.         m, // right
  70.         m, // left
  71.         t, // top
  72.         m, // bottom
  73.         m, // back
  74.         m  // front
  75.     ]);
  76.  
  77.  
  78.     //フィールドデータ生成
  79.     var mtx = new FieldGenerator(cols, rows)
  80.                 .add("h", [0.5, 0.4, 0.1])
  81.                 .add("t", [0.3, 0.5, 0.2])
  82.                 .get();
  83.     stage.makeWalls(mtx, cubeMaterials);
  84.  
  85.     //ライティング (webgl only)
  86.     var defLight = new THREE.AmbientLight(0x333333);
  87.     stage.getScene().addLight(defLight);
  88.     light = new THREE.PointLight(0xFFFFFF, 3, 250);
  89.     light.position.set(0, 150, 0);
  90.     stage.getScene().addLight(light);
  91.  
  92.     //インターフェイスパネル
  93.     var pm;
  94.     var pl = - cols * sizeW / 2 + sizeW / 2;
  95.     var pt = - rows * sizeW / 2 + sizeW / 2;
  96.     for (i = 0; i < rows; i++) {
  97.         for (j = 0; j < cols; j++) {
  98.             pm = new THREE.Mesh(new THREE.Plane(sizeW, sizeW, 1, 1), panelMatNormal);
  99.             pm.rotation.x = -90 * Math.PI / 180;
  100.             pm.position.set(j * sizeW + pl, (mtx[i][j].h+1) * sizeH + 0.5, i * sizeW + pt);
  101.             pm.visible = false;
  102.             pm.isPanel = true;
  103.             panels.push(pm);
  104.             stage.getScene().addObject(pm);
  105.         }
  106.     }
  107.  
  108.     //mouse events
  109.     $(el).mousedown(function(e){
  110.         e.preventDefault();
  111.         dragPoint = new THREE.Vector2(e.pageX, e.pageY);
  112.         startAngle = stage.cameraAngle3.clone();
  113.         if(tween) tween.stop();
  114.         isDown = true;
  115.     });
  116.     $(el).mousewheel(function(e, delta){
  117.         e.preventDefault();
  118.         stage.distance += delta * 100;
  119.         stage.distance = Math.max(Math.min(stage.distance, 1800), 400);
  120.     });
  121.     $(document).mouseup(function(e){
  122.         isDown = false;
  123.         isDrag = false;
  124.         var xx = stage.cameraAngle3.x + 45;
  125.         xx = Math.round(xx/90) * 90 - 45;
  126.         var yy = Math.floor(stage.cameraAngle3.y/10) * 10;
  127.         yy = Math.min(Math.max(yy, 15), 50);
  128.  
  129.         tween = new TWEEN.Tween(stage.cameraAngle3)
  130.             .to({
  131.                 x: xx,
  132.                 y: yy,
  133.                 z: xx
  134.             }, 1000)
  135.             .easing(TWEEN.Easing.Elastic.EaseOut)
  136.             .start();
  137.     });
  138.     $(document).mousemove(function(e){
  139.         clearSelectPanel();
  140.         if(!isDrag){
  141.             var i, list, xx, yy, mouse3D;
  142.             xx = (e.offsetX || e.layerX) / stage.stageWidth;
  143.             yy = -(e.offsetY || e.layerY) / stage.stageHeight;
  144.             mouse3D = stage.getProjector().unprojectVector(
  145.                 new THREE.Vector3(
  146.                     xx * 2 - 1,
  147.                     yy * 2 + 1,
  148.                     0.5
  149.                 ),
  150.                 stage.getCamera()
  151.             );
  152.             stage.getRay().direction = mouse3D.subSelf(stage.getCamera().position).normalize();
  153.             list = stage.getRay().intersectScene(stage.getScene());
  154.             for(i in list){
  155.                 if(list[i].object.isPanel){
  156.                     list[i].object.visible = true;
  157.                     break;
  158.                 }
  159.             }
  160.         }
  161.         if(isDown){
  162.             stage.cameraAngle3.x = (dragPoint.x - e.pageX) / 5 + startAngle.x;
  163.             stage.cameraAngle3.y = (e.pageY - dragPoint.y) / 10 + startAngle.y;
  164.             stage.cameraAngle3.y = Math.min(Math.max(stage.cameraAngle3.y, 10), 55);
  165.             stage.cameraAngle3.z = (dragPoint.x - e.pageX) / 5 + startAngle.z;
  166.             if(!isDrag && Math.abs(dragPoint.x - e.pageX) + Math.abs(e.pageY - dragPoint.y) > 5){
  167.                 isDrag = true;
  168.             }
  169.         }
  170.     });
  171.  
  172.  
  173.     //Stats SetUp
  174.     stats = new Stats();
  175.     stats.domElement.style.position = \'absolute\';
  176.     stats.domElement.style.top = \'0px\';
  177.     stats.domElement.style.zIndex = 100;
  178.     el.appendChild(stats.domElement);
  179.     document.getElementById("renderer").innerHTML = stage.useWebgl() ? "WebGLRenderer" : "CanvasRenderer" ;
  180.  
  181.     //cycle engine start
  182.     timer = setInterval(update, 1000 / frameRate);
  183. });
');