Skip to content

Commit

Permalink
Add click-spawn upgrades
Browse files Browse the repository at this point in the history
  • Loading branch information
benfrankel committed Dec 11, 2023
1 parent 926ee8d commit da1d777
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 14 deletions.
35 changes: 23 additions & 12 deletions src/state/editor_screen/scene_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,19 @@ impl Plugin for SceneViewPlugin {
}
}

#[derive(Component, Reflect, Default)]
#[derive(Component, Reflect)]
pub struct SceneView {
pub spawns_per_click: f64,
pub spawns_per_click_multiplier_per_click: f64,
}

impl Default for SceneView {
fn default() -> Self {
Self {
spawns_per_click: 0.0,
spawns_per_click_multiplier_per_click: 1.0,
}
}
}

pub fn spawn_scene_view(commands: &mut Commands) -> Entity {
Expand All @@ -52,24 +62,25 @@ fn click_spawn(
mut events: EventWriter<SpawnEvent>,
root: Res<AppRoot>,
camera_query: Query<(&Camera, &GlobalTransform)>,
scene_view_query: Query<&SceneView>,
mut scene_view_query: Query<&mut SceneView>,
) {
let Ok((camera, camera_gt)) = camera_query.get(root.camera) else {
return;
};
let world_pos = camera
.viewport_to_world(camera_gt, listener.pointer_location.position)
.unwrap()
.origin
.truncate();
let Some(position) = camera.viewport_to_world_2d(camera_gt, listener.pointer_location.position)
else {
return;
};

let Ok(mut scene_view) = scene_view_query.get_mut(listener.target) else {
return;
};

events.send(SpawnEvent {
position: world_pos,
count: scene_view_query
.get(listener.target)
.unwrap()
.spawns_per_click,
position,
count: scene_view.spawns_per_click,
});
scene_view.spawns_per_click *= scene_view.spawns_per_click_multiplier_per_click;
}

#[derive(Resource, Reflect, Default)]
Expand Down
54 changes: 52 additions & 2 deletions src/upgrade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -731,12 +731,29 @@ generate_upgrade_list!(
..default()
},

LaptopSticker: Upgrade {
name: "Laptop Sticker".to_string(),
desc: "Spawns 1 more entity per click.".to_string(),
base_cost: 15.0,
weight: 1.0,
remaining: 4,
install: Some(
world.register_system(|mut scene_view_query: Query<&mut SceneView>| {
for mut scene_view in &mut scene_view_query {
scene_view.spawns_per_click += 1.0;
}
}),
),
..default()
},

Coffee: Upgrade {
name: "Coffee".to_string(),
desc: "Quadruples the number of entities spawned per click.".to_string(),
base_cost: 25.0,
weight: 1.0,
base_cost: 200.0,
weight: 2.0,
remaining: 3,
installed_min: vec![(LaptopSticker, 4)],
install: Some(
world.register_system(|mut scene_view_query: Query<&mut SceneView>| {
for mut scene_view in &mut scene_view_query {
Expand All @@ -747,6 +764,39 @@ generate_upgrade_list!(
..default()
},

ProgrammingSock: Upgrade {
name: "Programming Sock".to_string(),
desc: "Squares the number of entities spawned per click.".to_string(),
base_cost: 5_000.0,
weight: 2.0,
remaining: 2,
installed_min: vec![(Coffee, 3)],
install: Some(
world.register_system(|mut scene_view_query: Query<&mut SceneView>| {
for mut scene_view in &mut scene_view_query {
scene_view.spawns_per_click *= scene_view.spawns_per_click;
}
}),
),
..default()
},

StandingDesk: Upgrade {
name: "Standing Desk".to_string(),
desc: "Doubles the number of entities spawned per click, per click.".to_string(),
base_cost: 1e9,
weight: 1.0,
installed_min: vec![(ProgrammingSock, 2)],
install: Some(
world.register_system(|mut scene_view_query: Query<&mut SceneView>| {
for mut scene_view in &mut scene_view_query {
scene_view.spawns_per_click_multiplier_per_click += 2.0;
}
}),
),
..default()
},

// Entities (automatic)

EntitySpawnerPlugin: Upgrade {
Expand Down

0 comments on commit da1d777

Please sign in to comment.