atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
624fe9c09c8eefdb9679b36259b76f6439318edc
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git

Blame: src/game/danger.rs

f3a1913c1299atagen2026-10-14 11:42 UTC1
use super::{
f3a1913c1299atagen2026-10-14 11:42 UTC2
    Arousal, Run,
f3a1913c1299atagen2026-10-14 11:42 UTC3
    balance::{FRICTION_BURN_AT, FRICTION_MAX, LOW_STAMINA, SUSPICION_LIMIT},
f3a1913c1299atagen2026-10-14 11:42 UTC4
};
f3a1913c1299atagen2026-10-14 11:42 UTC5
f3a1913c1299atagen2026-10-14 11:42 UTC6
/// How close a gauge is to hurting the run, so a client can flag it without knowing the balance.
f3a1913c1299atagen2026-10-14 11:42 UTC7
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
f3a1913c1299atagen2026-10-14 11:42 UTC8
pub enum Danger {
f3a1913c1299atagen2026-10-14 11:42 UTC9
    Dangerous,
f3a1913c1299atagen2026-10-14 11:42 UTC10
    Critical,
f3a1913c1299atagen2026-10-14 11:42 UTC11
}
f3a1913c1299atagen2026-10-14 11:42 UTC12
f3a1913c1299atagen2026-10-14 11:42 UTC13
impl Danger {
f3a1913c1299atagen2026-10-14 11:42 UTC14
    pub fn name(self) -> &'static str {
f3a1913c1299atagen2026-10-14 11:42 UTC15
        match self {
f3a1913c1299atagen2026-10-14 11:42 UTC16
            Self::Dangerous => "dangerous",
f3a1913c1299atagen2026-10-14 11:42 UTC17
            Self::Critical => "critical",
f3a1913c1299atagen2026-10-14 11:42 UTC18
        }
f3a1913c1299atagen2026-10-14 11:42 UTC19
    }
f3a1913c1299atagen2026-10-14 11:42 UTC20
}
f3a1913c1299atagen2026-10-14 11:42 UTC21
f3a1913c1299atagen2026-10-14 11:42 UTC22
impl Arousal {
f3a1913c1299atagen2026-10-14 11:42 UTC23
    fn danger(self) -> Option<Danger> {
f3a1913c1299atagen2026-10-14 11:42 UTC24
        match self {
f3a1913c1299atagen2026-10-14 11:42 UTC25
            Self::Cold | Self::Swollen | Self::Throbbing => Some(Danger::Dangerous),
f3a1913c1299atagen2026-10-14 11:42 UTC26
            Self::Straining | Self::Imminent | Self::Priapic => Some(Danger::Critical),
f3a1913c1299atagen2026-10-14 11:42 UTC27
            Self::Flaccid | Self::Warm | Self::Ideal => None,
f3a1913c1299atagen2026-10-14 11:42 UTC28
        }
f3a1913c1299atagen2026-10-14 11:42 UTC29
    }
f3a1913c1299atagen2026-10-14 11:42 UTC30
}
f3a1913c1299atagen2026-10-14 11:42 UTC31
f3a1913c1299atagen2026-10-14 11:42 UTC32
impl Run {
f3a1913c1299atagen2026-10-14 11:42 UTC33
    pub(super) fn dangers(&self) -> Vec<(&'static str, Danger)> {
f3a1913c1299atagen2026-10-14 11:42 UTC34
        let friction = if self.body.friction >= FRICTION_MAX || self.body.conditions.friction_burn {
f3a1913c1299atagen2026-10-14 11:42 UTC35
            Some(Danger::Critical)
f3a1913c1299atagen2026-10-14 11:42 UTC36
        } else {
f3a1913c1299atagen2026-10-14 11:42 UTC37
            (self.body.friction >= FRICTION_BURN_AT).then_some(Danger::Dangerous)
f3a1913c1299atagen2026-10-14 11:42 UTC38
        };
f3a1913c1299atagen2026-10-14 11:42 UTC39
        let stamina = if self.body.stamina <= 0 {
f3a1913c1299atagen2026-10-14 11:42 UTC40
            Some(Danger::Critical)
f3a1913c1299atagen2026-10-14 11:42 UTC41
        } else {
f3a1913c1299atagen2026-10-14 11:42 UTC42
            (self.body.stamina <= LOW_STAMINA).then_some(Danger::Dangerous)
f3a1913c1299atagen2026-10-14 11:42 UTC43
        };
f3a1913c1299atagen2026-10-14 11:42 UTC44
        let suspicion = if self.standing.suspicion + 1 >= SUSPICION_LIMIT {
f3a1913c1299atagen2026-10-14 11:42 UTC45
            Some(Danger::Critical)
f3a1913c1299atagen2026-10-14 11:42 UTC46
        } else {
f3a1913c1299atagen2026-10-14 11:42 UTC47
            (self.standing.suspicion + 2 >= SUSPICION_LIMIT).then_some(Danger::Dangerous)
f3a1913c1299atagen2026-10-14 11:42 UTC48
        };
f3a1913c1299atagen2026-10-14 11:42 UTC49
        [
f3a1913c1299atagen2026-10-14 11:42 UTC50
            ("friction", friction),
f3a1913c1299atagen2026-10-14 11:42 UTC51
            ("eq", self.arousal().danger()),
f3a1913c1299atagen2026-10-14 11:42 UTC52
            ("stamina", stamina),
f3a1913c1299atagen2026-10-14 11:42 UTC53
            ("suspicion", suspicion),
f3a1913c1299atagen2026-10-14 11:42 UTC54
        ]
f3a1913c1299atagen2026-10-14 11:42 UTC55
        .into_iter()
f3a1913c1299atagen2026-10-14 11:42 UTC56
        .filter_map(|(gauge, danger)| Some((gauge, danger?)))
f3a1913c1299atagen2026-10-14 11:42 UTC57
        .collect()
f3a1913c1299atagen2026-10-14 11:42 UTC58
    }
f3a1913c1299atagen2026-10-14 11:42 UTC59
}