@@ 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<PlanetType>>,
- mut player_query: Query<(Entity, &mut Player)>,
+ mut part_query: Query<(Entity, &PartType, &mut Transform), (Without<PlanetType>, Without<Player>)>,
+ mut player_query: Query<(Entity, &mut Player, &Transform), Without<PlanetType>>,
mut packet_recv: Local<ManualEventReader<ServerEvent>>,
mut packet_event_send: ResMut<Events<ServerEvent>>,
) {
@@ 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::<Attach>();
- 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::<Attach>();
- 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;
}