/**
* Copyright Nowloading_ ( http://wonderfl.net/user/Nowloading_ )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/6Iro
*/
package {
import flash.display.DisplayObject;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.objects.*;
import org.papervision3d.view.*;
import flash.events.*;
import flash.ui.Keyboard;
import org.papervision3d.events.*;
[SWF(backgroundColor = 0x000000)]
public class mf extends BasicView {
//Field格納用オブジェクト
private var field:DisplayObject3D;
//地形参照用配列
//0=green,1=brown, 2=blue
private var uField:Array = [[0,0,0,1,1],
[0,0,1,2,2],
[0,1,2,2,2],
];
private var dField:Array = [[1,1,1,1,1],
[1,1,1,1,2],
[1,1,1,2,2],
];
//Cube用material,primitive
private var gr:ColorMaterial = new ColorMaterial(0x60ff60);
private var br:ColorMaterial = new ColorMaterial(0xd0a080);
private var bl:ColorMaterial = new ColorMaterial(0xd0ddff);
private var g:MaterialsList = new MaterialsList( { all:gr } );
private var l:MaterialsList = new MaterialsList( { all:br } );
private var b:MaterialsList = new MaterialsList( { all:bl } );
private var materials:Array = [g,l,b];
private var ucube:Cube;
private var dcube:Cube;
//spher
private var material:WireframeMaterial= new WireframeMaterial(0xff0000,1);
//primitives(for Sphere)
private var sphere:Sphere = new Sphere(material,50);
//radiun
private var rad:int = 0;
//idou用
private var mato:idou = new idou();
private var idou:Array = new Array();
private var move:int = 2;
private var zahyou:Array = [1,2];
private var idoumat:ColorMaterial = new ColorMaterial(0x0000ff,0.3);
private var idoupl:Plane;
private var idoumasu:Array = new Array();
private var masuNo:int = 0;
private var masu:DisplayObject3D = new DisplayObject3D();
public function mf() {
stage.addChild(mato);
mato.x = 10;
mato.y = 10;
super(465,465,true,true);
idoumat.interactive = true;
init();
}
private function init():void{
field = new DisplayObject3D;
scene.addChild(field);
//materialslistの作成
for(var i:int = 0; i<3; i++){
for(var j:int = 0; j<5; j++){
ucube = new Cube(materials[uField[i][j]],100,100,30);
dcube = new Cube(materials[dField[i][j]],100,100,70);
ucube.x = dcube.x = -120 + (120*i);
ucube.z = dcube.z = -240 + (120*j);
ucube.y = 50;
field.addChild(ucube,"UCx_"+i+"z_"+j);
field.addChild(dcube,"DCx_"+i+"z_"+j);
}
}
//Sphereの作成
scene.addChild(sphere);
sphere.y = 130;
material.doubleSided = true;
sphere.useOwnContainer = true;
camera.y = 700;
camera.z = -600;
startRendering();
//addEventListener(Event.ENTER_FRAME,oEF);
mato.addEventListener(MouseEvent.CLICK,oMC);
}
private function oMC(e:MouseEvent):void{
for(var mm:int = 0;mm<masuNo; mm++){
masu.removeChild(idoumasu[mm]);
}
zahyou[0] = Math.floor(sphere.x/120)+1;
zahyou[1] = Math.floor(sphere.z/120)+2;
idou = [];
masuNo = 0;
idoumasu = [];
for(var i:int = move; i>0; i--){
//cubes[x±α,z]と[x,z±βの4つ
idou.push([zahyou[0]-i,zahyou[1]]);
idou.push([zahyou[0]+i,zahyou[1]]);
idou.push([zahyou[0],zahyou[1]-i]);
idou.push([zahyou[0],zahyou[1]+i]);
if(i>1){
for(var j:int = i-1; j>0; j--){
//cubes[x±(α-m),z±α]とcubes[x±α,z±(α-m)]の4α個
idou.push([zahyou[0]-(i-j),zahyou[1]+j]);
idou.push([zahyou[0]-(i-j),zahyou[1]-j]);
idou.push([zahyou[0]+(i-j),zahyou[1]+j]);
idou.push([zahyou[0]+(i-j),zahyou[1]-j]);
}
}
}
masu = new DisplayObject3D();
for(var k:int = 0; k<idou.length; k++){
idoupl = new Plane(idoumat,100,100);
idoupl.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,oOC);
idoupl.x = dcube.x = -120 + (120*idou[k][0]);
idoupl.z = dcube.z = -240 + (120*idou[k][1]);
idoupl.y = 70;
idoupl.rotationX = 90;
idoumasu[masuNo] = idoupl;
masu.addChild(idoumasu[masuNo]);
masuNo += 1;
}
sphere.alpha = 0.3;
scene.addChild(masu);
}
private function oOC(e:InteractiveScene3DEvent):void{
sphere.x = e.target.x;
sphere.z = e.target.z;
for(var mm:int = 0;mm<masuNo; mm++){
masu.removeChild(idoumasu[mm]);
}
masuNo = 0;
//scene.removeChild(masu);
sphere.alpha = 1;
}
}
}
import flash.display.Sprite;
class idou extends Sprite{
public function idou(){
graphics.lineStyle();
graphics.beginFill(0xff9999);
graphics.drawRoundRect(0,0,50,30,10,10);
graphics.endFill();
}
}