84 lines
2.4 KiB
Python
84 lines
2.4 KiB
Python
"""
|
|
Alternative animation for the flipdot recharge party
|
|
"""
|
|
# requires: python-fluepdot, python-dotenv
|
|
import os
|
|
from dotenv import load_dotenv
|
|
from fluepdot import Fluepdot, Mode
|
|
from time import sleep
|
|
|
|
battery = [
|
|
" XXXXXXXXXXXX XXXXXXXXXXX ",
|
|
"XX XX ",
|
|
"X X ",
|
|
"X X ",
|
|
"X XX",
|
|
"X XX",
|
|
"X X ",
|
|
"X X ",
|
|
"XX XX ",
|
|
" XXXXXXXXXXX XXXXXXXXXXXX "]
|
|
|
|
lightning = [" X ",
|
|
" XX ",
|
|
" XXX ",
|
|
" XXX ",
|
|
" XXXX ",
|
|
"XXXXXXXX "]
|
|
|
|
|
|
def get_lightning(level: int) -> str:
|
|
if level < 0:
|
|
level = 0
|
|
elif level > 12:
|
|
level = 12
|
|
|
|
rtn = "\n".rjust(19) + "\n".rjust(19)
|
|
|
|
for i in range(0, level):
|
|
line = lightning[i] if i < len(lightning) else lightning[len(lightning) - i - 1][::-1]
|
|
rtn = line.rjust(19) + "\n" + rtn
|
|
while rtn.count("\n") < 16:
|
|
rtn = "\n".rjust(19) + rtn
|
|
return rtn
|
|
|
|
|
|
def get_battery(level: int) -> str:
|
|
lightning = get_lightning(level).split("\n")[:-1]
|
|
|
|
rtn = ""
|
|
for ln in range(0, len(lightning)):
|
|
if ln < 3:
|
|
rtn += lightning[ln].ljust(30)
|
|
elif ln > 2 + len(battery):
|
|
rtn += lightning[ln].ljust(30)
|
|
else:
|
|
for cind in range(0, len(battery[0])):
|
|
try:
|
|
rtn += "X" if battery[ln - 3][cind] == "X" or lightning[ln][cind] == "X" else " "
|
|
except IndexError:
|
|
rtn += " "
|
|
rtn += "\n"
|
|
|
|
return rtn
|
|
|
|
|
|
if __name__ == "__main__":
|
|
load_dotenv()
|
|
hostname = os.getenv("DOTS_HOST")
|
|
fd = Fluepdot(f"http://{hostname}")
|
|
fd.set_mode(Mode.DIFFERENTIAL)
|
|
l, h = fd.get_size()
|
|
while True:
|
|
for i in range(0, len(lightning) * 2):
|
|
bat = get_battery(i).split("\n")[:-1]
|
|
bat = list(map(lambda x: x.rjust(l), bat))
|
|
bat = "\n".join(bat) + "\n"
|
|
fd.post_frame_raw(frame=bat)
|
|
sleep(.5)
|
|
for i in range(len(lightning) * 2, 0, -1):
|
|
bat = get_battery(i).split("\n")[:-1]
|
|
bat = list(map(lambda x: x.rjust(l), bat))
|
|
bat = "\n".join(bat) + "\n"
|
|
fd.post_frame_raw(frame=bat)
|
|
sleep(.5)
|