an http based roguelike rpg about jelqing
Blame: src/game/danger.rs
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 1 | use super::{ |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 2 | Arousal, Run, |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 3 | balance::{FRICTION_BURN_AT, FRICTION_MAX, LOW_STAMINA, SUSPICION_LIMIT}, |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 4 | }; |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 5 | |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 6 | /// How close a gauge is to hurting the run, so a client can flag it without knowing the balance. |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 7 | #[derive(Clone, Copy, PartialEq, Eq, Debug)] |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 8 | pub enum Danger { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 9 | Dangerous, |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 10 | Critical, |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 11 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 12 | |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 13 | impl Danger { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 14 | pub fn name(self) -> &'static str { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 15 | match self { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 16 | Self::Dangerous => "dangerous", |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 17 | Self::Critical => "critical", |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 18 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 19 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 20 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 21 | |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 22 | impl Arousal { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 23 | fn danger(self) -> Option<Danger> { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 24 | match self { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 25 | Self::Cold | Self::Swollen | Self::Throbbing => Some(Danger::Dangerous), |
ea51d9fda49d | atagen | 2026-10-14 12:20 UTC | 26 | Self::Straining | Self::Imminent | Self::Priapic | Self::Ruptured => { |
ea51d9fda49d | atagen | 2026-10-14 12:20 UTC | 27 | Some(Danger::Critical) |
ea51d9fda49d | atagen | 2026-10-14 12:20 UTC | 28 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 29 | Self::Flaccid | Self::Warm | Self::Ideal => None, |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 30 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 31 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 32 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 33 | |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 34 | impl Run { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 35 | pub(super) fn dangers(&self) -> Vec<(&'static str, Danger)> { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 36 | let friction = if self.body.friction >= FRICTION_MAX || self.body.conditions.friction_burn { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 37 | Some(Danger::Critical) |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 38 | } else { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 39 | (self.body.friction >= FRICTION_BURN_AT).then_some(Danger::Dangerous) |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 40 | }; |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 41 | let stamina = if self.body.stamina <= 0 { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 42 | Some(Danger::Critical) |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 43 | } else { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 44 | (self.body.stamina <= LOW_STAMINA).then_some(Danger::Dangerous) |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 45 | }; |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 46 | let suspicion = if self.standing.suspicion + 1 >= SUSPICION_LIMIT { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 47 | Some(Danger::Critical) |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 48 | } else { |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 49 | (self.standing.suspicion + 2 >= SUSPICION_LIMIT).then_some(Danger::Dangerous) |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 50 | }; |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 51 | [ |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 52 | ("friction", friction), |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 53 | ("eq", self.arousal().danger()), |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 54 | ("stamina", stamina), |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 55 | ("suspicion", suspicion), |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 56 | ] |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 57 | .into_iter() |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 58 | .filter_map(|(gauge, danger)| Some((gauge, danger?))) |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 59 | .collect() |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 60 | } |
f3a1913c1299 | atagen | 2026-10-14 11:42 UTC | 61 | } |