veloren_common/states/
crawl.rs1use super::utils::*;
2use crate::{
3 comp::{CharacterState, StateUpdate, character_state::OutputEvents},
4 states::behavior::{CharacterBehavior, JoinData},
5};
6use serde::{Deserialize, Serialize};
7
8#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
9pub struct Data;
10
11fn can_stand(data: &JoinData) -> bool {
12 data.health
13 .is_none_or(|health| !health.has_consumed_death_protection())
14}
15
16impl CharacterBehavior for Data {
19 fn behavior(&self, data: &JoinData, output_events: &mut OutputEvents) -> StateUpdate {
20 let mut update = StateUpdate::from(data);
21
22 leave_stance(data, output_events);
23 handle_orientation(data, &mut update, 0.2, None);
24 handle_move(data, &mut update, 0.2);
25
26 update
27 }
28
29 fn sit(&self, data: &JoinData, _output_events: &mut OutputEvents) -> StateUpdate {
30 let mut update = StateUpdate::from(data);
31 if can_stand(data) {
32 attempt_sit(data, &mut update);
33 }
34 update
35 }
36
37 fn stand(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate {
38 let mut update = StateUpdate::from(data);
39 if can_stand(data) {
40 update.character = CharacterState::Idle(Default::default());
41 }
42 update
43 }
44
45 fn dance(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate {
46 let mut update = StateUpdate::from(data);
47 if can_stand(data) {
48 attempt_dance(data, &mut update);
49 }
50 update
51 }
52}