Untitled
unknown
plain_text
2 years ago
8.3 kB
3
Indexable
// Give the player a child from where I calculate distances p.spawn(SwingFromWhere {}) .insert(Transform::from_xyz(0.0, 0.0, 0.0)); //other File (for spawning the world) pub const FIELD_1_FLOWERS_ROW: i32 = 20; pub const FIELD_1_FLOWERS_COLUMN: i32 = 13; #[derive(Component)] pub struct Ground {} #[derive(Component, Default, Clone, Debug)] pub struct FlowerField { pub which_field: String, pub positions: Vec<Vec3>, } #[derive(Component)] pub struct Flower { pub flower_type: Type, pub stage: u8, pub how_many: u8, } pub enum Type { White, Blue, Red, } #[derive(Resource, Default, Debug)] pub struct FlowerFields { pub flower_fields: Vec<FlowerField>, let meshes: Vec<Handle<Scene>> = vec![ asset_server.load("meshes/world.glb#Scene0"), asset_server.load("meshes/spawn.glb#Scene0"), asset_server.load("meshes/field_1.glb#Scene0"), ]; let flower_meshes: Vec<Handle<Scene>> = vec![ asset_server.load("meshes/flower_white.glb#Scene0"), asset_server.load("meshes/flower_blue.glb#Scene0"), asset_server.load("meshes/flower_red.glb#Scene0"), ]; let ground = ( SceneBundle { scene: meshes[0].clone(), ..Default::default() }, Collider::cuboid(200.0, 0.01, 200.0), RigidBody::Fixed, Ground {}, ); let spawn = ( SceneBundle { scene: meshes[1].clone(), ..Default::default() }, Collider::cuboid(2.0, 0.2, 2.0), RigidBody::Fixed, Ground {}, ); let field_1 = commands .spawn(( SceneBundle { scene: meshes[2].clone(), transform: Transform::from_xyz(0.0, 0.01, 15.0), ..Default::default() }, Collider::cuboid(10.0, 0.1, 7.0), RigidBody::Fixed, Ground {}, FlowerField { which_field: "field_1".to_string(), positions: Vec::new(), }, )) .with_children(|p| { for test in 0..FIELD_1_FLOWERS_ROW { for notest in 0..FIELD_1_FLOWERS_COLUMN { let mut rng = rand::thread_rng(); let random_number = rng.gen_range(0..=99); let mut x_value: f32 = test as f32; let mut y_value: f32 = notest as f32; x_value -= 10.0; y_value -= 6.0; // Check the probability ranges and print accordingly if random_number < 70 { p.spawn(( SceneBundle { scene: flower_meshes[0].clone(), transform: Transform::from_xyz(x_value, 0.0, y_value), ..Default::default() }, Flower { flower_type: Type::White, stage: 3, how_many: 1, }, )); } else if random_number < 85 { p.spawn(( SceneBundle { scene: flower_meshes[1].clone(), transform: Transform::from_xyz(x_value, 0.0, y_value), ..Default::default() }, Flower { flower_type: Type::Blue, stage: 3, how_many: 1, }, )); } else { p.spawn(( SceneBundle { scene: flower_meshes[2].clone(), transform: Transform::from_xyz(x_value, 0.0, y_value), ..Default::default() }, Flower { flower_type: Type::Red, stage: 3, how_many: 1, }, )); } } } }) .id(); let ground_id = commands.spawn(ground).id(); let spawn_id = commands.spawn(spawn).id(); // Here I just put the positions of the flowers in a Vec pub fn spawn_positions( mut flowerfield: Query<&mut FlowerField>, mut flowerfieldsres: ResMut<FlowerFields>, ) { for mut flowerfields in flowerfield.iter_mut() { match flowerfields.which_field.as_str() { "field_1" => { for test in 0..FIELD_1_FLOWERS_ROW { for notest in 0..FIELD_1_FLOWERS_COLUMN { let mut x_value: f32 = test as f32; let mut y_value: f32 = notest as f32; x_value -= 10.0; y_value -= 6.0; flowerfields.positions.push(Vec3 { x: (x_value), y: (0.0), z: (y_value), }); } } } _ => println!("No Field!"), }; flowerfieldsres.flower_fields.push(flowerfields.clone()); } } // And now in the Player again pub fn is_in_field( player_q: Query<Entity, With<Player>>, field_q: Query<(Entity, &FlowerField), With<FlowerField>>, mut contact_force_events: EventReader<ContactForceEvent>, mut in_field: ResMut<InField>, ) { let player = player_q.single(); for contact_force_event in contact_force_events.read() { let entity_1 = contact_force_event.collider1; let entity_2 = contact_force_event.collider2; for (entity, field) in field_q.iter() { if (entity_1 == player) && (entity_2 == entity) { in_field.is_in_field = true; match field.which_field.as_str() { "field_1" => in_field.which_field = field.which_field.clone(), _ => println!("Wrong FlowerField Name!"), }; } else { in_field.is_in_field = false; } } } } pub fn collector_swinging_system( time: Res<Time>, input: Res<Input<MouseButton>>, player_animations: Res<PlayerAnimations>, mut query: Query<(&mut Collector, &mut Transform)>, mut player_query: Query<&mut AnimationPlayer>, mut swing_timer: ResMut<SwingTimer>, mut event_writer: EventWriter<Collect>, ) { for (mut collector, _transform) in query.iter_mut() { if input.just_pressed(MouseButton::Left) && collector.can_swing { for mut player in &mut player_query { player.play(player_animations.0[0].clone_weak()); player.replay(); } event_writer.send(Collect {}); collector.can_swing = false; swing_timer.timer.reset(); } swing_timer.timer.tick(time.delta()); collector.can_swing = swing_timer.timer.finished(); } } pub fn collect_flowers( mut event_reader: EventReader<Collect>, in_field: Res<InField>, player_q: Query<&Transform, With<SwingFromWhere>>, flowerfields: Res<FlowerFields>, ) { let mut which_field: usize = 0; for _event in event_reader.read() { if in_field.is_in_field { match in_field.which_field.as_str() { "field_1" => which_field = 0, _ => println!("Something went wronglol!"), }; //let positions: i32 = flowerfields.flower_fields[which_field].positions.len() as i32; let player_position = player_q.single().translation; for &position in &flowerfields.flower_fields[which_field].positions { let distance = player_position.distance(position); // Calculate distance if distance < 3.0 { println!("Harvestable"); } } } } }
Editor is loading...
Leave a Comment