player_resource/
player_resource.rs1use riddance::{Id, Registry};
4
5type PlayerId = Id<Player>;
6
7struct Player {
8 resource_ids: Vec<ResourceId>,
9 points: i32,
10}
11
12type ResourceId = Id<Resource>;
13
14struct Resource {
15 owner_id: PlayerId,
16}
17
18struct GameState {
19 players: Registry<Player>,
20 resources: Registry<Resource>,
21}
22
23fn new_player(state: &mut GameState) -> PlayerId {
24 state.players.insert(Player {
25 points: 0,
26 resource_ids: Vec::new(),
27 })
28}
29
30fn new_resource(state: &mut GameState, owner_id: PlayerId) -> ResourceId {
31 let new_id = state.resources.insert(Resource { owner_id });
32 state.players[owner_id].resource_ids.push(new_id);
33 state.players[owner_id].points += 30;
34 new_id
35}
36
37fn main() {
38 let mut state = GameState {
39 players: Registry::new(),
40 resources: Registry::new(),
41 };
42 let player_id = new_player(&mut state);
43 let resource_id = new_resource(&mut state, player_id);
44 assert_eq!(state.resources[resource_id].owner_id, player_id);
45 assert!(state.players[player_id].resource_ids.contains(&resource_id));
46}