atagen

jelq

public

an http based roguelike rpg about jelqing

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

Blame: src/game/inventory.rs

8b8e83329a1datagen2026-10-12 12:01 UTC1
use super::{Item, Lube, balance::STARTING_ICE_PACKS};
8b8e83329a1datagen2026-10-12 12:01 UTC2
8b8e83329a1datagen2026-10-12 12:01 UTC3
#[derive(Default)]
8b8e83329a1datagen2026-10-12 12:01 UTC4
pub struct Items {
8b8e83329a1datagen2026-10-12 12:01 UTC5
    pub(crate) kit: Kit,
8b8e83329a1datagen2026-10-12 12:01 UTC6
    pub(crate) stores: Stores,
8b8e83329a1datagen2026-10-12 12:01 UTC7
    pub(crate) lubes: LubeStock,
8b8e83329a1datagen2026-10-12 12:01 UTC8
}
8b8e83329a1datagen2026-10-12 12:01 UTC9
8b8e83329a1datagen2026-10-12 12:01 UTC10
#[derive(Default)]
8b8e83329a1datagen2026-10-12 12:01 UTC11
pub struct Kit {
8b8e83329a1datagen2026-10-12 12:01 UTC12
    pub(crate) ruler: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC13
    pub(crate) dnd_sign: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC14
    pub(crate) blinds: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC15
    pub(crate) pump_pro: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC16
    pub(crate) extender: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC17
    pub(crate) ring: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC18
    pub(crate) cage: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC19
    pub(crate) spreadsheet: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC20
    pub(crate) teapot_spout: bool,
8b8e83329a1datagen2026-10-12 12:01 UTC21
}
8b8e83329a1datagen2026-10-12 12:01 UTC22
8b8e83329a1datagen2026-10-12 12:01 UTC23
pub struct Stores {
8b8e83329a1datagen2026-10-12 12:01 UTC24
    pub(crate) ice_packs: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC25
    pub(crate) door_locks: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC26
    pub(crate) supplements: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC27
    pub(crate) energy_drinks: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC28
}
8b8e83329a1datagen2026-10-12 12:01 UTC29
8b8e83329a1datagen2026-10-12 12:01 UTC30
impl Default for Stores {
8b8e83329a1datagen2026-10-12 12:01 UTC31
    fn default() -> Self {
8b8e83329a1datagen2026-10-12 12:01 UTC32
        Self {
8b8e83329a1datagen2026-10-12 12:01 UTC33
            ice_packs: STARTING_ICE_PACKS,
8b8e83329a1datagen2026-10-12 12:01 UTC34
            door_locks: 0,
8b8e83329a1datagen2026-10-12 12:01 UTC35
            supplements: 0,
8b8e83329a1datagen2026-10-12 12:01 UTC36
            energy_drinks: 0,
8b8e83329a1datagen2026-10-12 12:01 UTC37
        }
8b8e83329a1datagen2026-10-12 12:01 UTC38
    }
8b8e83329a1datagen2026-10-12 12:01 UTC39
}
8b8e83329a1datagen2026-10-12 12:01 UTC40
8b8e83329a1datagen2026-10-12 12:01 UTC41
pub struct LubeStock {
8b8e83329a1datagen2026-10-12 12:01 UTC42
    pub(crate) baby_oil: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC43
    pub(crate) coconut_oil: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC44
    pub(crate) lotion: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC45
    pub(crate) vaseline: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC46
}
8b8e83329a1datagen2026-10-12 12:01 UTC47
8b8e83329a1datagen2026-10-12 12:01 UTC48
impl Default for LubeStock {
8b8e83329a1datagen2026-10-12 12:01 UTC49
    fn default() -> Self {
8b8e83329a1datagen2026-10-12 12:01 UTC50
        Self {
8b8e83329a1datagen2026-10-12 12:01 UTC51
            baby_oil: 1,
8b8e83329a1datagen2026-10-12 12:01 UTC52
            coconut_oil: 0,
8b8e83329a1datagen2026-10-12 12:01 UTC53
            lotion: 1,
8b8e83329a1datagen2026-10-12 12:01 UTC54
            vaseline: 0,
8b8e83329a1datagen2026-10-12 12:01 UTC55
        }
8b8e83329a1datagen2026-10-12 12:01 UTC56
    }
8b8e83329a1datagen2026-10-12 12:01 UTC57
}
8b8e83329a1datagen2026-10-12 12:01 UTC58
8b8e83329a1datagen2026-10-12 12:01 UTC59
impl LubeStock {
8b8e83329a1datagen2026-10-12 12:01 UTC60
    /// Spit is the only lubricant that never runs out, so it has no count.
8b8e83329a1datagen2026-10-12 12:01 UTC61
    fn bottle(&mut self, lube: Lube) -> Option<&mut u32> {
8b8e83329a1datagen2026-10-12 12:01 UTC62
        match lube {
8b8e83329a1datagen2026-10-12 12:01 UTC63
            Lube::Spit => None,
8b8e83329a1datagen2026-10-12 12:01 UTC64
            Lube::BabyOil => Some(&mut self.baby_oil),
8b8e83329a1datagen2026-10-12 12:01 UTC65
            Lube::CoconutOil => Some(&mut self.coconut_oil),
8b8e83329a1datagen2026-10-12 12:01 UTC66
            Lube::Lotion => Some(&mut self.lotion),
8b8e83329a1datagen2026-10-12 12:01 UTC67
            Lube::Vaseline => Some(&mut self.vaseline),
8b8e83329a1datagen2026-10-12 12:01 UTC68
        }
8b8e83329a1datagen2026-10-12 12:01 UTC69
    }
8b8e83329a1datagen2026-10-12 12:01 UTC70
8b8e83329a1datagen2026-10-12 12:01 UTC71
    pub fn has(&self, lube: Lube) -> bool {
8b8e83329a1datagen2026-10-12 12:01 UTC72
        match lube {
8b8e83329a1datagen2026-10-12 12:01 UTC73
            Lube::Spit => true,
8b8e83329a1datagen2026-10-12 12:01 UTC74
            Lube::BabyOil => self.baby_oil > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC75
            Lube::CoconutOil => self.coconut_oil > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC76
            Lube::Lotion => self.lotion > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC77
            Lube::Vaseline => self.vaseline > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC78
        }
8b8e83329a1datagen2026-10-12 12:01 UTC79
    }
8b8e83329a1datagen2026-10-12 12:01 UTC80
8b8e83329a1datagen2026-10-12 12:01 UTC81
    pub fn take(&mut self, lube: Lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC82
        if let Some(bottle) = self.bottle(lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC83
            *bottle = bottle.saturating_sub(1);
8b8e83329a1datagen2026-10-12 12:01 UTC84
        }
8b8e83329a1datagen2026-10-12 12:01 UTC85
    }
8b8e83329a1datagen2026-10-12 12:01 UTC86
8b8e83329a1datagen2026-10-12 12:01 UTC87
    fn add(&mut self, lube: Lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC88
        if let Some(bottle) = self.bottle(lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC89
            *bottle += 1;
8b8e83329a1datagen2026-10-12 12:01 UTC90
        }
8b8e83329a1datagen2026-10-12 12:01 UTC91
    }
8b8e83329a1datagen2026-10-12 12:01 UTC92
}
8b8e83329a1datagen2026-10-12 12:01 UTC93
8b8e83329a1datagen2026-10-12 12:01 UTC94
impl Items {
8b8e83329a1datagen2026-10-12 12:01 UTC95
    pub fn has(&self, item: Item) -> bool {
8b8e83329a1datagen2026-10-12 12:01 UTC96
        match item {
8b8e83329a1datagen2026-10-12 12:01 UTC97
            Item::WarmTowel => true,
8b8e83329a1datagen2026-10-12 12:01 UTC98
            Item::IcePack => self.stores.ice_packs > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC99
            Item::Ruler => self.kit.ruler,
8b8e83329a1datagen2026-10-12 12:01 UTC100
            Item::DoorLock => self.stores.door_locks > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC101
            Item::DndSign => self.kit.dnd_sign,
8b8e83329a1datagen2026-10-12 12:01 UTC102
            Item::Blinds => self.kit.blinds,
8b8e83329a1datagen2026-10-12 12:01 UTC103
            Item::PumpPro => self.kit.pump_pro,
8b8e83329a1datagen2026-10-12 12:01 UTC104
            Item::Extender => self.kit.extender,
8b8e83329a1datagen2026-10-12 12:01 UTC105
            Item::Ring => self.kit.ring,
8b8e83329a1datagen2026-10-12 12:01 UTC106
            Item::Supplement => self.stores.supplements > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC107
            Item::Cage => self.kit.cage,
8b8e83329a1datagen2026-10-12 12:01 UTC108
            Item::Spreadsheet => self.kit.spreadsheet,
8b8e83329a1datagen2026-10-12 12:01 UTC109
            Item::TeapotSpout => self.kit.teapot_spout,
8b8e83329a1datagen2026-10-12 12:01 UTC110
            Item::EnergyDrink => self.stores.energy_drinks > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC111
            Item::BabyOil => self.lubes.has(Lube::BabyOil),
8b8e83329a1datagen2026-10-12 12:01 UTC112
            Item::CoconutOil => self.lubes.has(Lube::CoconutOil),
8b8e83329a1datagen2026-10-12 12:01 UTC113
            Item::Lotion => self.lubes.has(Lube::Lotion),
8b8e83329a1datagen2026-10-12 12:01 UTC114
            Item::Vaseline => self.lubes.has(Lube::Vaseline),
8b8e83329a1datagen2026-10-12 12:01 UTC115
            Item::Pump | Item::CageKey => false,
8b8e83329a1datagen2026-10-12 12:01 UTC116
        }
8b8e83329a1datagen2026-10-12 12:01 UTC117
    }
8b8e83329a1datagen2026-10-12 12:01 UTC118
8b8e83329a1datagen2026-10-12 12:01 UTC119
    pub fn owned(&self) -> Vec<Item> {
8b8e83329a1datagen2026-10-12 12:01 UTC120
        Item::ALL
8b8e83329a1datagen2026-10-12 12:01 UTC121
            .into_iter()
8b8e83329a1datagen2026-10-12 12:01 UTC122
            .filter(|&item| self.has(item))
8b8e83329a1datagen2026-10-12 12:01 UTC123
            .collect()
8b8e83329a1datagen2026-10-12 12:01 UTC124
    }
8b8e83329a1datagen2026-10-12 12:01 UTC125
8b8e83329a1datagen2026-10-12 12:01 UTC126
    pub fn grant(&mut self, item: Item) {
8b8e83329a1datagen2026-10-12 12:01 UTC127
        match item {
8b8e83329a1datagen2026-10-12 12:01 UTC128
            Item::IcePack => self.stores.ice_packs += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC129
            Item::Ruler => self.kit.ruler = true,
8b8e83329a1datagen2026-10-12 12:01 UTC130
            Item::DoorLock => self.stores.door_locks += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC131
            Item::DndSign => self.kit.dnd_sign = true,
8b8e83329a1datagen2026-10-12 12:01 UTC132
            Item::Blinds => self.kit.blinds = true,
8b8e83329a1datagen2026-10-12 12:01 UTC133
            Item::PumpPro => self.kit.pump_pro = true,
8b8e83329a1datagen2026-10-12 12:01 UTC134
            Item::Extender => self.kit.extender = true,
8b8e83329a1datagen2026-10-12 12:01 UTC135
            Item::Ring => self.kit.ring = true,
8b8e83329a1datagen2026-10-12 12:01 UTC136
            Item::Supplement => self.stores.supplements += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC137
            Item::Cage => self.kit.cage = true,
8b8e83329a1datagen2026-10-12 12:01 UTC138
            Item::CageKey => self.kit.cage = false,
8b8e83329a1datagen2026-10-12 12:01 UTC139
            Item::Spreadsheet => self.kit.spreadsheet = true,
8b8e83329a1datagen2026-10-12 12:01 UTC140
            Item::TeapotSpout => self.kit.teapot_spout = true,
8b8e83329a1datagen2026-10-12 12:01 UTC141
            Item::EnergyDrink => self.stores.energy_drinks += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC142
            Item::BabyOil => self.lubes.add(Lube::BabyOil),
8b8e83329a1datagen2026-10-12 12:01 UTC143
            Item::CoconutOil => self.lubes.add(Lube::CoconutOil),
8b8e83329a1datagen2026-10-12 12:01 UTC144
            Item::Lotion => self.lubes.add(Lube::Lotion),
8b8e83329a1datagen2026-10-12 12:01 UTC145
            Item::Vaseline => self.lubes.add(Lube::Vaseline),
8b8e83329a1datagen2026-10-12 12:01 UTC146
            Item::WarmTowel | Item::Pump => {}
8b8e83329a1datagen2026-10-12 12:01 UTC147
        }
8b8e83329a1datagen2026-10-12 12:01 UTC148
    }
8b8e83329a1datagen2026-10-12 12:01 UTC149
}