view resources/combat_plane.js @ 0:0b8d8ce99f46 default tip

commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 14 Feb 2011 17:06:56 +0900
parents
children
line wrap: on
line source

createPlane = function(sgroot, w, h){
		var combat_plane = new sgroot.createSceneGraph3();
		combat_plane.xyz[0] = -2;
		combat_plane.xyz[1] = -10;
		combat_plane.xyz[2] = 65;
		combat_plane.dy = 0;
		combat_plane.r = 4.0;
		position_xyz[0] = combat_plane.xyz[0];
		position_xyz[1] = combat_plane.xyz[1];
		position_xyz[2] = combat_plane.xyz[2] - 10;
		aim_xyz[0] = position_xyz[0];
		aim_xyz[1] = position_xyz[1];
		aim_xyz[2] = position_xyz[2] + 1;
		cameraAngle_xyz[0] = 0;
		cameraAngle_xyz[1] = 0;
		cameraAngle_xyz[2] = 0;
		combat_plane.scale = 0.2;
		combat_plane.set_move_collision(plane_move, no_collision_idle);
		var main = new sgroot.createSceneGraph1("Piyo");
		main.angle[0] = 180;
		main.angle[1] = 90;
		main.set_move_collision(main_move, no_collision_idle);
		combat_plane.addChild(main);
    
		combat_plane.map = new Array(180,120,180,-120,
						180,-120,-180,-120,
						-180,-120,-180,120,
						-180,120,180,120);
    
/*
    combat_plane.map = new Array(114,120,120,84,120,84,132,84,132,84,138,120,138,120,
				 180,66,126,66,126,66,126,54,126,54,114,54,114,54,120,12,120,12,144,12,144,12,126,42,126,42,180,42,180,42,180,66,
				 102,66,-24,66,-24,66,-24,108,-24,108,-42,108,-42,108,-42,66,-42,66,-72,66,-72,66,-66,42,-66,42,60,54,60,54,66,30,66,30,72,24,72,24,108,-12,108,-12,120,-6,120,-6,84,30,84,30,72,54,72,54,102,42,102,42,102,66,
				 -90,120,-114,120,-114,120,-114,96,-114,96,-108,96,-108,96,-126,72,-126,72,-120,72,-120,72,-144,78,-144,78,-180,72,-180,72,-180,60,-180,60,-144,60,-144,60,-120,60,-120,60,-120,66,-120,66,-102,66,-02,66,-90,78,-90,78,-90,96,-90,96,-90,120,
				 -144,48,-144,54,-144,54,-168,54,-168,54,-180,42,-180,42,-180,24,-180,24,-168,12,-168,12,-144,12,-144,12,-144,18,-144,18,-150,18,-150,18,-162,30,-162,30,-150,48,-150,48,-144,48,
				 132,-120,114,-54,114,-54,78,0,78,0,60,6,60,6,48,30,48,30,36,30,36,30,-42,-12,-42,-12,36,18,36,18,-24,12,-24,12,-54,0,-54,0,-60,-12,-60,-12,-72,-12,-72,-12,-78,6,-78,6,-90,6,-90,6,-90,-24,-90,-24,-102,-30,-102,-30,-102,0,-102,0,-180,6,-180,6,-180,-12,-180,-12,-120,-6,-120,-6,-120,-42,-120,-42,-132,-60,-132,-60,-144,-60,-144,-60,-144,-84,-144,-84,-150,-120,-150,-120,-126,-120,-126,-120,-120,-84,-120,-84,-114,-66,-114,-66,-108,-48,-108,-48,-96,-30,-96,-30,-78,-36,-78,-36,-60,-30,-60,-30,-60,-18,-60,-18,-48,-12,-48,-12,-24,0,-24,0,36,0,36,0,54,-12,54,-12,54,6,54,6,66,-18,66,-18,96,-60,96,-60,120,-120,120,-120,162,-120
				);
*/
    console.log(combat_plane.map);
		return combat_plane;
}

plane_move = function(node, sgroot, w ,h){
		var move_eye = 0.8;
		var move_walk = 0.5;
		var PI = 3.14;
		var pad = new sgroot.getController();
		var dx = position_xyz[0] - aim_xyz[0];
		var dy = position_xyz[1] - aim_xyz[1];
		var dz = position_xyz[2] - aim_xyz[2];
		var d = Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2) + Math.pow(dz,2));
		if(pad.left_move_isHold()){
				var radian = (((theta_xz+90)%360) / 360) * 2 * PI;
				var ddx = move_walk * Math.cos(radian);
				var ddz = move_walk * Math.sin(radian);
				var q0 = new Array(this.xyz[0]+ddx,this.xyz[2]+ddz);
				var delta = collision_b(this.map,q0,ddx,ddz,this.r,1);
				ddx = delta[0];
				ddz = delta[1];
				node.xyz[0] += ddx;
				node.xyz[2] += ddz;
				position_xyz[0] += ddx;
				position_xyz[2] += ddz;
				aim_xyz[0] += ddx;
				aim_xyz[2] += ddz;
		}
		if(pad.right_move_isHold()){
				var radian = (((theta_xz+90)%360) / 360) * 2 * PI;
				var ddx = move_walk * Math.cos(radian);
				var ddz = move_walk * Math.sin(radian);
				var q0 = new Array(this.xyz[0]+ddx,this.xyz[2]+ddz);
				var delta = collision_b(this.map,q0,ddx,ddz,this.r,-1);
				ddx = delta[0];
				ddz = delta[1];
				node.xyz[0] -= ddx;
				node.xyz[2] -= ddz;
				position_xyz[0] -= ddx;
				position_xyz[2] -= ddz;
				aim_xyz[0] -= ddx;
				aim_xyz[2] -= ddz;
		}
		if(pad.front_move_isHold()){
				var radian = ((theta_xz%360) / 360) * 2 * PI;
				var ddx = move_walk * Math.cos(radian);
				var ddz = move_walk * Math.sin(radian);
				var q0 = new Array(this.xyz[0]+ddx,this.xyz[2]+ddz);
				var delta = collision_b(this.map,q0,ddx,ddz,this.r,1);
				ddx = delta[0];
				ddz = delta[1];
				node.xyz[0] += ddx;
				node.xyz[2] += ddz;
				position_xyz[0] += ddx;
				position_xyz[2] += ddz;
				aim_xyz[0] += ddx;
				aim_xyz[2] += ddz;
		}
		if(pad.back_move_isHold()){
				var radian = ((theta_xz%360) / 360) * 2 * PI;
				var ddx = move_walk * Math.cos(radian);
				var ddz = move_walk * Math.sin(radian);
				var q0 = new Array(this.xyz[0]+ddx,this.xyz[2]+ddz);
				var delta = collision_b(this.map,q0,ddx,ddz,this.r,-1);
				ddx = delta[0];
				ddz = delta[1];
				node.xyz[0] -= ddx;
				node.xyz[2] -= ddz;
				position_xyz[0] -= ddx;
				position_xyz[2] -= ddz;
				aim_xyz[0] -= ddx;
				aim_xyz[2] -= ddz;
		}
		if(pad.space_isHold()){
				node.xyz[1] -= 1.5;
				position_xyz[1] -= 1.5;
				aim_xyz[1] -= 1.5;
		}
		if(node.xyz[1] < (-1*this.r)){
				if(this.dy < 3.5){
						this.dy += 0.1;
				}
				if(node.xyz[1]+this.dy>(-1*this.r)){
						node.xyz[1] = (-1*this.r);
						position_xyz[1] = (-1*this.r);
						aim_xyz[1] = (-1*this.r);
				}else{
						node.xyz[1] += this.dy;
						position_xyz[1] += this.dy;
						aim_xyz[1] += this.dy;
				}
		}else{
				this.dy = 0;
		}
}



main_move = function(node, sgroot, w, h){
		var move_eye = 1.0;
		var PI = 3.14;
		var pad = new sgroot.getController();
		var dx = node.parents.xyz[0] - position_xyz[0];
		var dy = node.parents.xyz[1] - position_xyz[1];
		var dz = node.parents.xyz[2] - position_xyz[2];
		var d = 7;
		var radian_xz = ((theta_xz%360) / 360) * 2 * PI;
		var radian_yz = ((theta_yz%360) / 360) * 2 * PI;
		var x_rate_xz = Math.sin(radian_xz);
		var z_rate_xz = Math.cos(radian_xz);
		var x_rate_yz = Math.cos(radian_yz);
		var y_rate_yz = Math.cos(radian_yz);
		var z_rate_yz = Math.sin(radian_yz);
		if(pad.left_isHold()){
				theta_xz += move_eye;
				var mv_x = d * Math.cos(radian_xz);
				var mv_y = d * Math.sin(radian_yz);
				var mv_z = d * Math.sin(radian_xz);
				position_xyz[0] = node.parents.xyz[0] - mv_x;
				position_xyz[1] = node.parents.xyz[1] - mv_y;
				position_xyz[2] = node.parents.xyz[2] - (mv_z*Math.cos(radian_yz));
				aim_xyz[0] = position_xyz[0];
				aim_xyz[1] = position_xyz[1];
				aim_xyz[2] = position_xyz[2] + 1;
				node.angle[0] -= move_eye;
				cameraAngle_xyz[0] -= move_eye;
				angleRate_x[0] = x_rate_xz;
				angleRate_x[2] = z_rate_xz;
				cameraAxis[0] = 0;
				cameraAxis[1] = 1;
				cameraAxis[0] = 0;
		}
		if(pad.right_isHold()){
				theta_xz -= move_eye;
				var mv_x = d * Math.cos(radian_xz);
				var mv_y = d * Math.sin(radian_yz);
				var mv_z = d * Math.sin(radian_xz);
				position_xyz[0] = node.parents.xyz[0] - mv_x;
				position_xyz[1] = node.parents.xyz[1] - mv_y;
				position_xyz[2] = node.parents.xyz[2] - (mv_z*Math.cos(radian_yz));
				aim_xyz[0] = position_xyz[0];
				aim_xyz[1] = position_xyz[1];
				aim_xyz[2] = position_xyz[2] + 1;
				node.angle[0] += move_eye;
				cameraAngle_xyz[0] += move_eye;
				angleRate_x[0] = x_rate_xz;
				angleRate_x[2] = z_rate_xz;
				cameraAxis[0] = 0;
				cameraAxis[1] = 1;
				cameraAxis[2] = 0;
		}
}