From aa2e404acb8e51ec6cd0b41c6dc4a0d1c491673e Mon Sep 17 00:00:00 2001 From: ghostlyzsh Date: Wed, 6 Dec 2023 23:52:16 -0600 Subject: [PATCH] well attachment logic is there. functionality is not --- server/src/main.rs | 125 +++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 79 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index 848d054382b418ac38159bc5b53570fd5df2cfb5..3c49b65e4a536958b8f6b86aef37959a67e5de03 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -114,8 +114,8 @@ fn remove_later_module_spawn(mut commands: Commands) { fn on_message( mut commands: Commands, planet_query: Query<(Entity, &PlanetType, &Transform)>, - mut part_query: Query<(Entity, &PartType, &mut Transform), Without>, - mut player_query: Query<(Entity, &mut Player)>, + mut part_query: Query<(Entity, &PartType, &mut Transform), (Without, Without)>, + mut player_query: Query<(Entity, &mut Player, &Transform), Without>, mut packet_recv: Local>, mut packet_event_send: ResMut>, ) { @@ -172,71 +172,6 @@ fn on_message( .insert(RigidBody::Dynamic).id(); let id = entity_id.index(); - // spawn module - let module_id = commands - .spawn(PartBundle { - part_type: PartType::Cargo, - transform: TransformBundle::from(Transform::from_xyz(1100. / SCALE, 0., 0.) - .with_rotation(Quat::from_rotation_z(-angle))), - }) - //.insert(Collider::cuboid(18.75 / SCALE, 23.4375 / SCALE)) - .insert(RigidBody::Dynamic) - .with_children(|children| { - children - .spawn(Collider::cuboid(18.75 / SCALE, 23.4375 / SCALE)) - .insert(TransformBundle::from(Transform::from_xyz( - 0., - 1.5625 / SCALE, - 0., - ))); - }) - .insert(ExternalForce::default()) - .insert(ExternalImpulse::default()) - .insert(ReadMassProperties::default()).id(); - - // attachment logic - let joint = FixedJointBuilder::new().local_anchor1(vec2(0. / SCALE, -53. / SCALE)); - let mut module = commands.entity(module_id); - module.insert(ImpulseJoint::new(entity_id, joint)); - let mut entity = commands.entity(entity_id); - // temporary remove attach - entity.remove::(); - entity.insert(Attach { - associated_player: None, - children: [None, None, Some(module_id), None] - }); - let module_id_1 = commands - .spawn(PartBundle { - part_type: PartType::Cargo, - transform: TransformBundle::from(Transform::from_xyz(1100. / SCALE, 0., 0.) - .with_rotation(Quat::from_rotation_z(-angle))), - }) - //.insert(Collider::cuboid(18.75 / SCALE, 23.4375 / SCALE)) - .insert(RigidBody::Dynamic) - .with_children(|children| { - children - .spawn(Collider::cuboid(18.75 / SCALE, 23.4375 / SCALE)) - .insert(TransformBundle::from(Transform::from_xyz( - 0., - 1.5625 / SCALE, - 0., - ))); - }) - .insert(ExternalForce::default()) - .insert(ExternalImpulse::default()) - .insert(ReadMassProperties::default()).id(); - // attachment logic - let joint = FixedJointBuilder::new().local_anchor1(vec2(0. / SCALE, -53. / SCALE)); - let mut module = commands.entity(module_id_1); - module.insert(ImpulseJoint::new(module_id, joint)); - let mut entity = commands.entity(module_id); - // temporary remove attach - entity.remove::(); - entity.insert(Attach { - associated_player: None, - children: [None, None, Some(module_id_1), None] - }); - // tell this player the planets let mut planets = Vec::new(); for (entity, planet_type, transform) in planet_query.iter() { @@ -260,7 +195,7 @@ fn on_message( // tell the player already existing users let mut players = Vec::new(); - for (entity, player) in &player_query { + for (entity, player, _) in &player_query { players.push((entity.index(), player.username.clone())); } let packet = Packet::PlayerList { players }; @@ -321,7 +256,7 @@ fn on_message( Packet::SendMessage { target, content } => { // find our player let mut player = None; - for (_, q_player) in &player_query { + for (_, q_player, _) in &player_query { if q_player.addr == *addr { player = Some(q_player); } @@ -329,7 +264,7 @@ fn on_message( let player = player.unwrap(); if let Some(target_username) = target { let mut target_player = None; - for (_, q_player) in &player_query { + for (_, q_player, _) in &player_query { if q_player.username == target_username { target_player = Some(q_player); } @@ -364,7 +299,7 @@ fn on_message( left, right, } => { - for (_, mut q_player) in &mut player_query { + for (_, mut q_player, _) in &mut player_query { if q_player.addr == *addr { q_player.input.up = up; q_player.input.down = down; @@ -374,7 +309,7 @@ fn on_message( } } Packet::PlayerMouseInput { x, y, released, button: _ } => { - for (_entity, mut q_player) in &mut player_query { + for (entity, mut q_player, transform) in &mut player_query { if q_player.addr == *addr { if released { let select = if let Some(s) = q_player.selected { s } else { @@ -383,13 +318,45 @@ fn on_message( q_player.selected = None; let mut module = part_query.get_mut(select).unwrap(); // attach module - /*let joint = FixedJointBuilder::new().local_anchor1(vec2(0. / SCALE, -53. / SCALE)); - module.insert(ImpulseJoint::new(entity, joint)); - let mut entity = commands.entity(entity); - entity.insert(Attach { - associated_player: None, - children: [None, None, Some(module_id_1), None] - });*/ + let p_pos = transform.translation; + let (rel_x, rel_y) = ( + p_pos.x - x / SCALE, + p_pos.y - y / SCALE, + ); + let angle = transform.rotation.to_euler(EulerRot::ZYX).0; + println!("angle: {}", angle); + let (rel_x, rel_y) = ( + rel_x.mul_add((-angle).cos(), -rel_y * (-angle).sin()), + rel_x.mul_add((-angle).sin(), rel_y * (-angle).cos()), + ); + + println!("{}, {}", rel_x, rel_y); + if 15./SCALE < rel_y && rel_y < 30./SCALE && -20./SCALE < rel_x && rel_x < 20./SCALE { + module.2.translation = vec3(p_pos.x - 53./SCALE*(-angle).sin(), p_pos.y + 53./SCALE*(-angle).cos(), 0.); + module.2.rotation = Quat::from_euler(EulerRot::ZYX, angle, 0., 0.); + let joint = FixedJointBuilder::new().local_anchor1(vec2(0. / SCALE, -53. / SCALE)); + let mut module_entity = commands.entity(module.0); + module_entity.insert(ImpulseJoint::new(entity, joint)); + let mut entity = commands.entity(entity); + entity.insert(Attach { + associated_player: None, + children: [None, None, Some(module.0), None] + }); + break; + } else if -30./SCALE < rel_y && rel_y < -15./SCALE && -20./SCALE < rel_x && rel_x < 20./SCALE { + let angle = angle + std::f32::consts::PI; + module.2.translation = vec3(p_pos.x + 53./SCALE*(-angle).sin(), p_pos.y - 53./SCALE*(-angle).cos(), 0.); + module.2.rotation = Quat::from_euler(EulerRot::ZYX, angle, 0., 0.); + let joint = FixedJointBuilder::new().local_anchor1(vec2(0. / SCALE, 53. / SCALE)); + let mut module_entity = commands.entity(module.0); + module_entity.insert(ImpulseJoint::new(entity, joint)); + let mut entity = commands.entity(entity); + entity.insert(Attach { + associated_player: None, + children: [Some(module.0), None, None, None] + }); + break; + } module.2.translation = vec3(x / SCALE, y / SCALE, 0.); break; }