overlord_event_system/
quests.rs

1use 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}