mirror of
https://github.com/ethanrusz/scouter.git
synced 2024-11-21 10:57:45 -05:00
120 lines
4 KiB
Python
120 lines
4 KiB
Python
import streamlit as st
|
|
from itertools import chain
|
|
|
|
|
|
class Moon:
|
|
def __init__(self, name, tier, inside_max_power, outside_max_power):
|
|
self.name = name
|
|
self.tier = tier
|
|
self.inside_max_power = inside_max_power
|
|
self.outside_max_power = outside_max_power
|
|
|
|
|
|
class Creature:
|
|
def __init__(self, name, nickname, power, max_spawns, hits_to_kill):
|
|
self.name = name
|
|
self.nickname = nickname
|
|
self.power = power
|
|
self.max_spawns = max_spawns
|
|
self.hits_to_kill = hits_to_kill
|
|
|
|
|
|
class Run:
|
|
def __init__(self, moon):
|
|
self.moon = moon
|
|
self.inside_power = moon.inside_max_power
|
|
self.outside_power = moon.outside_max_power
|
|
|
|
|
|
def main():
|
|
st.set_page_config('Lethal Company Scouter', '🛰️')
|
|
|
|
moons = [
|
|
# Tier 1
|
|
Moon('Experimentation', 1, 4, 8),
|
|
Moon('Assurance', 1, 6, 8),
|
|
Moon('Vow', 1, 7, 6),
|
|
# Tier 2
|
|
Moon('Offense', 2, 12, 12),
|
|
Moon('March', 2, 14, 12),
|
|
# Tier 3
|
|
Moon('Rend', 3, 10, 6),
|
|
Moon('Dine', 3, 15, 6),
|
|
Moon('Titan', 3, 18, 7),
|
|
]
|
|
|
|
outside_creatures = [
|
|
Creature('Baboon Hawk', None, 1, 15, 6),
|
|
Creature('Circuit Bees', None, 1, 6, None),
|
|
Creature('Eyeless Dog', None, 2, 8, 12),
|
|
Creature('Forest Keeper', 'Giant', 3, 3, None),
|
|
Creature('Earth Leviathan', 'Worm', 2, 3, None),
|
|
# Hybrid
|
|
Creature('Outside Ghost Girl ', None, 2, 1, None),
|
|
Creature('Outside Masked', None, 1, 10, 4),
|
|
]
|
|
|
|
inside_creatures = [
|
|
Creature('Bracken', 'Freddy Fazbear', 3, 1, 6),
|
|
Creature('Bunker Spider', None, 3, 1, 6),
|
|
Creature('Coil Head', None, 1, 5, None),
|
|
Creature('Hoarding Bug', 'Yippee Bug', 1, 8, 3),
|
|
Creature('Hygrodere', 'Goo', 1, 2, None),
|
|
Creature('Jester', None, 3, 1, None),
|
|
Creature('Nutcracker', None, 1, 10, 5),
|
|
Creature('Snare Flea', "Head. Bug.", 1, 4, 3),
|
|
Creature('Spore Lizard', None, 1, 2, None),
|
|
Creature('Thumper', None, 2, 4, 4),
|
|
# Hybrid
|
|
Creature('Inside Ghost Girl', None, 2, 1, None),
|
|
Creature('Inside Masked', None, 1, 10, 4),
|
|
]
|
|
|
|
st.markdown('# :red[Lethal Company] Scouter')
|
|
st.markdown(":rainbow[What does the scouter say about this moon's power level?]")
|
|
|
|
moon = st.selectbox('Moon', sorted(m.name for m in moons),
|
|
placeholder='Moon! Pick a moon!', help='Pick your current moon.')
|
|
|
|
run = Run(next(m for m in moons if m.name is moon))
|
|
if not st.session_state:
|
|
for creature in chain(outside_creatures, inside_creatures):
|
|
st.session_state[creature.name] = 0
|
|
|
|
st.markdown(f"## {run.moon.name} (Tier {run.moon.tier})")
|
|
column_1, column_2 = st.columns(2)
|
|
|
|
with column_1:
|
|
st.markdown('### Outside')
|
|
st.info(f"Maximum power: {run.moon.outside_max_power}")
|
|
|
|
for creature in outside_creatures:
|
|
hold = st.session_state[creature.name]
|
|
moon_max = min(creature.max_spawns, run.outside_power // creature.power)
|
|
if moon_max > 0:
|
|
st.slider(creature.name, 0, moon_max, key=creature.name, help=creature.nickname)
|
|
else:
|
|
st.slider(creature.name, 0, 1, key=creature.name, help=creature.nickname, disabled=True)
|
|
|
|
run.outside_power = run.outside_power - st.session_state[creature.name]
|
|
|
|
with column_2:
|
|
st.markdown('### Inside')
|
|
st.info(f"Maximum power: {run.moon.inside_max_power}")
|
|
|
|
for creature in inside_creatures:
|
|
moon_max = min(creature.max_spawns, run.inside_power // creature.power)
|
|
if moon_max > 0:
|
|
st.slider(creature.name, 0, moon_max, key=creature.name, help=creature.nickname)
|
|
else:
|
|
st.slider(creature.name, 0, 1, key=creature.name, help=creature.nickname, disabled=True)
|
|
|
|
run.inside_power = run.inside_power - st.session_state[creature.name]
|
|
|
|
|
|
# https://docs.streamlit.io/library/api-reference/session-state
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|