atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
ccccd908b33de5c66c1080325bb22a21561874db
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
880b29a0c11eatagen2026-10-13 09:27 UTC41
#[derive(Default)]
8b8e83329a1datagen2026-10-12 12:01 UTC42
pub struct LubeStock {
8b8e83329a1datagen2026-10-12 12:01 UTC43
    pub(crate) baby_oil: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC44
    pub(crate) coconut_oil: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC45
    pub(crate) lotion: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC46
    pub(crate) vaseline: u32,
8b8e83329a1datagen2026-10-12 12:01 UTC47
}
8b8e83329a1datagen2026-10-12 12:01 UTC48
8b8e83329a1datagen2026-10-12 12:01 UTC49
impl LubeStock {
8b8e83329a1datagen2026-10-12 12:01 UTC50
    /// Spit is the only lubricant that never runs out, so it has no count.
8b8e83329a1datagen2026-10-12 12:01 UTC51
    fn bottle(&mut self, lube: Lube) -> Option<&mut u32> {
8b8e83329a1datagen2026-10-12 12:01 UTC52
        match lube {
8b8e83329a1datagen2026-10-12 12:01 UTC53
            Lube::Spit => None,
8b8e83329a1datagen2026-10-12 12:01 UTC54
            Lube::BabyOil => Some(&mut self.baby_oil),
8b8e83329a1datagen2026-10-12 12:01 UTC55
            Lube::CoconutOil => Some(&mut self.coconut_oil),
8b8e83329a1datagen2026-10-12 12:01 UTC56
            Lube::Lotion => Some(&mut self.lotion),
8b8e83329a1datagen2026-10-12 12:01 UTC57
            Lube::Vaseline => Some(&mut self.vaseline),
8b8e83329a1datagen2026-10-12 12:01 UTC58
        }
8b8e83329a1datagen2026-10-12 12:01 UTC59
    }
8b8e83329a1datagen2026-10-12 12:01 UTC60
8b8e83329a1datagen2026-10-12 12:01 UTC61
    pub fn has(&self, lube: Lube) -> bool {
8b8e83329a1datagen2026-10-12 12:01 UTC62
        match lube {
8b8e83329a1datagen2026-10-12 12:01 UTC63
            Lube::Spit => true,
8b8e83329a1datagen2026-10-12 12:01 UTC64
            Lube::BabyOil => self.baby_oil > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC65
            Lube::CoconutOil => self.coconut_oil > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC66
            Lube::Lotion => self.lotion > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC67
            Lube::Vaseline => self.vaseline > 0,
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 take(&mut self, lube: Lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC72
        if let Some(bottle) = self.bottle(lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC73
            *bottle = bottle.saturating_sub(1);
8b8e83329a1datagen2026-10-12 12:01 UTC74
        }
8b8e83329a1datagen2026-10-12 12:01 UTC75
    }
8b8e83329a1datagen2026-10-12 12:01 UTC76
8b8e83329a1datagen2026-10-12 12:01 UTC77
    fn add(&mut self, lube: Lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC78
        if let Some(bottle) = self.bottle(lube) {
8b8e83329a1datagen2026-10-12 12:01 UTC79
            *bottle += 1;
8b8e83329a1datagen2026-10-12 12:01 UTC80
        }
8b8e83329a1datagen2026-10-12 12:01 UTC81
    }
8b8e83329a1datagen2026-10-12 12:01 UTC82
}
8b8e83329a1datagen2026-10-12 12:01 UTC83
8b8e83329a1datagen2026-10-12 12:01 UTC84
impl Items {
8b8e83329a1datagen2026-10-12 12:01 UTC85
    pub fn has(&self, item: Item) -> bool {
8b8e83329a1datagen2026-10-12 12:01 UTC86
        match item {
8b8e83329a1datagen2026-10-12 12:01 UTC87
            Item::WarmTowel => true,
8b8e83329a1datagen2026-10-12 12:01 UTC88
            Item::IcePack => self.stores.ice_packs > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC89
            Item::Ruler => self.kit.ruler,
8b8e83329a1datagen2026-10-12 12:01 UTC90
            Item::DoorLock => self.stores.door_locks > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC91
            Item::DndSign => self.kit.dnd_sign,
8b8e83329a1datagen2026-10-12 12:01 UTC92
            Item::Blinds => self.kit.blinds,
8b8e83329a1datagen2026-10-12 12:01 UTC93
            Item::PumpPro => self.kit.pump_pro,
8b8e83329a1datagen2026-10-12 12:01 UTC94
            Item::Extender => self.kit.extender,
8b8e83329a1datagen2026-10-12 12:01 UTC95
            Item::Ring => self.kit.ring,
8b8e83329a1datagen2026-10-12 12:01 UTC96
            Item::Supplement => self.stores.supplements > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC97
            Item::Cage => self.kit.cage,
8b8e83329a1datagen2026-10-12 12:01 UTC98
            Item::Spreadsheet => self.kit.spreadsheet,
8b8e83329a1datagen2026-10-12 12:01 UTC99
            Item::TeapotSpout => self.kit.teapot_spout,
8b8e83329a1datagen2026-10-12 12:01 UTC100
            Item::EnergyDrink => self.stores.energy_drinks > 0,
8b8e83329a1datagen2026-10-12 12:01 UTC101
            Item::BabyOil => self.lubes.has(Lube::BabyOil),
8b8e83329a1datagen2026-10-12 12:01 UTC102
            Item::CoconutOil => self.lubes.has(Lube::CoconutOil),
8b8e83329a1datagen2026-10-12 12:01 UTC103
            Item::Lotion => self.lubes.has(Lube::Lotion),
8b8e83329a1datagen2026-10-12 12:01 UTC104
            Item::Vaseline => self.lubes.has(Lube::Vaseline),
8b8e83329a1datagen2026-10-12 12:01 UTC105
            Item::Pump | Item::CageKey => false,
8b8e83329a1datagen2026-10-12 12:01 UTC106
        }
8b8e83329a1datagen2026-10-12 12:01 UTC107
    }
8b8e83329a1datagen2026-10-12 12:01 UTC108
8b8e83329a1datagen2026-10-12 12:01 UTC109
    pub fn owned(&self) -> Vec<Item> {
8b8e83329a1datagen2026-10-12 12:01 UTC110
        Item::ALL
8b8e83329a1datagen2026-10-12 12:01 UTC111
            .into_iter()
8b8e83329a1datagen2026-10-12 12:01 UTC112
            .filter(|&item| self.has(item))
8b8e83329a1datagen2026-10-12 12:01 UTC113
            .collect()
8b8e83329a1datagen2026-10-12 12:01 UTC114
    }
8b8e83329a1datagen2026-10-12 12:01 UTC115
8b8e83329a1datagen2026-10-12 12:01 UTC116
    pub fn grant(&mut self, item: Item) {
8b8e83329a1datagen2026-10-12 12:01 UTC117
        match item {
8b8e83329a1datagen2026-10-12 12:01 UTC118
            Item::IcePack => self.stores.ice_packs += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC119
            Item::Ruler => self.kit.ruler = true,
8b8e83329a1datagen2026-10-12 12:01 UTC120
            Item::DoorLock => self.stores.door_locks += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC121
            Item::DndSign => self.kit.dnd_sign = true,
8b8e83329a1datagen2026-10-12 12:01 UTC122
            Item::Blinds => self.kit.blinds = true,
8b8e83329a1datagen2026-10-12 12:01 UTC123
            Item::PumpPro => self.kit.pump_pro = true,
8b8e83329a1datagen2026-10-12 12:01 UTC124
            Item::Extender => self.kit.extender = true,
8b8e83329a1datagen2026-10-12 12:01 UTC125
            Item::Ring => self.kit.ring = true,
8b8e83329a1datagen2026-10-12 12:01 UTC126
            Item::Supplement => self.stores.supplements += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC127
            Item::Cage => self.kit.cage = true,
8b8e83329a1datagen2026-10-12 12:01 UTC128
            Item::CageKey => self.kit.cage = false,
8b8e83329a1datagen2026-10-12 12:01 UTC129
            Item::Spreadsheet => self.kit.spreadsheet = true,
8b8e83329a1datagen2026-10-12 12:01 UTC130
            Item::TeapotSpout => self.kit.teapot_spout = true,
8b8e83329a1datagen2026-10-12 12:01 UTC131
            Item::EnergyDrink => self.stores.energy_drinks += 1,
8b8e83329a1datagen2026-10-12 12:01 UTC132
            Item::BabyOil => self.lubes.add(Lube::BabyOil),
8b8e83329a1datagen2026-10-12 12:01 UTC133
            Item::CoconutOil => self.lubes.add(Lube::CoconutOil),
8b8e83329a1datagen2026-10-12 12:01 UTC134
            Item::Lotion => self.lubes.add(Lube::Lotion),
8b8e83329a1datagen2026-10-12 12:01 UTC135
            Item::Vaseline => self.lubes.add(Lube::Vaseline),
8b8e83329a1datagen2026-10-12 12:01 UTC136
            Item::WarmTowel | Item::Pump => {}
8b8e83329a1datagen2026-10-12 12:01 UTC137
        }
8b8e83329a1datagen2026-10-12 12:01 UTC138
    }
8b8e83329a1datagen2026-10-12 12:01 UTC139
}