mirror of
https://github.com/Astatin3/autoPlanner.git
synced 2026-06-08 23:58:00 -06:00
Finish buttons, Add docs
This commit is contained in:
@@ -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
|
||||||
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|
||||||
@@ -376,6 +381,22 @@ def renderXboxControllers():
|
|||||||
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))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def controllerClick(pos):
|
def controllerClick(pos):
|
||||||
@@ -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
@@ -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
@@ -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,12 +47,17 @@ 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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user