overlord_event_system/
quests.rs1use configs::game_config::GameConfig;
2use essences::{
3 bundles::{BundleElement, BundleId},
4 character_state,
5 quest::{QuestInstance, QuestTemplate},
6};
7
8use crate::{
9 BehaviorRegistry, bundles::bundle_raw_step_to_element, game_config_helpers::GameConfigLookup,
10};
11
12pub fn get_reward_from_bundle(
13 bundle_id: Option<BundleId>,
14 character_state: &character_state::CharacterState,
15 behaviors: &BehaviorRegistry,
16 game_config: &GameConfig,
17) -> Vec<BundleElement> {
18 let mut elements = vec![];
19
20 let Some(bundle_id) = bundle_id else {
21 return vec![];
22 };
23
24 let Some(bundle) = game_config.bundle(bundle_id) else {
25 tracing::error!(
26 "Couldn't find bundle with id = {}",
27 game_config.afk_rewards_settings.bundle_id
28 );
29 return vec![];
30 };
31
32 for step in &bundle.steps {
33 elements.push(bundle_raw_step_to_element(
34 step,
35 character_state,
36 behaviors,
37 game_config,
38 ));
39 }
40 elements
41}
42
43pub fn make_quest_instance(
44 quest: &QuestTemplate,
45 character_state: &character_state::CharacterState,
46 game_config: &GameConfig,
47 behaviors: &BehaviorRegistry,
48) -> QuestInstance {
49 let reward = get_reward_from_bundle(quest.bundle_id, character_state, behaviors, game_config);
50
51 QuestInstance {
52 id: quest.id,
53 current: 0,
54 reward,
55 is_claimed: false,
56 }
57}