Logic works, now need to tie it to ydotool
This commit is contained in:
46
patapon.py
46
patapon.py
@@ -1,12 +1,11 @@
|
|||||||
#! /usr/bin/env python3
|
#! /usr/bin/env python3
|
||||||
import argparse
|
import argparse
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
|
||||||
def ydotool(key):
|
def ydotool(key):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def playsong(song):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# A list of all possible songs, expressed as their cardinal directions
|
# A list of all possible songs, expressed as their cardinal directions
|
||||||
# We'll map these to keystrokes later
|
# We'll map these to keystrokes later
|
||||||
@@ -31,11 +30,50 @@ def main():
|
|||||||
# Step Back Strut
|
# Step Back Strut
|
||||||
"U-L-U-L-"
|
"U-L-U-L-"
|
||||||
]
|
]
|
||||||
|
# A mapping of characters in our encoded songs to keys to send to ydotool
|
||||||
|
# These should be the default bindings for PPSSPP
|
||||||
|
keymapping = {
|
||||||
|
"U": "s",
|
||||||
|
"D": "z",
|
||||||
|
"L": "a",
|
||||||
|
"R": "x"
|
||||||
|
}
|
||||||
|
drummapping = {
|
||||||
|
"U": '\033[32mCHAKA\033[0m',
|
||||||
|
"D": '\033[33mDON\033[0m',
|
||||||
|
"L": '\033[31mPATA\033[0m',
|
||||||
|
"R": '\033[34mPON\033[0m'
|
||||||
|
}
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="Play a sequence of Patapon commands on repeat forever. Makes no attempt to sync to the game -- that's your job"
|
description="Play a sequence of Patapon commands on repeat forever"
|
||||||
)
|
)
|
||||||
parser.add_argument('song',default="R-R-L-R-",nargs="+",choices=songs,help="The song to play. Defaults to Aria of Attack. When expressing a song, use eighth notes, dashes, and cardinal directions to designate the drums. For example, party would be \"L-R-D-U-\", and djinn would be \"D-DD-DD-\"")
|
parser.add_argument('song',default="R-R-L-R-",nargs="+",choices=songs,help="The song to play. Defaults to Aria of Attack. When expressing a song, use eighth notes, dashes, and cardinal directions to designate the drums. For example, party would be \"L-R-D-U-\", and djinn would be \"D-DD-DD-\"")
|
||||||
parser.add_argument('--bpm',type=int,default=120,help="The BPM of Patapon. Change if you're running the game at a higher speed")
|
parser.add_argument('--bpm',type=int,default=120,help="The BPM of Patapon. Change if you're running the game at a higher speed")
|
||||||
|
parser.add_argument('--iterations',type=int,default=10000,help="Number of iterations of the sequence to run. Defaults to 10,000")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Schedule out our beat interval
|
||||||
|
beat_interval = 60 / (args.bpm * 2)
|
||||||
|
print(f"Beat interval: {beat_interval}")
|
||||||
|
|
||||||
|
# Set up the environment
|
||||||
|
sequence='--------' + '--------'.join(args.song)
|
||||||
|
print(f"Song sequence: {sequence}")
|
||||||
|
remaining_iterations = args.iterations
|
||||||
|
lastbeat = 0
|
||||||
|
|
||||||
|
# Wait for user confirmation
|
||||||
|
input("Press enter on-beat to sync up with Patapon...")
|
||||||
|
synctime = time.perf_counter()
|
||||||
|
|
||||||
|
# Play da notes
|
||||||
|
while remaining_iterations > 0:
|
||||||
|
for i, key in enumerate(sequence):
|
||||||
|
while time.perf_counter() < synctime + lastbeat:
|
||||||
|
pass
|
||||||
|
lastbeat += beat_interval
|
||||||
|
ydotool(key)
|
||||||
|
print(drummapping.get(key, '-'))
|
||||||
|
remaining_iterations -= 1
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
Reference in New Issue
Block a user