From a5467a244cf31ac207d76e1afa4a36457de624ee Mon Sep 17 00:00:00 2001 From: Astatin3 <77305074+Astatin3@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:00:14 -0600 Subject: [PATCH] Finish buttons, Add docs --- README.md | 26 +++++++++++++++++++++++++- main.py | 3 +-- src/buttonEditor.py | 29 +++++++++++++++++++++++++---- src/menu.py | 30 ------------------------------ src/render.py | 12 +++++++++--- 5 files changed, 60 insertions(+), 40 deletions(-) delete mode 100644 src/menu.py diff --git a/README.md b/README.md index 08c7ae7..6f2e73b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,26 @@ # autoPlanner - (WIP) An auto creation tool for Ridgebotics 2024 + +(WIP) An auto creation tool for Ridgebotics 2024 + +### Install +```shell +git clone https://github.com/astatin3/autoPlanner +cd autoPlanner +pip install -r requirements.txt +python3 ./main.py +``` +### Usage: + +##### "Path Editor" Tab: +- Click to add nodes +- Click on specific points to manipulate paths and nodes + +##### "Button editor" Tab: +- Click on specific frames on the timeline to change to that position +- When selected on a frame, the robot's position in that time should show up. +- Drag positional keyframes around to speed up and speed down the robot's travel between nodes +- While a frame is selected, Press the 'e' key to swap to button mode. +- In button mode select buttons on the driver and operator controllers. + +##### "Export" Tab: +- Click export, and save to a file \ No newline at end of file diff --git a/main.py b/main.py index fd64fb3..0dd6f72 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,7 @@ from sys import exit import numpy as np import src.render as render -import src.menu as menu + import src.pathEditor as pathEditor import src.buttonEditor as buttonEditor import src.export as export @@ -30,7 +30,6 @@ render = render.render(pg, screen, topBarHeight, bottomBarHeight) tabIndex = 0 tabs = [ - menu.menu(pg, render), pathEditor.pathEditor(render), buttonEditor.buttonEditor(render, pathEditor), export.export(pg, render) diff --git a/src/buttonEditor.py b/src/buttonEditor.py index ca5334e..67c4f5a 100644 --- a/src/buttonEditor.py +++ b/src/buttonEditor.py @@ -6,7 +6,7 @@ render = None pathEditor = None bottomBarRect = None -# leftSide = True +# leftSidee = True ogNodes = [] ogCtrlNodes = [] @@ -40,6 +40,11 @@ buttonPositions = { 'Dpad': ((549,619),220), + 'Dpad_Up': ((549,561),70), + 'Dpad_Down': ((549,677),70), + 'Dpad_Left': ((485,619),70), + 'Dpad_Right': ((607,619),70), + 'Menu': ((832,411),100), 'Windows': ((629,411),100), @@ -335,10 +340,10 @@ def toggleControllerButton(btnStr, controllerIndex): # Dpad Stuff elif frame['controllers'][controllerIndex][btnStr] == True: for btn in ['Dpad_Up', 'Dpad_Down', 'Dpad_Left', 'Dpad_Right']: - frame['controllers'][controllerIndex][btn] == False + frame['controllers'][controllerIndex][btn] = False else: for btn in ['Dpad_Up', 'Dpad_Down', 'Dpad_Left', 'Dpad_Right']: - frame['controllers'][controllerIndex][btn] == False + frame['controllers'][controllerIndex][btn] = False frame['controllers'][controllerIndex][btnStr] = True @@ -375,6 +380,22 @@ def renderXboxControllers(): render.image(render.invert(buttonImages[btn]), offsetControllerButton(btn)) else: render.image(buttonImages[btn], offsetControllerButton(btn)) + + if btns['Dpad_Up']: + render.image(buttonImages['Dpad_Up'], offsetControllerButton('Dpad')) + elif btns['Dpad_Down']: + render.image(buttonImages['Dpad_Down'], offsetControllerButton('Dpad')) + elif btns['Dpad_Left']: + render.image(buttonImages['Dpad_Left'], offsetControllerButton('Dpad')) + elif btns['Dpad_Right']: + render.image(buttonImages['Dpad_Right'], offsetControllerButton('Dpad')) + else: + render.image(buttonImages['Dpad'], offsetControllerButton('Dpad')) + + + # for btn in ['Dpad_Up','Dpad_Down','Dpad_Left','Dpad_Right']: + # if + # render.drawrect((255,255,255), offsetControllerButton(btn)) @@ -390,7 +411,7 @@ def controllerClick(pos): rect2 = ((pos[0]-(size/2), pos[1]-(size/2), size, size)) return (rect[0]+(rect2[0])*offsetSize,rect[1]+(rect2[1])*offsetSize,rect2[2]*offsetSize,rect2[2]*offsetSize) - for btn in ['A','B','X','Y','Menu','Windows','LB','RB','LT','RT','Left_Stick','Right_Stick']: + for btn in ['A','B','X','Y','Menu','Windows','LB','RB','LT','RT','Left_Stick','Right_Stick','Dpad_Up','Dpad_Down','Dpad_Left','Dpad_Right']: if render.isInRect(pos, offsetControllerButton(btn)): toggleControllerButton(btn, i) diff --git a/src/menu.py b/src/menu.py deleted file mode 100644 index ea21017..0000000 --- a/src/menu.py +++ /dev/null @@ -1,30 +0,0 @@ -pg = None -render = None - -class menu: - name = "Menu" - - def __init__(self, tmppg, tmprender): - global pg - pg = tmppg - global render - render = tmprender - - def mouseDown(self, pos): - pass - - def mouseUp(self, pos): - pass - - def mouseMove(self, pos): - pass - - def doubleClick(self, pos): - pass - - def keyDown(self, key): - pass - - def load(self): - render.clear() - pg.display.update() \ No newline at end of file diff --git a/src/render.py b/src/render.py index 5ae235a..4a55334 100644 --- a/src/render.py +++ b/src/render.py @@ -1,5 +1,6 @@ import math import os +import sys from pygame.locals import * import numpy as np @@ -15,7 +16,7 @@ nodeSquareWidth = 3 nodeTickLength = 5 -def resource_path(relative_path): +def image_path(relative_path): try: base_path = sys._MEIPASS except Exception: @@ -46,11 +47,16 @@ class render(): self.elements = [] + + + def invert(self, img): inv = self.pg.Surface(img.get_rect().size, self.pg.SRCALPHA) - inv.fill((255,255,255,255)) + inv.fill((255,255,255)) inv.blit(img, (0,0), None, BLEND_RGB_SUB) return inv + + def line(self, color, pos1, pos2, width): self.pg.draw.line(self.screen, color, pos1, pos2, round(width/self.offsetSize)) @@ -92,7 +98,7 @@ class render(): def loadImg(self, path): - return self.pg.image.load(resource_path(path)).convert_alpha() + return self.pg.image.load(image_path(path)).convert_alpha()