enemy_example/
enemy_example.rs1use itempool::{ItemPool, RecyclingItemPool};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5struct EntityId(u32);
6
7#[derive(Debug)]
9struct EnemyPool {
10 available_enemies: Vec<EntityId>,
11 temporarily_disabled: Vec<EntityId>,
12}
13
14impl EnemyPool {
15 fn new(count: u32) -> Self {
16 EnemyPool {
17 available_enemies: (0..count).map(EntityId).collect(),
18 temporarily_disabled: Vec::new(),
19 }
20 }
21}
22
23impl ItemPool<EntityId> for EnemyPool {
25 fn pool(&mut self) -> &mut Vec<EntityId> {
26 &mut self.available_enemies
27 }
28}
29
30impl RecyclingItemPool<EntityId> for EnemyPool {
32 fn get_discard_pool(&mut self) -> &mut Vec<EntityId> {
33 &mut self.temporarily_disabled
34 }
35}
36
37fn main() {
38 let mut enemy_pool = EnemyPool::new(10); println!("Initial Pool: {:?}", enemy_pool.pool()); println!("Initial Discard: {:?}", enemy_pool.get_discard_pool()); println!("---");
42
43 let enemy1 = enemy_pool.remove_one();
45 println!("Got one enemy: {:?}", enemy1);
46 println!("Pool after remove_one: {:?}", enemy_pool.pool());
47 println!(
48 "Discard after remove_one: {:?}",
49 enemy_pool.get_discard_pool()
50 );
51 println!("---");
52
53 let enemy_squad = enemy_pool.remove_set(3);
55 println!("Got enemy squad: {:?}", enemy_squad);
56 println!("Pool after remove_set: {:?}", enemy_pool.pool());
57 println!(
58 "Discard after remove_set: {:?}",
59 enemy_pool.get_discard_pool()
60 );
61 println!("---");
62
63 let enemy_to_disable = EntityId(5);
65 enemy_pool.discard_one(enemy_to_disable);
66 println!("Discarded enemy ID: {:?}", enemy_to_disable);
67 println!("Pool after discard_one: {:?}", enemy_pool.pool());
68 println!(
69 "Discard after discard_one: {:?}",
70 enemy_pool.get_discard_pool()
71 ); println!("---");
73
74 println!("Calling get_set, which will recycle first...");
76 let enemy2 = enemy_pool.get_set(1);
77 println!("Got another enemy: {:?}", enemy2);
78 println!("Pool after recycle + get_set: {:?}", enemy_pool.pool());
79 println!(
80 "Discard after recycle + get_set: {:?}",
81 enemy_pool.get_discard_pool()
82 ); println!("---");
84
85 enemy_pool.discard_one(EntityId(7));
87 enemy_pool.discard_one(EntityId(8));
88 println!("Discarded 2 more enemies");
89 println!("Pool before recycle: {:?}", enemy_pool.pool());
90 println!(
91 "Discard before recycle: {:?}",
92 enemy_pool.get_discard_pool()
93 );
94
95 enemy_pool.recycle_discarded();
96 println!("Pool after manual recycle: {:?}", enemy_pool.pool());
97 println!(
98 "Discard after manual recycle: {:?}",
99 enemy_pool.get_discard_pool()
100 );
101}