parent
							
								
									18dffdc871
								
							
						
					
					
						commit
						7e8902a040
					
				
							
								
								
									
										
											BIN
										
									
								
								airplane.iqm
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								airplane.iqm
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -108,6 +108,8 @@ impl ControllerState {
 | 
			
		|||
				key_or_gamepad (Scancode::Right, Button::DPadRight),
 | 
			
		||||
				key_or_gamepad (Scancode::Up, Button::DPadUp),
 | 
			
		||||
				key_or_gamepad (Scancode::Down, Button::DPadDown),
 | 
			
		||||
				b (Button::LeftShoulder),
 | 
			
		||||
				b (Button::RightShoulder),
 | 
			
		||||
			],
 | 
			
		||||
			analog_left_x: axis_or_zero (Axis::LeftX),
 | 
			
		||||
			analog_left_y: axis_or_zero (Axis::LeftY),
 | 
			
		||||
| 
						 | 
				
			
			@ -176,6 +178,12 @@ impl ControllerState {
 | 
			
		|||
		if self.is_pressed (KEY_DOWN) {
 | 
			
		||||
			delta = delta.mul_quat (Quat::from_rotation_x (spin_f));
 | 
			
		||||
		}
 | 
			
		||||
		if self.is_pressed (YAW_LEFT) {
 | 
			
		||||
			delta = delta.mul_quat (Quat::from_rotation_z (spin_f));
 | 
			
		||||
		}
 | 
			
		||||
		if self.is_pressed (YAW_RIGHT) {
 | 
			
		||||
			delta = delta.mul_quat (Quat::from_rotation_z (-spin_f));
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//println! ("spin_f {}, Quat {:?}", spin_f, delta);
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			@ -225,6 +233,8 @@ struct Airplane {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
struct FlightState {
 | 
			
		||||
	frames: u64,
 | 
			
		||||
	
 | 
			
		||||
	airplane: Airplane,
 | 
			
		||||
	spin_speed: i32,
 | 
			
		||||
	arrows: Vec <Arrow>,
 | 
			
		||||
| 
						 | 
				
			
			@ -234,6 +244,8 @@ struct FlightState {
 | 
			
		|||
impl Default for FlightState {
 | 
			
		||||
	fn default () -> Self {
 | 
			
		||||
		Self {
 | 
			
		||||
			frames: 0,
 | 
			
		||||
			
 | 
			
		||||
			airplane: Airplane {
 | 
			
		||||
				pos: (0.0, -20.0, 20.0).into (),
 | 
			
		||||
				vel: (0.0, 0.0, 0.0).into (),
 | 
			
		||||
| 
						 | 
				
			
			@ -337,6 +349,8 @@ impl FlightState {
 | 
			
		|||
				);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		self.frames += 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -470,6 +484,7 @@ struct GameGraphics {
 | 
			
		|||
	mesh_sky: RenderableModel,
 | 
			
		||||
	mesh_pitch: RenderableModel,
 | 
			
		||||
	mesh_arrow: RenderableModel,
 | 
			
		||||
	mesh_truck: RenderableModel,
 | 
			
		||||
	
 | 
			
		||||
	texture_sky: Texture,
 | 
			
		||||
	texture_grass: Texture,
 | 
			
		||||
| 
						 | 
				
			
			@ -535,6 +550,7 @@ impl GameGraphics {
 | 
			
		|||
		let mesh_sky = renderable_from_iqm_file ("sky-sphere.iqm");
 | 
			
		||||
		let mesh_pitch = renderable_from_iqm_file ("pitch.iqm");
 | 
			
		||||
		let mesh_arrow = renderable_from_iqm_file ("arrow.iqm");
 | 
			
		||||
		let mesh_truck = renderable_from_iqm_file ("truk.iqm");
 | 
			
		||||
		
 | 
			
		||||
		let texture_sky = Texture::from_file ("sky.png");
 | 
			
		||||
		let texture_grass = Texture::from_file ("grass.png");
 | 
			
		||||
| 
						 | 
				
			
			@ -795,6 +811,7 @@ impl GameGraphics {
 | 
			
		|||
			mesh_sky,
 | 
			
		||||
			mesh_pitch,
 | 
			
		||||
			mesh_arrow,
 | 
			
		||||
			mesh_truck,
 | 
			
		||||
			
 | 
			
		||||
			texture_sky,
 | 
			
		||||
			texture_grass,
 | 
			
		||||
| 
						 | 
				
			
			@ -853,7 +870,7 @@ impl GameGraphics {
 | 
			
		|||
		
 | 
			
		||||
		let proj_mat = Mat4::perspective_rh_gl (30.0f32.to_radians (), screen_size.0 / screen_size.1, 0.125, 200.0);
 | 
			
		||||
		
 | 
			
		||||
		let airplane_scale = 1.0 / 128.0;
 | 
			
		||||
		let airplane_scale = 1.0 / 8.0;
 | 
			
		||||
		
 | 
			
		||||
		let view_mat = match state.play_mode {
 | 
			
		||||
			PlayMode::WindTunnel => {
 | 
			
		||||
| 
						 | 
				
			
			@ -863,14 +880,16 @@ impl GameGraphics {
 | 
			
		|||
				let latitude = (state.camera.altitude - 90.0).to_radians ();
 | 
			
		||||
				
 | 
			
		||||
				proj_mat *
 | 
			
		||||
				Mat4::from_translation (Vec3::from ((0.0, 0.0, -8.0))) *
 | 
			
		||||
				Mat4::from_translation (Vec3::from ((0.0, 0.0, -20.0))) *
 | 
			
		||||
				Mat4::from_rotation_x (latitude) *
 | 
			
		||||
				Mat4::from_rotation_z (longitude) *
 | 
			
		||||
				Mat4::from_translation ((0.0, 0.0, -2.7 * 0.5).into ())
 | 
			
		||||
			},
 | 
			
		||||
			PlayMode::FreeFlight => {
 | 
			
		||||
				
 | 
			
		||||
				
 | 
			
		||||
				proj_mat *
 | 
			
		||||
				Mat4::from_translation (Vec3::from ((0.0, -4.8, -32.0)) * airplane_scale) *
 | 
			
		||||
				Mat4::from_translation (Vec3::from ((0.0, -1.2, -8.0)) * airplane_scale) *
 | 
			
		||||
				Mat4::from_rotation_x (state.flight.lookaround.altitude.to_radians ()) *
 | 
			
		||||
				Mat4::from_rotation_y (state.flight.lookaround.azimuth.to_radians ()) *
 | 
			
		||||
				Mat4::from_rotation_x (-90.0f32.to_radians ()) *
 | 
			
		||||
| 
						 | 
				
			
			@ -881,6 +900,13 @@ impl GameGraphics {
 | 
			
		|||
		let airplane_model_mat = airplane_model_mat * 
 | 
			
		||||
		Mat4::from_scale ((airplane_scale, airplane_scale, airplane_scale).into ());
 | 
			
		||||
		
 | 
			
		||||
		let truck_model_mat = 
 | 
			
		||||
		Mat4::from_rotation_z ((state.flight.frames as f32).to_radians ()) *
 | 
			
		||||
		Mat4::from_translation (Vec3::from ((1.0, 0.0, 0.0)))
 | 
			
		||||
		;
 | 
			
		||||
		let inverse_truck = truck_model_mat.inverse ();
 | 
			
		||||
		let truck_model_mat = truck_model_mat * Mat4::from_scale ((airplane_scale, airplane_scale, airplane_scale).into ());
 | 
			
		||||
		
 | 
			
		||||
		let world_model_mat = Mat4::identity ();
 | 
			
		||||
		
 | 
			
		||||
		use uniforms::*;
 | 
			
		||||
| 
						 | 
				
			
			@ -891,23 +917,41 @@ impl GameGraphics {
 | 
			
		|||
			let unis = shader_vars.unis;
 | 
			
		||||
			let attrs = shader_vars.attrs;
 | 
			
		||||
			
 | 
			
		||||
			let mvp = view_mat * airplane_model_mat;
 | 
			
		||||
			glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
 | 
			
		||||
			
 | 
			
		||||
			let object_space_light = make_object_space_vec (&inverse_airplane, &light);
 | 
			
		||||
			let object_space_sky = make_object_space_vec (&inverse_airplane, &Vec3::from ((0.0, 0.0, 1.0)));
 | 
			
		||||
			
 | 
			
		||||
			glezz::uniform_3fv (unis [&MIN_BRIGHT], &black);
 | 
			
		||||
			glezz::uniform_3fv (unis [&MIN_ALBEDO], &white);
 | 
			
		||||
			glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &object_space_light);
 | 
			
		||||
			glezz::uniform_3fv (unis [&OBJECT_SPACE_SKY], &object_space_sky);
 | 
			
		||||
			
 | 
			
		||||
			let gunmetal_grey = color_from_255 ((133.0, 149.0, 161.0));
 | 
			
		||||
			glezz::uniform_3fv (unis [&ALBEDO], &gunmetal_grey);
 | 
			
		||||
			
 | 
			
		||||
			self.mesh_airplane.draw_all (attrs, |_i| {
 | 
			
		||||
				true
 | 
			
		||||
			});
 | 
			
		||||
			glezz::uniform_3fv (unis [&MIN_BRIGHT], &black);
 | 
			
		||||
			glezz::uniform_3fv (unis [&MIN_ALBEDO], &white);
 | 
			
		||||
			
 | 
			
		||||
			{
 | 
			
		||||
				let mvp = view_mat * airplane_model_mat;
 | 
			
		||||
				glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
 | 
			
		||||
				
 | 
			
		||||
				let object_space_light = make_object_space_vec (&inverse_airplane, &light);
 | 
			
		||||
				let object_space_sky = make_object_space_vec (&inverse_airplane, &Vec3::from ((0.0, 0.0, 1.0)));
 | 
			
		||||
				
 | 
			
		||||
				glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &object_space_light);
 | 
			
		||||
				glezz::uniform_3fv (unis [&OBJECT_SPACE_SKY], &object_space_sky);
 | 
			
		||||
				
 | 
			
		||||
				self.mesh_airplane.draw_all (attrs, |_i| {
 | 
			
		||||
					true
 | 
			
		||||
				});
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			{
 | 
			
		||||
				let mvp = view_mat * truck_model_mat;
 | 
			
		||||
				glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
 | 
			
		||||
				
 | 
			
		||||
				let object_space_light = make_object_space_vec (&inverse_truck, &light);
 | 
			
		||||
				let object_space_sky = make_object_space_vec (&inverse_truck, &Vec3::from ((0.0, 0.0, 1.0)));
 | 
			
		||||
				
 | 
			
		||||
				glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &object_space_light);
 | 
			
		||||
				glezz::uniform_3fv (unis [&OBJECT_SPACE_SKY], &object_space_sky);
 | 
			
		||||
				
 | 
			
		||||
				self.mesh_truck.draw_all (attrs, |_| {
 | 
			
		||||
					true
 | 
			
		||||
				});
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			let mvp = view_mat * world_model_mat;
 | 
			
		||||
			glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
 | 
			
		||||
| 
						 | 
				
			
			@ -947,6 +991,11 @@ impl GameGraphics {
 | 
			
		|||
			
 | 
			
		||||
			self.mesh_airplane.draw_all (attrs, |_| true);
 | 
			
		||||
			
 | 
			
		||||
			let mvp = view_mat * truck_model_mat;
 | 
			
		||||
			glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
 | 
			
		||||
			
 | 
			
		||||
			self.mesh_truck.draw_all (attrs, |_| true);
 | 
			
		||||
			
 | 
			
		||||
			let mvp = view_mat * world_model_mat;
 | 
			
		||||
			glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
 | 
			
		||||
			
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue