Initial commit: Bcut-style Taiko Editor

This commit is contained in:
2026-01-01 14:35:14 +08:00
commit 930fa1f4c6
8 changed files with 1297 additions and 0 deletions

81
main.py Normal file
View File

@@ -0,0 +1,81 @@
import pygame
import sys
import tkinter as tk
from tkinter import filedialog
from editor_core import EditorState
from ui import UI
def main():
# Initialize Tkinter for file dialog
try:
root = tk.Tk()
root.withdraw()
# Ensure dialog comes to front
root.attributes('-topmost', True)
print("Please select an OGG file to start editing...")
file_path = filedialog.askopenfilename(
title="Select Audio File",
filetypes=[("Audio Files", "*.ogg"), ("TJA Files", "*.tja"), ("All Files", "*.*")]
)
root.destroy()
except KeyboardInterrupt:
print("\nOperation cancelled by user.")
return
except Exception as e:
print(f"Error opening file dialog: {e}")
return
if not file_path:
print("No file selected. Exiting.")
return
# Initialize Pygame
pygame.init()
pygame.mixer.init()
SCREEN_WIDTH = 1024
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Taiko Editor (Python)")
clock = pygame.time.Clock()
# Initialize Editor
editor = EditorState()
editor.load_file(file_path)
ui = UI(editor, SCREEN_WIDTH, SCREEN_HEIGHT)
running = True
while running:
dt = clock.tick(60) # ms since last frame
# Event Handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
editor.toggle_play()
elif event.key == pygame.K_s and (pygame.key.get_mods() & pygame.KMOD_CTRL):
editor.save()
print("Saved!")
elif event.key == pygame.K_DELETE:
editor.remove_selected()
ui.handle_event(event)
# Update
editor.update(dt)
# Draw
ui.draw(screen)
pygame.display.flip()
pygame.quit()
sys.exit()
if __name__ == "__main__":
main()