veloren_common/states/
dance.rs

1use super::utils::*;
2use crate::{
3    comp::{CharacterState, InventoryAction, StateUpdate, character_state::OutputEvents},
4    states::{
5        behavior::{CharacterBehavior, JoinData},
6        idle,
7    },
8};
9use serde::{Deserialize, Serialize};
10
11#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)]
12pub struct Data;
13
14impl CharacterBehavior for Data {
15    fn behavior(&self, data: &JoinData, output_events: &mut OutputEvents) -> StateUpdate {
16        let mut update = StateUpdate::from(data);
17
18        leave_stance(data, output_events);
19        handle_wield(data, &mut update);
20        handle_jump(data, output_events, &mut update, 1.0);
21
22        // Try to Fall/Stand up/Move
23        if data.physics.on_ground.is_none() || data.inputs.move_dir.magnitude_squared() > 0.0 {
24            update.character = CharacterState::Idle(idle::Data::default());
25        }
26
27        update
28    }
29
30    fn manipulate_loadout(
31        &self,
32        data: &JoinData,
33        output_events: &mut OutputEvents,
34        inv_action: InventoryAction,
35    ) -> StateUpdate {
36        let mut update = StateUpdate::from(data);
37        handle_manipulate_loadout(data, output_events, &mut update, inv_action);
38        update
39    }
40
41    fn wield(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate {
42        let mut update = StateUpdate::from(data);
43        attempt_wield(data, &mut update);
44        update
45    }
46
47    fn sit(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate {
48        let mut update = StateUpdate::from(data);
49        attempt_sit(data, &mut update);
50        update
51    }
52
53    fn crawl(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate {
54        let mut update = StateUpdate::from(data);
55        attempt_crawl(data, &mut update);
56        update
57    }
58
59    fn stand(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate {
60        let mut update = StateUpdate::from(data);
61        // Try to Fall/Stand up/Move
62        update.character = CharacterState::Idle(idle::Data::default());
63        update
64    }
65}