atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
27256acf27800b63fd950b95ecc55b2a2486c1c5
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),
ea51d9fda49datagen2026-10-14 12:20 UTC26
            Self::Straining | Self::Imminent | Self::Priapic | Self::Ruptured => {
ea51d9fda49datagen2026-10-14 12:20 UTC27
                Some(Danger::Critical)
ea51d9fda49datagen2026-10-14 12:20 UTC28
            }
f3a1913c1299atagen2026-10-14 11:42 UTC29
            Self::Flaccid | Self::Warm | Self::Ideal => None,
f3a1913c1299atagen2026-10-14 11:42 UTC30
        }
f3a1913c1299atagen2026-10-14 11:42 UTC31
    }
f3a1913c1299atagen2026-10-14 11:42 UTC32
}
f3a1913c1299atagen2026-10-14 11:42 UTC33
f3a1913c1299atagen2026-10-14 11:42 UTC34
impl Run {
f3a1913c1299atagen2026-10-14 11:42 UTC35
    pub(super) fn dangers(&self) -> Vec<(&'static str, Danger)> {
f3a1913c1299atagen2026-10-14 11:42 UTC36
        let friction = if self.body.friction >= FRICTION_MAX || self.body.conditions.friction_burn {
f3a1913c1299atagen2026-10-14 11:42 UTC37
            Some(Danger::Critical)
f3a1913c1299atagen2026-10-14 11:42 UTC38
        } else {
f3a1913c1299atagen2026-10-14 11:42 UTC39
            (self.body.friction >= FRICTION_BURN_AT).then_some(Danger::Dangerous)
f3a1913c1299atagen2026-10-14 11:42 UTC40
        };
f3a1913c1299atagen2026-10-14 11:42 UTC41
        let stamina = if self.body.stamina <= 0 {
f3a1913c1299atagen2026-10-14 11:42 UTC42
            Some(Danger::Critical)
f3a1913c1299atagen2026-10-14 11:42 UTC43
        } else {
f3a1913c1299atagen2026-10-14 11:42 UTC44
            (self.body.stamina <= LOW_STAMINA).then_some(Danger::Dangerous)
f3a1913c1299atagen2026-10-14 11:42 UTC45
        };
f3a1913c1299atagen2026-10-14 11:42 UTC46
        let suspicion = if self.standing.suspicion + 1 >= SUSPICION_LIMIT {
f3a1913c1299atagen2026-10-14 11:42 UTC47
            Some(Danger::Critical)
f3a1913c1299atagen2026-10-14 11:42 UTC48
        } else {
f3a1913c1299atagen2026-10-14 11:42 UTC49
            (self.standing.suspicion + 2 >= SUSPICION_LIMIT).then_some(Danger::Dangerous)
f3a1913c1299atagen2026-10-14 11:42 UTC50
        };
f3a1913c1299atagen2026-10-14 11:42 UTC51
        [
f3a1913c1299atagen2026-10-14 11:42 UTC52
            ("friction", friction),
f3a1913c1299atagen2026-10-14 11:42 UTC53
            ("eq", self.arousal().danger()),
f3a1913c1299atagen2026-10-14 11:42 UTC54
            ("stamina", stamina),
f3a1913c1299atagen2026-10-14 11:42 UTC55
            ("suspicion", suspicion),
f3a1913c1299atagen2026-10-14 11:42 UTC56
        ]
f3a1913c1299atagen2026-10-14 11:42 UTC57
        .into_iter()
f3a1913c1299atagen2026-10-14 11:42 UTC58
        .filter_map(|(gauge, danger)| Some((gauge, danger?)))
f3a1913c1299atagen2026-10-14 11:42 UTC59
        .collect()
f3a1913c1299atagen2026-10-14 11:42 UTC60
    }
f3a1913c1299atagen2026-10-14 11:42 UTC61
}