Finish buttons, Add docs

This commit is contained in:
Astatin3
2024-03-18 18:00:14 -06:00
parent bab306310a
commit a5467a244c
5 changed files with 60 additions and 40 deletions
+25 -1
View File
@@ -1,2 +1,26 @@
# autoPlanner # 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
+1 -2
View File
@@ -7,7 +7,7 @@ from sys import exit
import numpy as np import numpy as np
import src.render as render import src.render as render
import src.menu as menu
import src.pathEditor as pathEditor import src.pathEditor as pathEditor
import src.buttonEditor as buttonEditor import src.buttonEditor as buttonEditor
import src.export as export import src.export as export
@@ -30,7 +30,6 @@ render = render.render(pg, screen, topBarHeight, bottomBarHeight)
tabIndex = 0 tabIndex = 0
tabs = [ tabs = [
menu.menu(pg, render),
pathEditor.pathEditor(render), pathEditor.pathEditor(render),
buttonEditor.buttonEditor(render, pathEditor), buttonEditor.buttonEditor(render, pathEditor),
export.export(pg, render) export.export(pg, render)
+25 -4
View File
@@ -6,7 +6,7 @@ render = None
pathEditor = None pathEditor = None
bottomBarRect = None bottomBarRect = None
# leftSide = True # leftSidee = True
ogNodes = [] ogNodes = []
ogCtrlNodes = [] ogCtrlNodes = []
@@ -40,6 +40,11 @@ buttonPositions = {
'Dpad': ((549,619),220), '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), 'Menu': ((832,411),100),
'Windows': ((629,411),100), 'Windows': ((629,411),100),
@@ -335,10 +340,10 @@ def toggleControllerButton(btnStr, controllerIndex):
# Dpad Stuff # Dpad Stuff
elif frame['controllers'][controllerIndex][btnStr] == True: elif frame['controllers'][controllerIndex][btnStr] == True:
for btn in ['Dpad_Up', 'Dpad_Down', 'Dpad_Left', 'Dpad_Right']: for btn in ['Dpad_Up', 'Dpad_Down', 'Dpad_Left', 'Dpad_Right']:
frame['controllers'][controllerIndex][btn] == False frame['controllers'][controllerIndex][btn] = False
else: else:
for btn in ['Dpad_Up', 'Dpad_Down', 'Dpad_Left', 'Dpad_Right']: 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 frame['controllers'][controllerIndex][btnStr] = True
@@ -375,6 +380,22 @@ def renderXboxControllers():
render.image(render.invert(buttonImages[btn]), offsetControllerButton(btn)) render.image(render.invert(buttonImages[btn]), offsetControllerButton(btn))
else: else:
render.image(buttonImages[btn], offsetControllerButton(btn)) 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)) 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) 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)): if render.isInRect(pos, offsetControllerButton(btn)):
toggleControllerButton(btn, i) toggleControllerButton(btn, i)
-30
View File
@@ -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()
+9 -3
View File
@@ -1,5 +1,6 @@
import math import math
import os import os
import sys
from pygame.locals import * from pygame.locals import *
import numpy as np import numpy as np
@@ -15,7 +16,7 @@ nodeSquareWidth = 3
nodeTickLength = 5 nodeTickLength = 5
def resource_path(relative_path): def image_path(relative_path):
try: try:
base_path = sys._MEIPASS base_path = sys._MEIPASS
except Exception: except Exception:
@@ -46,11 +47,16 @@ class render():
self.elements = [] self.elements = []
def invert(self, img): def invert(self, img):
inv = self.pg.Surface(img.get_rect().size, self.pg.SRCALPHA) 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) inv.blit(img, (0,0), None, BLEND_RGB_SUB)
return inv return inv
def line(self, color, pos1, pos2, width): def line(self, color, pos1, pos2, width):
self.pg.draw.line(self.screen, color, pos1, pos2, round(width/self.offsetSize)) self.pg.draw.line(self.screen, color, pos1, pos2, round(width/self.offsetSize))
@@ -92,7 +98,7 @@ class render():
def loadImg(self, path): def loadImg(self, path):
return self.pg.image.load(resource_path(path)).convert_alpha() return self.pg.image.load(image_path(path)).convert_alpha()