FaDaQ

TraversalMaykr_Py_GUI

Feb 25th, 2022 (edited)
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 66.58 KB | None | 0 0
  1. import math
  2. import chevron
  3. import configparser
  4. from PyQt5 import QtCore, QtGui, QtWidgets
  5.  
  6. # Read config file to get operating mode, output files, templates, and other parameters
  7. config = configparser.ConfigParser()
  8. config.read("config.ini")
  9.  
  10. settings = config['Settings']
  11. gameMode = int(settings['gameMode'])
  12. clearSetting = int(settings['clearSetting'])
  13. loopGeneration = bool(int(settings['loopGeneration']))
  14. printToConsole = bool(int(settings['printToConsole']))
  15.  
  16. output1 = config['Output Files']['output1']
  17. output2 = config['Output Files']['output2']
  18.  
  19. templates = config['Templates']
  20. EternalTraversalTemplate = templates['EternalTraversal']
  21. DETraversalChainTemplate = templates['EternalTraversalChainA']
  22. DETraversalChainMidTemplate = templates['EternalTraversalChainB']
  23.  
  24. DEpmNormalViewHeight = float(config['Misc.']['Eternalpm_normalViewHeight'])
  25. D16pmNormalViewHeight = float(config['Misc.']['2016pm_normalViewHeight'])
  26.  
  27. tempAnimList = []
  28.  
  29. DEMonsterNameDictionary = {
  30.     1: "archvile",
  31.     2: "blood_maykr",
  32.     3: "carcass",
  33.     4: "doom_hunter",
  34.     5: "dread_knight",
  35.     6: "gargoyle",
  36.     7: "marauder",
  37.     8: "prowler",
  38.     9: "revenant",
  39.     10: "tyrant",
  40.     11: "whiplash",
  41.     12: "maykr_drone",
  42.     13: "mecha_zombie",
  43.     14: "arachnatron",
  44.     15: "wolf",
  45.     16: "zombie",
  46.     17: "baron",
  47.     18: "hell_knight",
  48.     19: "imp",
  49.     20: "mancubus",
  50.     21: "pinky",
  51.     22: "soldier"
  52. }
  53.  
  54. DEMonsterTypeDictionary = {
  55.     1: "TRAVERSALMONSTERTYPE_ARCHVILE",
  56.     2: "TRAVERSALMONSTERTYPE_BLOOD_ANGEL",
  57.     3: "TRAVERSALMONSTERTYPE_CARCASS",
  58.     4: "TRAVERSALMONSTERTYPE_DOOM_HUNTER",
  59.     5: "TRAVERSALMONSTERTYPE_DREADKNIGHT",
  60.     6: "TRAVERSALMONSTERTYPE_GARGOYLE",
  61.     7: "TRAVERSALMONSTERTYPE_MARAUDER",
  62.     8: "TRAVERSALMONSTERTYPE_PROWLER",
  63.     9: "TRAVERSALMONSTERTYPE_REVENANT",
  64.     10: "TRAVERSALMONSTERTYPE_TYRANT",
  65.     11: "TRAVERSALMONSTERTYPE_WHIPLASH",
  66.     12: "TRAVERSALMONSTERTYPE_ZOMBIE_MAYKR",
  67.     13: "TRAVERSALMONSTERTYPE_ZOMBIE_T3",
  68.     14: "TRAVERSALMONSTERTYPE_ARACHNATRON",
  69.     15: "TRAVERSALMONSTERTYPE_MARAUDER_WOLF",
  70.     16: "TRAVERSALMONSTERTYPE_ZOMBIE",
  71.     17: "TRAVERSALMONSTERTYPE_BARON",
  72.     18: "TRAVERSALMONSTERTYPE_HELLKNIGHT",
  73.     19: "TRAVERSALMONSTERTYPE_IMP",
  74.     20: "TRAVERSALMONSTERTYPE_MANCUBUS",
  75.     21: "TRAVERSALMONSTERTYPE_PINKY",
  76.     22: "TRAVERSALMONSTERTYPE_HELLIFIED_SOLDIER"
  77. }
  78.  
  79. DEMonsterPathDictionary = {
  80.     1: "archvile/traversal",
  81.     2: "bloodangel/traversal",
  82.     3: "carcass/traversal",
  83.     4: "doomhunter/traversal",
  84.     5: "dreadknight/traversal",
  85.     6: "gargoyle/traversal",
  86.     7: "marauder/traversals",
  87.     8: "prowler/traversal",
  88.     9: "revenant/traversals",
  89.     10: "tyrant/traversal",
  90.     11: "whiplash/traversal",
  91.     12: "zombie_maykr/traversal",
  92.     13: "zombie_tier_3/traversal",
  93.     14: "arachnotron/traversal",
  94.     15: "marauder_wolf/traversals",
  95.     16: "zombie_tier_1/traversal",
  96.     17: "baron/traversal",
  97.     18: "hellknight/traversal",
  98.     19: "imp/traversal",
  99.     20: "mancubus_fire/traversal",
  100.     21: "pinky/traversal",
  101.     22: "soldier_blaster/traversal"
  102. }
  103.  
  104. # Read text files to get anim sets
  105. with open(r"Animations\Eternal\animationSet1.txt", 'r') as f:
  106.     animationSet1 = [line.rstrip() for line in f]
  107. with open(r"Animations\Eternal\animationSet2.txt", 'r') as f:
  108.     animationSet2 = [line.rstrip() for line in f]
  109. with open(r"Animations\Eternal\animationSet3.txt", 'r') as f:
  110.     animationSet3 = [line.rstrip() for line in f]
  111. with open(r"Animations\Eternal\animationSet4.txt", 'r') as f:
  112.     animationSet4 = [line.rstrip() for line in f]
  113. with open(r"Animations\Eternal\animationSet5.txt", 'r') as f:
  114.     animationSet5 = [line.rstrip() for line in f]
  115.  
  116. DEAnimDictionary = {
  117.     1: animationSet1,
  118.     2: animationSet2,
  119.     3: animationSet3,
  120.     4: animationSet4,
  121.     5: animationSet5
  122. }
  123.  
  124.  
  125. # DE: get info needed for idInfoTraversal via console input, then pass it on to be generated
  126. def consoleInputDEInfoTraversal(
  127. ):
  128.     entityNum = int(input("\nSet entity numbering start value: "));  # Set number to append at end of entity name
  129.  
  130.     while True:
  131.         # Get start and end coords
  132.         startCoords = stringToList(input("Starting coords: "), 'float')
  133.         endCoords = stringToList(input("Destination coords: "), 'float')
  134.  
  135.         monsterIndices = list(map(int, input("Monster types: ").split()))
  136.         animIndex = int(input("Animation type: "))
  137.         reciprocalTraversal = yesNoToBool(input("Generate reciprocal traversal? (Y/N): "))
  138.  
  139.         generateDEInfoTraversal(entityNum, startCoords, endCoords, monsterIndices, animIndex, reciprocalTraversal)
  140.  
  141.         entityNum += 1;  # increment by 1 after every generated entity
  142.  
  143.         if loopGeneration == False:
  144.             break
  145.  
  146.  
  147. # DE: Generate generateDEInfoTraversal
  148. def generateDEInfoTraversal(
  149.         entityNum,
  150.         startCoords,
  151.         endCoords,
  152.         monsterIndices,
  153.         animIndex,
  154.         reciprocalTraversal
  155. ):
  156.     entityNumStr = str(entityNum).zfill(5)  # Leading zeros padding
  157.  
  158.     for i in range(0, len(monsterIndices)):
  159.         monsterIndex = monsterIndices[i]
  160.  
  161.         # Determine which animation set to use, based on the monster type
  162.         if monsterIndex >= 1 and monsterIndex <= 13:  # everything else
  163.             animSetIndex = 1
  164.         elif monsterIndex >= 17 and monsterIndex <= 22:  # baron, hell knight, imp, mancubus, pinky, soldier
  165.             animSetIndex = 2
  166.         elif monsterIndex == 14:  # arachnotron
  167.             animSetIndex = 3
  168.         elif monsterIndex == 15:  # wolf
  169.             animSetIndex = 4
  170.         elif monsterIndex == 16:  # zombie
  171.             animSetIndex = 5
  172.  
  173.         startZ = startCoords[2] - DEpmNormalViewHeight
  174.         endZ = endCoords[2] - DEpmNormalViewHeight
  175.         animation = DEAnimDictionary[animSetIndex][animIndex - 1]
  176.         monsterName = DEMonsterNameDictionary[monsterIndex]
  177.         monsterPath = DEMonsterPathDictionary[monsterIndex]
  178.         monsterType = DEMonsterTypeDictionary[monsterIndex]
  179.  
  180.         # args to pass into the template
  181.         args = {
  182.             'entityNum': entityNumStr,
  183.             'startX': startCoords[0],
  184.             'startY': startCoords[1],
  185.             'startZ': startZ,
  186.             'endX': endCoords[0] - startCoords[0],
  187.             'endY': endCoords[1] - startCoords[1],
  188.             'endZ': endZ - startZ,
  189.             'monsterName': monsterName,
  190.             'monsterPath': monsterPath,
  191.             'animation': animation,
  192.             'monsterType': monsterType
  193.         }
  194.         reciprocalArgs = {
  195.             'entityNum': entityNumStr + "_r",
  196.             'startX': endCoords[0],
  197.             'startY': endCoords[1],
  198.             'startZ': endZ,
  199.             'endX': startCoords[0] - endCoords[0],
  200.             'endY': startCoords[1] - endCoords[1],
  201.             'endZ': startZ - endZ,
  202.             'monsterName': monsterName,
  203.             'monsterPath': monsterPath,
  204.             'animation': animReverser(animation),
  205.             'monsterType': monsterType
  206.         }
  207.  
  208.         # Open templates and pass through args, then write generated entity to file
  209.         with open(EternalTraversalTemplate, 'r') as entityTemplate:
  210.             generatedEntity1 = chevron.render(entityTemplate, args)
  211.             printEntityToConsole(generatedEntity1)  # print generated entity
  212.             entityTemplate.close()
  213.         writeStuffToFile(generatedEntity1, output1)
  214.  
  215.         # Do the same for reciprocal traversal, if option was chosen
  216.         if reciprocalTraversal:
  217.             with open(EternalTraversalTemplate, 'r') as entityTemplate:
  218.                 generatedEntity2 = chevron.render(entityTemplate, reciprocalArgs)
  219.                 entityTemplate.close()
  220.             printEntityToConsole(generatedEntity2)  # print generated entity
  221.             writeStuffToFile(generatedEntity2, output1)
  222.  
  223.  
  224. # Get info needed for Traversal Chain via console
  225. def consoleInputDETraversalChain(
  226. ):
  227.     isOnCeiling = input("\nIs the midpoint on the ceiling? (Y/N): ")
  228.     entityNum = int(input("Set entity numbering start value: "));  # Set number to append at end of entity name
  229.  
  230.     while True:
  231.         midCoords = []
  232.         traversalAnims = []
  233.  
  234.         startCoords = stringToList(input("Start coords: "), 'float')
  235.         traversalAnims.append(int(input("Animation to next point: ")))
  236.  
  237.         midPoints = int((input("Number of mid points: ")))
  238.         for i in range(0, midPoints):
  239.             midCoords.append(stringToList(input(f"Mid point {int(i + 1)} coords: "), 'float'))
  240.             traversalAnims.append(int(input("Animation to next point: ")))
  241.  
  242.         endCoords = stringToList(input("End coords: "), 'float')
  243.  
  244.         monsterIndices = stringToList(input("Monster types: "), 'int')
  245.         reciprocalTraversal = yesNoToBool(input("Generate reciprocal traversal? (Y/N): "))
  246.  
  247.         print(traversalAnims)
  248.  
  249.         generateDETraversalChain(entityNum, startCoords, midCoords, endCoords, isOnCeiling, midPoints, monsterIndices,
  250.                                  traversalAnims, reciprocalTraversal)
  251.  
  252.         entityNum += 1
  253.  
  254.         if loopGeneration == False:
  255.             break
  256.  
  257.  
  258. # DE: Generate traversal chains
  259. def generateDETraversalChain(
  260.         entityNum,
  261.         startCoords,
  262.         midCoords,
  263.         endCoords,
  264.         isOnCeiling,
  265.         midPoints,
  266.         monsterIndices,
  267.         traversalAnims,
  268.         reciprocalTraversal
  269. ):
  270.     entityNumStr = str(entityNum).zfill(3)
  271.  
  272.     if yesNoToBool(isOnCeiling):
  273.         ceilingCompensation = 0.5;
  274.     else:
  275.         ceilingCompensation = 0 - DEpmNormalViewHeight
  276.  
  277.     for i in range(0, len(monsterIndices)):
  278.         monsterIndex = monsterIndices[i]
  279.  
  280.         # Determine which animation set to use, based on the monster type
  281.         if monsterIndex >= 1 and monsterIndex <= 13:  # everything else
  282.             animSetIndex = 1
  283.         elif monsterIndex >= 17 and monsterIndex <= 22:  # baron, hell knight, imp, mancubus, pinky, soldier
  284.             animSetIndex = 2
  285.         elif monsterIndex == 14:  # arachnotron
  286.             animSetIndex = 3
  287.         elif monsterIndex == 15:  # wolf
  288.             animSetIndex = 4
  289.         elif monsterIndex == 16:  # zombie
  290.             animSetIndex = 5
  291.  
  292.         monsterName = DEMonsterNameDictionary[monsterIndex]
  293.         monsterPath = DEMonsterPathDictionary[monsterIndex]
  294.         monsterType = DEMonsterTypeDictionary[monsterIndex]
  295.  
  296.         # args to pass into the template for the start and end points
  297.         startEndArgs = {
  298.             'entityNum': entityNumStr,
  299.             'startX': startCoords[0],
  300.             'startY': startCoords[1],
  301.             'startZ': startCoords[2] - DEpmNormalViewHeight,
  302.             'endX': endCoords[0],
  303.             'endY': endCoords[1],
  304.             'endZ': endCoords[2] - DEpmNormalViewHeight,
  305.             'monsterName': monsterName,
  306.             'monsterType': monsterType,
  307.             'animWeb': monsterPathTruncater(monsterPath),
  308.             'monsterPathStart': monsterPath,
  309.             'animation': DEAnimDictionary[animSetIndex][traversalAnims[0] - 1]
  310.             # traversalAnims[0] is the start anim; the contents of DEAnimDictionary start from 0
  311.         }
  312.  
  313.         # Open templates and pass through args for star and end points, then write to file
  314.         with open(DETraversalChainTemplate, 'r') as entityTemplate:
  315.             entityTemplateOutput = chevron.render(entityTemplate, startEndArgs)
  316.             printEntityToConsole(entityTemplateOutput)  # print generated entity
  317.         writeStuffToFile(entityTemplateOutput, output2)
  318.  
  319.         for i in range(0, midPoints):
  320.             if i == midPoints - 1:
  321.                 nextPoint = f"mod_traversal_point_{monsterName}_end_{entityNumStr}"
  322.             else:
  323.                 nextPoint = f"mod_traversal_chain_{monsterName}_mid_{intToChar(i + 2)}_{entityNumStr}"
  324.  
  325.             # args to pass into the template for the current mid point
  326.             midArgs = {
  327.                 'entityNum': entityNumStr,
  328.                 'midCoordX': midCoords[i][0],
  329.                 'midCoordY': midCoords[i][1],
  330.                 'midCoordZ': midCoords[i][2] + ceilingCompensation,
  331.                 'midLetter': intToChar(i + 1),
  332.                 'monsterName': monsterName,
  333.                 'monsterType': monsterType,
  334.                 'animWeb': monsterPathTruncater(monsterPath),
  335.                 'nextPoint': nextPoint,
  336.                 'monsterPathMid': monsterPath,
  337.                 'midAnimation': DEAnimDictionary[animSetIndex][traversalAnims[i + 1] - 1]
  338.                 # add 1 as traversalAnims[0] is the start anim
  339.             }
  340.  
  341.             with open(DETraversalChainMidTemplate, 'r') as entityTemplate:
  342.                 entityTemplateOutput = chevron.render(entityTemplate, midArgs)
  343.                 printEntityToConsole(entityTemplateOutput)  # print generated entity
  344.             writeStuffToFile(entityTemplateOutput, output2)
  345.  
  346.         # create reciprocal traversal chain if option was selected
  347.         if reciprocalTraversal:
  348.             startEndArgsReverse = {
  349.                 'entityNum': entityNumStr + "_r",
  350.                 'startX': endCoords[0],
  351.                 'startY': endCoords[1],
  352.                 'startZ': endCoords[2] - DEpmNormalViewHeight,
  353.                 'endX': startCoords[0],
  354.                 'endY': startCoords[1],
  355.                 'endZ': startCoords[2] - DEpmNormalViewHeight,
  356.                 'monsterName': monsterName,
  357.                 'monsterType': monsterType,
  358.                 'animWeb': monsterPathTruncater(monsterPath),
  359.                 'monsterPathStart': monsterPath,
  360.                 'animation': animReverser(DEAnimDictionary[animSetIndex][traversalAnims[midPoints] - 1])
  361.             }
  362.  
  363.             with open(DETraversalChainTemplate, 'r') as entityTemplate:
  364.                 entityTemplateOutput = chevron.render(entityTemplate, startEndArgsReverse)
  365.                 printEntityToConsole(entityTemplateOutput)  # print generated entity
  366.             writeStuffToFile(entityTemplateOutput, output2)
  367.  
  368.             midLetterReverse = int(1)
  369.  
  370.             for i in range(midPoints, 0, -1):
  371.                 if i == 1:
  372.                     nextPointReverse = f"mod_traversal_point_{monsterName}_end_{entityNumStr}_r"
  373.                 else:
  374.                     nextPointReverse = f"mod_traversal_chain_{monsterName}_mid_{intToChar(midLetterReverse + 1)}_{entityNumStr}_r"
  375.  
  376.                 midArgsReverse = {
  377.                     'entityNum': entityNumStr + "_r",
  378.                     'midCoordX': midCoords[i - 1][0],
  379.                     'midCoordY': midCoords[i - 1][1],
  380.                     'midCoordZ': midCoords[i - 1][2] + ceilingCompensation,
  381.                     'midLetter': intToChar(midLetterReverse),
  382.                     'monsterName': monsterName,
  383.                     'monsterType': monsterType,
  384.                     'animWeb': monsterPathTruncater(monsterPath),
  385.                     'nextPoint': nextPointReverse,
  386.                     'monsterPathMid': monsterPath,
  387.                     'midAnimation': animReverser(DEAnimDictionary[animSetIndex][traversalAnims[i - 1] - 1])
  388.                 }
  389.  
  390.                 with open(DETraversalChainMidTemplate, 'r') as entityTemplate:
  391.                     entityTemplateOutput = chevron.render(entityTemplate, midArgsReverse)
  392.                     printEntityToConsole(entityTemplateOutput)  # print generated entity
  393.                 writeStuffToFile(entityTemplateOutput, output2)
  394.  
  395.                 midLetterReverse += 1
  396.  
  397.  
  398. # Removes /traversal or /traversals from the given string
  399. def monsterPathTruncater(
  400.         monsterPath
  401. ):
  402.     if "/traversal" in monsterPath:
  403.         return monsterPath.replace("/traversal", "")
  404.     elif "/traversals" in monsterPath:
  405.         return monsterPath.replace("/traversals", "")
  406.  
  407.  
  408. def intToChar(
  409.         intInput
  410. ):
  411.     return chr(ord('`') + intInput)
  412.  
  413.  
  414. # pitch yaw roll to spawnOrientation matrix from Zandy
  415. def sin_cos(deg):
  416.     rad = math.radians(float(deg))
  417.     return math.sin(rad), math.cos(rad)
  418.  
  419.  
  420. def angle_to_mat3(
  421.         x,
  422.         y,
  423.         z
  424. ):  # yaw, pitch, roll
  425.  
  426.     sy, cy = sin_cos(x)
  427.     sp, cp = sin_cos(y)
  428.     sr, cr = sin_cos(z)
  429.  
  430.     return [
  431.         cp * cy,
  432.         cp * sy,
  433.         -sp,
  434.         sr * sp * cy + cr * -sy,
  435.         sr * sp * sy + cr * cy,
  436.         sr * cp,
  437.         cr * sp * cy + -sr * sy,
  438.         cr * sp * sy + -sr * cy,
  439.         cr * cp,
  440.     ]
  441.  
  442.  
  443. # Function to round the given value to the nearest specified interval
  444. def roundToInterval(
  445.         inputValue,
  446.         interval
  447. ):
  448.     return round(inputValue / interval) * interval
  449.  
  450.  
  451. # Check if the given animation is up or down, then return the reverse if applicable
  452. def animReverser(
  453.         animString
  454. ):
  455.     if "up" in animString:
  456.         return animString.replace("up", "down")
  457.     elif "down" in animString:
  458.         return animString.replace("down", "up")
  459.     else:
  460.         return animString
  461.  
  462.  
  463. # Write generated entities to file
  464. def writeStuffToFile(
  465.         inputItem,
  466.         outputFile
  467. ):
  468.     # Open output txt and write spawn targets to file
  469.     with open(outputFile, 'a') as output_File:
  470.         output_File.write("\n" + inputItem)
  471.  
  472.  
  473. # Clears the specified output file
  474. def clearOutput(
  475. ):
  476.     with open(output1, 'w') as outFile:
  477.         outFile.write("")
  478.     with open(output2, 'w') as outFile:
  479.         outFile.write("")
  480.  
  481.  
  482. def clearOutputDEInfo(
  483. ):
  484.     with open(output1, 'w') as outFile:
  485.         outFile.write("")
  486.  
  487.  
  488. def clearOutputDEChain(
  489. ):
  490.     with open(output2, 'w') as outFile:
  491.         outFile.write("")
  492.  
  493.  
  494. # Dedicated function for printing generated entities to console
  495. def printEntityToConsole(
  496.         printThisItem
  497. ):
  498.     if printToConsole == True:
  499.         print(printThisItem)
  500.  
  501.  
  502. # Convert 'y' or 'n' input to a bool
  503. def yesNoToBool(
  504.         inputString
  505. ):
  506.     if inputString == 'Y' or inputString == 'y':
  507.         return True
  508.     elif inputString == 'N' or inputString == 'n':
  509.         return False
  510.  
  511.  
  512. def stringToList(
  513.         stringInput,
  514.         listType
  515. ):
  516.     types = {
  517.         "float": float,
  518.         "int": int
  519.     }
  520.  
  521.     return list(map(types[listType], stringInput.split()))
  522.  
  523.  
  524. # Main function for console input
  525. def mainConsole(
  526. ):
  527.     if clearSetting == 0:
  528.         # Ask user if they want to clear the output file, then clear it if the option was selected
  529.         manualClear = input("\nClear the output files from previous sessions? (Y/N): ");
  530.         if manualClear == 'y' or manualClear == 'Y':
  531.             clearOutput()
  532.     elif clearSetting == 2:
  533.         clearOutput()
  534.  
  535.     consoleInputDETraversalChain()
  536.  
  537.  
  538. # Main Window
  539. class Ui_MainWindow(object):
  540.     def setupUi(self, MainWindow):
  541.         MainWindow.setObjectName("MainWindow")
  542.         MainWindow.resize(741, 712)
  543.         icon = QtGui.QIcon()
  544.         icon.addPixmap(QtGui.QPixmap("praetor_dexterity_on_btP_icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  545.         MainWindow.setWindowIcon(icon)
  546.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  547.         self.centralwidget.setObjectName("centralwidget")
  548.         self.tabWidgetTraversalEntityTypes = QtWidgets.QTabWidget(self.centralwidget)
  549.         self.tabWidgetTraversalEntityTypes.setGeometry(QtCore.QRect(0, 0, 741, 711))
  550.         self.tabWidgetTraversalEntityTypes.setLayoutDirection(QtCore.Qt.LeftToRight)
  551.         self.tabWidgetTraversalEntityTypes.setObjectName("tabWidgetTraversalEntityTypes")
  552.         self.tab = QtWidgets.QWidget()
  553.         self.tab.setObjectName("tab")
  554.         self.inputEndCoords = QtWidgets.QLineEdit(self.tab)
  555.         self.inputEndCoords.setGeometry(QtCore.QRect(30, 130, 321, 31))
  556.         self.inputEndCoords.setObjectName("inputEndCoords")
  557.         self.buttonClearCoords = QtWidgets.QPushButton(self.tab)
  558.         self.buttonClearCoords.setGeometry(QtCore.QRect(30, 520, 321, 61))
  559.         self.buttonClearCoords.setObjectName("buttonClearCoords")
  560.         self.labelAnimTypeHeader = QtWidgets.QLabel(self.tab)
  561.         self.labelAnimTypeHeader.setGeometry(QtCore.QRect(50, 50, 161, 31))
  562.         self.labelAnimTypeHeader.setLineWidth(0)
  563.         self.labelAnimTypeHeader.setTextFormat(QtCore.Qt.MarkdownText)
  564.         self.labelAnimTypeHeader.setObjectName("labelAnimTypeHeader")
  565.         self.selectReciprocalTraversal = QtWidgets.QCheckBox(self.tab)
  566.         self.selectReciprocalTraversal.setGeometry(QtCore.QRect(480, 630, 151, 31))
  567.         self.selectReciprocalTraversal.setObjectName("selectReciprocalTraversal")
  568.         self.buttonGenerateTraversal = QtWidgets.QPushButton(self.tab)
  569.         self.buttonGenerateTraversal.setGeometry(QtCore.QRect(490, 540, 131, 81))
  570.         self.buttonGenerateTraversal.setObjectName("buttonGenerateTraversal")
  571.         self.groupBoxMonsterSelect = QtWidgets.QGroupBox(self.tab)
  572.         self.groupBoxMonsterSelect.setGeometry(QtCore.QRect(390, 80, 311, 441))
  573.         self.groupBoxMonsterSelect.setTitle("")
  574.         self.groupBoxMonsterSelect.setObjectName("groupBoxMonsterSelect")
  575.         self.demonSelect_15 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  576.         self.demonSelect_15.setGeometry(QtCore.QRect(220, 130, 81, 31))
  577.         self.demonSelect_15.setObjectName("demonSelect_15")
  578.         self.labelMonsterType_Heavy = QtWidgets.QLabel(self.groupBoxMonsterSelect)
  579.         self.labelMonsterType_Heavy.setGeometry(QtCore.QRect(120, 10, 41, 31))
  580.         self.labelMonsterType_Heavy.setLineWidth(0)
  581.         self.labelMonsterType_Heavy.setTextFormat(QtCore.Qt.MarkdownText)
  582.         self.labelMonsterType_Heavy.setObjectName("labelMonsterType_Heavy")
  583.         self.demonSelect_18 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  584.         self.demonSelect_18.setGeometry(QtCore.QRect(120, 110, 81, 31))
  585.         self.demonSelect_18.setObjectName("demonSelect_18")
  586.         self.demonSelect_14 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  587.         self.demonSelect_14.setGeometry(QtCore.QRect(120, 30, 81, 31))
  588.         self.demonSelect_14.setObjectName("demonSelect_14")
  589.         self.demonSelect_17 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  590.         self.demonSelect_17.setGeometry(QtCore.QRect(220, 50, 81, 31))
  591.         self.demonSelect_17.setObjectName("demonSelect_17")
  592.         self.demonSelect_12 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  593.         self.demonSelect_12.setGeometry(QtCore.QRect(10, 70, 81, 31))
  594.         self.demonSelect_12.setObjectName("demonSelect_12")
  595.         self.demonSelect_7 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  596.         self.demonSelect_7.setGeometry(QtCore.QRect(220, 90, 81, 31))
  597.         self.demonSelect_7.setObjectName("demonSelect_7")
  598.         self.demonSelect_19 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  599.         self.demonSelect_19.setGeometry(QtCore.QRect(10, 50, 81, 31))
  600.         self.demonSelect_19.setObjectName("demonSelect_19")
  601.         self.demonSelect_9 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  602.         self.demonSelect_9.setGeometry(QtCore.QRect(120, 190, 81, 31))
  603.         self.demonSelect_9.setObjectName("demonSelect_9")
  604.         self.demonSelect_3 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  605.         self.demonSelect_3.setGeometry(QtCore.QRect(120, 70, 81, 31))
  606.         self.demonSelect_3.setObjectName("demonSelect_3")
  607.         self.labelMonsterType_SHeavy = QtWidgets.QLabel(self.groupBoxMonsterSelect)
  608.         self.labelMonsterType_SHeavy.setGeometry(QtCore.QRect(220, 10, 71, 31))
  609.         self.labelMonsterType_SHeavy.setLineWidth(0)
  610.         self.labelMonsterType_SHeavy.setTextFormat(QtCore.Qt.MarkdownText)
  611.         self.labelMonsterType_SHeavy.setObjectName("labelMonsterType_SHeavy")
  612.         self.demonSelect_10 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  613.         self.demonSelect_10.setGeometry(QtCore.QRect(220, 110, 81, 31))
  614.         self.demonSelect_10.setObjectName("demonSelect_10")
  615.         self.demonSelect_5 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  616.         self.demonSelect_5.setGeometry(QtCore.QRect(120, 90, 81, 31))
  617.         self.demonSelect_5.setObjectName("demonSelect_5")
  618.         self.demonSelect_21 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  619.         self.demonSelect_21.setGeometry(QtCore.QRect(120, 150, 81, 31))
  620.         self.demonSelect_21.setObjectName("demonSelect_21")
  621.         self.demonSelect_16 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  622.         self.demonSelect_16.setGeometry(QtCore.QRect(10, 130, 81, 31))
  623.         self.demonSelect_16.setObjectName("demonSelect_16")
  624.         self.demonSelect_13 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  625.         self.demonSelect_13.setGeometry(QtCore.QRect(10, 90, 91, 31))
  626.         self.demonSelect_13.setObjectName("demonSelect_13")
  627.         self.demonSelect_8 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  628.         self.demonSelect_8.setGeometry(QtCore.QRect(120, 170, 81, 31))
  629.         self.demonSelect_8.setObjectName("demonSelect_8")
  630.         self.demonSelect_22 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  631.         self.demonSelect_22.setGeometry(QtCore.QRect(10, 110, 81, 31))
  632.         self.demonSelect_22.setObjectName("demonSelect_22")
  633.         self.demonSelect_2 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  634.         self.demonSelect_2.setGeometry(QtCore.QRect(120, 50, 81, 31))
  635.         self.demonSelect_2.setObjectName("demonSelect_2")
  636.         self.demonSelect_1 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  637.         self.demonSelect_1.setGeometry(QtCore.QRect(220, 30, 81, 31))
  638.         self.demonSelect_1.setObjectName("demonSelect_1")
  639.         self.labelMonsterType_Fodder = QtWidgets.QLabel(self.groupBoxMonsterSelect)
  640.         self.labelMonsterType_Fodder.setGeometry(QtCore.QRect(10, 10, 41, 31))
  641.         self.labelMonsterType_Fodder.setLineWidth(0)
  642.         self.labelMonsterType_Fodder.setTextFormat(QtCore.Qt.MarkdownText)
  643.         self.labelMonsterType_Fodder.setObjectName("labelMonsterType_Fodder")
  644.         self.demonSelect_20 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  645.         self.demonSelect_20.setGeometry(QtCore.QRect(120, 130, 81, 31))
  646.         self.demonSelect_20.setObjectName("demonSelect_20")
  647.         self.demonSelect_6 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  648.         self.demonSelect_6.setGeometry(QtCore.QRect(10, 30, 81, 31))
  649.         self.demonSelect_6.setObjectName("demonSelect_6")
  650.         self.demonSelect_4 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  651.         self.demonSelect_4.setGeometry(QtCore.QRect(220, 70, 81, 31))
  652.         self.demonSelect_4.setObjectName("demonSelect_4")
  653.         self.demonSelect_11 = QtWidgets.QCheckBox(self.groupBoxMonsterSelect)
  654.         self.demonSelect_11.setGeometry(QtCore.QRect(120, 210, 81, 31))
  655.         self.demonSelect_11.setObjectName("demonSelect_11")
  656.         self.labelMonsterTypeHeader = QtWidgets.QLabel(self.groupBoxMonsterSelect)
  657.         self.labelMonsterTypeHeader.setGeometry(QtCore.QRect(10, -10, 151, 31))
  658.         self.labelMonsterTypeHeader.setLineWidth(0)
  659.         self.labelMonsterTypeHeader.setTextFormat(QtCore.Qt.MarkdownText)
  660.         self.labelMonsterTypeHeader.setObjectName("labelMonsterTypeHeader")
  661.         self.labelMonsterTypePresetInfo = QtWidgets.QLabel(self.groupBoxMonsterSelect)
  662.         self.labelMonsterTypePresetInfo.setGeometry(QtCore.QRect(10, 250, 171, 31))
  663.         self.labelMonsterTypePresetInfo.setLineWidth(0)
  664.         self.labelMonsterTypePresetInfo.setTextFormat(QtCore.Qt.MarkdownText)
  665.         self.labelMonsterTypePresetInfo.setObjectName("labelMonsterTypePresetInfo")
  666.         self.radioButtonPresetAInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  667.         self.radioButtonPresetAInfo.setGeometry(QtCore.QRect(20, 360, 261, 17))
  668.         self.radioButtonPresetAInfo.setObjectName("radioButtonPresetAInfo")
  669.         self.radioButtonPresetSuperHeavyInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  670.         self.radioButtonPresetSuperHeavyInfo.setGeometry(QtCore.QRect(20, 340, 82, 17))
  671.         self.radioButtonPresetSuperHeavyInfo.setObjectName("radioButtonPresetSuperHeavyInfo")
  672.         self.radioButtonPresetFodderInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  673.         self.radioButtonPresetFodderInfo.setGeometry(QtCore.QRect(20, 300, 82, 17))
  674.         self.radioButtonPresetFodderInfo.setObjectName("radioButtonPresetFodderInfo")
  675.         self.radioButtonPresetCInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  676.         self.radioButtonPresetCInfo.setGeometry(QtCore.QRect(20, 420, 261, 17))
  677.         self.radioButtonPresetCInfo.setObjectName("radioButtonPresetCInfo")
  678.         self.radioButtonPresetHeavyInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  679.         self.radioButtonPresetHeavyInfo.setGeometry(QtCore.QRect(20, 320, 82, 17))
  680.         self.radioButtonPresetHeavyInfo.setObjectName("radioButtonPresetHeavyInfo")
  681.         self.radioButtonPresetNoneInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  682.         self.radioButtonPresetNoneInfo.setGeometry(QtCore.QRect(20, 280, 82, 17))
  683.         self.radioButtonPresetNoneInfo.setObjectName("radioButtonPresetNoneInfo")
  684.         self.radioButtonPresetBInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  685.         self.radioButtonPresetBInfo.setGeometry(QtCore.QRect(20, 400, 261, 17))
  686.         self.radioButtonPresetBInfo.setObjectName("radioButtonPresetBInfo")
  687.         self.radioButtonPresetDInfo = QtWidgets.QRadioButton(self.groupBoxMonsterSelect)
  688.         self.radioButtonPresetDInfo.setGeometry(QtCore.QRect(20, 380, 261, 17))
  689.         self.radioButtonPresetDInfo.setObjectName("radioButtonPresetDInfo")
  690.         self.comboBoxAnimSelect = QtWidgets.QComboBox(self.tab)
  691.         self.comboBoxAnimSelect.setGeometry(QtCore.QRect(50, 80, 191, 22))
  692.         self.comboBoxAnimSelect.setMaxVisibleItems(45)
  693.         self.comboBoxAnimSelect.setObjectName("comboBoxAnimSelect")
  694.         self.inputStartCoords = QtWidgets.QLineEdit(self.tab)
  695.         self.inputStartCoords.setGeometry(QtCore.QRect(30, 20, 321, 31))
  696.         self.inputStartCoords.setObjectName("inputStartCoords")
  697.         self.inputEntityNum = QtWidgets.QLineEdit(self.tab)
  698.         self.inputEntityNum.setGeometry(QtCore.QRect(390, 20, 121, 31))
  699.         self.inputEntityNum.setObjectName("inputEntityNum")
  700.         self.buttonClearOutput = QtWidgets.QPushButton(self.tab)
  701.         self.buttonClearOutput.setGeometry(QtCore.QRect(30, 600, 321, 61))
  702.         self.buttonClearOutput.setObjectName("buttonClearOutput")
  703.         self.groupBoxTraversalDelta = QtWidgets.QGroupBox(self.tab)
  704.         self.groupBoxTraversalDelta.setGeometry(QtCore.QRect(50, 180, 131, 111))
  705.         self.groupBoxTraversalDelta.setObjectName("groupBoxTraversalDelta")
  706.         self.labelHorDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  707.         self.labelHorDelta.setGeometry(QtCore.QRect(10, 70, 61, 16))
  708.         self.labelHorDelta.setObjectName("labelHorDelta")
  709.         self.labelVerDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  710.         self.labelVerDelta.setGeometry(QtCore.QRect(10, 90, 41, 16))
  711.         self.labelVerDelta.setObjectName("labelVerDelta")
  712.         self.labelXDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  713.         self.labelXDelta.setGeometry(QtCore.QRect(10, 20, 31, 16))
  714.         self.labelXDelta.setObjectName("labelXDelta")
  715.         self.labelYDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  716.         self.labelYDelta.setGeometry(QtCore.QRect(10, 40, 31, 16))
  717.         self.labelYDelta.setObjectName("labelYDelta")
  718.         self.labelValXDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  719.         self.labelValXDelta.setGeometry(QtCore.QRect(80, 20, 41, 16))
  720.         self.labelValXDelta.setLayoutDirection(QtCore.Qt.LeftToRight)
  721.         self.labelValXDelta.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
  722.         self.labelValXDelta.setObjectName("labelValXDelta")
  723.         self.labelValYDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  724.         self.labelValYDelta.setGeometry(QtCore.QRect(80, 40, 41, 16))
  725.         self.labelValYDelta.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
  726.         self.labelValYDelta.setObjectName("labelValYDelta")
  727.         self.labelValHorDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  728.         self.labelValHorDelta.setGeometry(QtCore.QRect(80, 70, 41, 16))
  729.         self.labelValHorDelta.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
  730.         self.labelValHorDelta.setObjectName("labelValHorDelta")
  731.         self.labelValVerDelta = QtWidgets.QLabel(self.groupBoxTraversalDelta)
  732.         self.labelValVerDelta.setGeometry(QtCore.QRect(80, 90, 41, 16))
  733.         self.labelValVerDelta.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
  734.         self.labelValVerDelta.setObjectName("labelValVerDelta")
  735.         self.tabWidgetTraversalEntityTypes.addTab(self.tab, "")
  736.         self.tab_2 = QtWidgets.QWidget()
  737.         self.tab_2.setObjectName("tab_2")
  738.         self.buttonClearCoordsAndAnims = QtWidgets.QPushButton(self.tab_2)
  739.         self.buttonClearCoordsAndAnims.setGeometry(QtCore.QRect(30, 520, 321, 61))
  740.         self.buttonClearCoordsAndAnims.setObjectName("buttonClearCoordsAndAnims")
  741.         self.inputEndCoordsChain = QtWidgets.QLineEdit(self.tab_2)
  742.         self.inputEndCoordsChain.setGeometry(QtCore.QRect(30, 460, 321, 31))
  743.         self.inputEndCoordsChain.setObjectName("inputEndCoordsChain")
  744.         self.buttonClearOutputChain = QtWidgets.QPushButton(self.tab_2)
  745.         self.buttonClearOutputChain.setGeometry(QtCore.QRect(30, 600, 321, 61))
  746.         self.buttonClearOutputChain.setObjectName("buttonClearOutputChain")
  747.         self.groupBoxMonsterSelect_3 = QtWidgets.QGroupBox(self.tab_2)
  748.         self.groupBoxMonsterSelect_3.setGeometry(QtCore.QRect(390, 80, 311, 441))
  749.         self.groupBoxMonsterSelect_3.setTitle("")
  750.         self.groupBoxMonsterSelect_3.setObjectName("groupBoxMonsterSelect_3")
  751.         self.demonSelect_15_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  752.         self.demonSelect_15_Chain.setGeometry(QtCore.QRect(220, 130, 81, 31))
  753.         self.demonSelect_15_Chain.setObjectName("demonSelect_15_Chain")
  754.         self.labelMonsterType_Heavy_4 = QtWidgets.QLabel(self.groupBoxMonsterSelect_3)
  755.         self.labelMonsterType_Heavy_4.setGeometry(QtCore.QRect(120, 10, 41, 31))
  756.         self.labelMonsterType_Heavy_4.setLineWidth(0)
  757.         self.labelMonsterType_Heavy_4.setTextFormat(QtCore.Qt.MarkdownText)
  758.         self.labelMonsterType_Heavy_4.setObjectName("labelMonsterType_Heavy_4")
  759.         self.demonSelect_18_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  760.         self.demonSelect_18_Chain.setGeometry(QtCore.QRect(120, 110, 81, 31))
  761.         self.demonSelect_18_Chain.setObjectName("demonSelect_18_Chain")
  762.         self.demonSelect_14_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  763.         self.demonSelect_14_Chain.setGeometry(QtCore.QRect(120, 30, 81, 31))
  764.         self.demonSelect_14_Chain.setObjectName("demonSelect_14_Chain")
  765.         self.demonSelect_17_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  766.         self.demonSelect_17_Chain.setGeometry(QtCore.QRect(220, 50, 81, 31))
  767.         self.demonSelect_17_Chain.setObjectName("demonSelect_17_Chain")
  768.         self.demonSelect_12_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  769.         self.demonSelect_12_Chain.setGeometry(QtCore.QRect(10, 70, 81, 31))
  770.         self.demonSelect_12_Chain.setObjectName("demonSelect_12_Chain")
  771.         self.demonSelect_7_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  772.         self.demonSelect_7_Chain.setGeometry(QtCore.QRect(220, 90, 81, 31))
  773.         self.demonSelect_7_Chain.setObjectName("demonSelect_7_Chain")
  774.         self.demonSelect_19_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  775.         self.demonSelect_19_Chain.setGeometry(QtCore.QRect(10, 50, 81, 31))
  776.         self.demonSelect_19_Chain.setObjectName("demonSelect_19_Chain")
  777.         self.demonSelect_9_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  778.         self.demonSelect_9_Chain.setGeometry(QtCore.QRect(120, 190, 81, 31))
  779.         self.demonSelect_9_Chain.setObjectName("demonSelect_9_Chain")
  780.         self.demonSelect_3_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  781.         self.demonSelect_3_Chain.setGeometry(QtCore.QRect(120, 70, 81, 31))
  782.         self.demonSelect_3_Chain.setObjectName("demonSelect_3_Chain")
  783.         self.labelMonsterType_SHeavy_4 = QtWidgets.QLabel(self.groupBoxMonsterSelect_3)
  784.         self.labelMonsterType_SHeavy_4.setGeometry(QtCore.QRect(220, 10, 71, 31))
  785.         self.labelMonsterType_SHeavy_4.setLineWidth(0)
  786.         self.labelMonsterType_SHeavy_4.setTextFormat(QtCore.Qt.MarkdownText)
  787.         self.labelMonsterType_SHeavy_4.setObjectName("labelMonsterType_SHeavy_4")
  788.         self.demonSelect_10_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  789.         self.demonSelect_10_Chain.setGeometry(QtCore.QRect(220, 110, 81, 31))
  790.         self.demonSelect_10_Chain.setObjectName("demonSelect_10_Chain")
  791.         self.demonSelect_5_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  792.         self.demonSelect_5_Chain.setGeometry(QtCore.QRect(120, 90, 81, 31))
  793.         self.demonSelect_5_Chain.setObjectName("demonSelect_5_Chain")
  794.         self.demonSelect_21_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  795.         self.demonSelect_21_Chain.setGeometry(QtCore.QRect(120, 150, 81, 31))
  796.         self.demonSelect_21_Chain.setObjectName("demonSelect_21_Chain")
  797.         self.demonSelect_16_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  798.         self.demonSelect_16_Chain.setGeometry(QtCore.QRect(10, 130, 81, 31))
  799.         self.demonSelect_16_Chain.setObjectName("demonSelect_16_Chain")
  800.         self.demonSelect_13_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  801.         self.demonSelect_13_Chain.setGeometry(QtCore.QRect(10, 90, 91, 31))
  802.         self.demonSelect_13_Chain.setObjectName("demonSelect_13_Chain")
  803.         self.demonSelect_8_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  804.         self.demonSelect_8_Chain.setGeometry(QtCore.QRect(120, 170, 81, 31))
  805.         self.demonSelect_8_Chain.setObjectName("demonSelect_8_Chain")
  806.         self.demonSelect_22_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  807.         self.demonSelect_22_Chain.setGeometry(QtCore.QRect(10, 110, 81, 31))
  808.         self.demonSelect_22_Chain.setObjectName("demonSelect_22_Chain")
  809.         self.demonSelect_2_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  810.         self.demonSelect_2_Chain.setGeometry(QtCore.QRect(120, 50, 81, 31))
  811.         self.demonSelect_2_Chain.setObjectName("demonSelect_2_Chain")
  812.         self.demonSelect_1_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  813.         self.demonSelect_1_Chain.setGeometry(QtCore.QRect(220, 30, 81, 31))
  814.         self.demonSelect_1_Chain.setObjectName("demonSelect_1_Chain")
  815.         self.labelMonsterType_Fodder_4 = QtWidgets.QLabel(self.groupBoxMonsterSelect_3)
  816.         self.labelMonsterType_Fodder_4.setGeometry(QtCore.QRect(10, 10, 41, 31))
  817.         self.labelMonsterType_Fodder_4.setLineWidth(0)
  818.         self.labelMonsterType_Fodder_4.setTextFormat(QtCore.Qt.MarkdownText)
  819.         self.labelMonsterType_Fodder_4.setObjectName("labelMonsterType_Fodder_4")
  820.         self.demonSelect_20_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  821.         self.demonSelect_20_Chain.setGeometry(QtCore.QRect(120, 130, 81, 31))
  822.         self.demonSelect_20_Chain.setObjectName("demonSelect_20_Chain")
  823.         self.demonSelect_6_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  824.         self.demonSelect_6_Chain.setGeometry(QtCore.QRect(10, 30, 81, 31))
  825.         self.demonSelect_6_Chain.setObjectName("demonSelect_6_Chain")
  826.         self.demonSelect_4_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  827.         self.demonSelect_4_Chain.setGeometry(QtCore.QRect(220, 70, 81, 31))
  828.         self.demonSelect_4_Chain.setObjectName("demonSelect_4_Chain")
  829.         self.demonSelect_11_Chain = QtWidgets.QCheckBox(self.groupBoxMonsterSelect_3)
  830.         self.demonSelect_11_Chain.setGeometry(QtCore.QRect(120, 210, 81, 31))
  831.         self.demonSelect_11_Chain.setObjectName("demonSelect_11_Chain")
  832.         self.labelMonsterTypeHeader_3 = QtWidgets.QLabel(self.groupBoxMonsterSelect_3)
  833.         self.labelMonsterTypeHeader_3.setGeometry(QtCore.QRect(10, -10, 151, 31))
  834.         self.labelMonsterTypeHeader_3.setLineWidth(0)
  835.         self.labelMonsterTypeHeader_3.setTextFormat(QtCore.Qt.MarkdownText)
  836.         self.labelMonsterTypeHeader_3.setObjectName("labelMonsterTypeHeader_3")
  837.         self.labelMonsterTypePresetChain = QtWidgets.QLabel(self.groupBoxMonsterSelect_3)
  838.         self.labelMonsterTypePresetChain.setGeometry(QtCore.QRect(10, 250, 171, 31))
  839.         self.labelMonsterTypePresetChain.setLineWidth(0)
  840.         self.labelMonsterTypePresetChain.setTextFormat(QtCore.Qt.MarkdownText)
  841.         self.labelMonsterTypePresetChain.setObjectName("labelMonsterTypePresetChain")
  842.         self.radioButtonPresetFodderChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  843.         self.radioButtonPresetFodderChain.setGeometry(QtCore.QRect(20, 300, 82, 17))
  844.         self.radioButtonPresetFodderChain.setObjectName("radioButtonPresetFodderChain")
  845.         self.radioButtonPresetHeavyChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  846.         self.radioButtonPresetHeavyChain.setGeometry(QtCore.QRect(20, 320, 82, 17))
  847.         self.radioButtonPresetHeavyChain.setObjectName("radioButtonPresetHeavyChain")
  848.         self.radioButtonPresetSuperHeavyChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  849.         self.radioButtonPresetSuperHeavyChain.setGeometry(QtCore.QRect(20, 340, 82, 17))
  850.         self.radioButtonPresetSuperHeavyChain.setObjectName("radioButtonPresetSuperHeavyChain")
  851.         self.radioButtonPresetNoneChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  852.         self.radioButtonPresetNoneChain.setGeometry(QtCore.QRect(20, 280, 82, 17))
  853.         self.radioButtonPresetNoneChain.setObjectName("radioButtonPresetNoneChain")
  854.         self.radioButtonPresetAChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  855.         self.radioButtonPresetAChain.setGeometry(QtCore.QRect(20, 360, 261, 17))
  856.         self.radioButtonPresetAChain.setObjectName("radioButtonPresetAChain")
  857.         self.radioButtonPresetBChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  858.         self.radioButtonPresetBChain.setGeometry(QtCore.QRect(20, 400, 261, 17))
  859.         self.radioButtonPresetBChain.setObjectName("radioButtonPresetBChain")
  860.         self.radioButtonPresetCChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  861.         self.radioButtonPresetCChain.setGeometry(QtCore.QRect(20, 420, 261, 17))
  862.         self.radioButtonPresetCChain.setObjectName("radioButtonPresetCChain")
  863.         self.radioButtonPresetDChain = QtWidgets.QRadioButton(self.groupBoxMonsterSelect_3)
  864.         self.radioButtonPresetDChain.setGeometry(QtCore.QRect(20, 380, 261, 17))
  865.         self.radioButtonPresetDChain.setObjectName("radioButtonPresetDChain")
  866.         self.inputStartCoordsChain = QtWidgets.QLineEdit(self.tab_2)
  867.         self.inputStartCoordsChain.setGeometry(QtCore.QRect(30, 20, 321, 31))
  868.         self.inputStartCoordsChain.setObjectName("inputStartCoordsChain")
  869.         self.buttonGenerateTraversalChain = QtWidgets.QPushButton(self.tab_2)
  870.         self.buttonGenerateTraversalChain.setGeometry(QtCore.QRect(490, 540, 131, 81))
  871.         self.buttonGenerateTraversalChain.setObjectName("buttonGenerateTraversalChain")
  872.         self.comboBoxAnimSelectStartChain = QtWidgets.QComboBox(self.tab_2)
  873.         self.comboBoxAnimSelectStartChain.setGeometry(QtCore.QRect(50, 80, 191, 22))
  874.         self.comboBoxAnimSelectStartChain.setMaxVisibleItems(45)
  875.         self.comboBoxAnimSelectStartChain.setPlaceholderText("")
  876.         self.comboBoxAnimSelectStartChain.setObjectName("comboBoxAnimSelectStartChain")
  877.         self.selectReciprocalTraversalChain = QtWidgets.QCheckBox(self.tab_2)
  878.         self.selectReciprocalTraversalChain.setGeometry(QtCore.QRect(470, 630, 181, 31))
  879.         self.selectReciprocalTraversalChain.setObjectName("selectReciprocalTraversalChain")
  880.         self.inputEntityNumChain = QtWidgets.QLineEdit(self.tab_2)
  881.         self.inputEntityNumChain.setGeometry(QtCore.QRect(390, 20, 121, 31))
  882.         self.inputEntityNumChain.setObjectName("inputEntityNumChain")
  883.         self.inputMidCoordsChain = QtWidgets.QLineEdit(self.tab_2)
  884.         self.inputMidCoordsChain.setGeometry(QtCore.QRect(30, 130, 321, 31))
  885.         self.inputMidCoordsChain.setText("")
  886.         self.inputMidCoordsChain.setObjectName("inputMidCoordsChain")
  887.         self.labelStartAnimSelect = QtWidgets.QLabel(self.tab_2)
  888.         self.labelStartAnimSelect.setGeometry(QtCore.QRect(50, 50, 161, 31))
  889.         self.labelStartAnimSelect.setObjectName("labelStartAnimSelect")
  890.         self.labelMidAnimSelect = QtWidgets.QLabel(self.tab_2)
  891.         self.labelMidAnimSelect.setGeometry(QtCore.QRect(50, 160, 221, 31))
  892.         self.labelMidAnimSelect.setObjectName("labelMidAnimSelect")
  893.         self.comboBoxAnimSelectStartChain_2 = QtWidgets.QComboBox(self.tab_2)
  894.         self.comboBoxAnimSelectStartChain_2.setGeometry(QtCore.QRect(50, 190, 191, 22))
  895.         self.comboBoxAnimSelectStartChain_2.setMaxVisibleItems(45)
  896.         self.comboBoxAnimSelectStartChain_2.setPlaceholderText("")
  897.         self.comboBoxAnimSelectStartChain_2.setObjectName("comboBoxAnimSelectStartChain_2")
  898.         self.pushButtonAddMidpoint = QtWidgets.QPushButton(self.tab_2)
  899.         self.pushButtonAddMidpoint.setGeometry(QtCore.QRect(280, 170, 71, 61))
  900.         self.pushButtonAddMidpoint.setObjectName("pushButtonAddMidpoint")
  901.         self.labelCurrentMidPoints = QtWidgets.QLabel(self.tab_2)
  902.         self.labelCurrentMidPoints.setGeometry(QtCore.QRect(50, 210, 91, 31))
  903.         self.labelCurrentMidPoints.setObjectName("labelCurrentMidPoints")
  904.         self.listWidgetMidpoints = QtWidgets.QListWidget(self.tab_2)
  905.         self.listWidgetMidpoints.setGeometry(QtCore.QRect(50, 240, 161, 192))
  906.         self.listWidgetMidpoints.setObjectName("listWidgetMidpoints")
  907.         self.listWidgetMidAnims = QtWidgets.QListWidget(self.tab_2)
  908.         self.listWidgetMidAnims.setGeometry(QtCore.QRect(220, 240, 131, 192))
  909.         self.listWidgetMidAnims.setObjectName("listWidgetMidAnims")
  910.         self.tabWidgetTraversalEntityTypes.addTab(self.tab_2, "")
  911.         MainWindow.setCentralWidget(self.centralwidget)
  912.         self.statusbar = QtWidgets.QStatusBar(MainWindow)
  913.         self.statusbar.setObjectName("statusbar")
  914.         MainWindow.setStatusBar(self.statusbar)
  915.  
  916.         # For DE Info Traversal
  917.         self.radioButtonPresetNoneInfo.setChecked(True)
  918.         self.comboBoxAnimSelect.addItems(DEAnimDictionary[1])
  919.         self.buttonClearOutput.clicked.connect(clearOutputDEInfo)
  920.         self.buttonClearCoords.clicked.connect(self.clearCoordsDEInfo)
  921.         self.buttonGenerateTraversal.clicked.connect(self.getGUIInputsDEInfoTraversal)
  922.  
  923.         self.inputStartCoords.textChanged.connect(self.displayDeltaValues)
  924.         self.inputEndCoords.textChanged.connect(self.displayDeltaValues)
  925.  
  926.         # For DE Traversal Chain
  927.         self.radioButtonPresetNoneChain.setChecked(True)
  928.         self.comboBoxAnimSelectStartChain.addItems(DEAnimDictionary[1])
  929.         self.comboBoxAnimSelectStartChain_2.addItems(DEAnimDictionary[1])
  930.         self.buttonClearOutputChain.clicked.connect(clearOutputDEChain)
  931.         self.buttonClearCoordsAndAnims.clicked.connect(self.clearCoordsDEChain)
  932.         self.pushButtonAddMidpoint.clicked.connect(self.addMidPointToList)
  933.         self.buttonGenerateTraversalChain.clicked.connect(self.getGUIInputsDETraversalChain)
  934.  
  935.         self.retranslateUi(MainWindow)
  936.         self.tabWidgetTraversalEntityTypes.setCurrentIndex(0)
  937.         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  938.  
  939.     def retranslateUi(self, MainWindow):
  940.         _translate = QtCore.QCoreApplication.translate
  941.         MainWindow.setWindowTitle(_translate("MainWindow", "TraversalMaykr-Py-GUI v0.1"))
  942.         self.inputEndCoords.setPlaceholderText(_translate("MainWindow", "Destination Coordiantes"))
  943.         self.buttonClearCoords.setText(_translate("MainWindow", "Clear Coordinates"))
  944.         self.labelAnimTypeHeader.setText(_translate("MainWindow", "Select animation to Destination"))
  945.         self.selectReciprocalTraversal.setText(_translate("MainWindow", "Create reciprocal traversal"))
  946.         self.buttonGenerateTraversal.setText(_translate("MainWindow", "Generate Traversals"))
  947.         self.demonSelect_15.setText(_translate("MainWindow", "Wolf"))
  948.         self.labelMonsterType_Heavy.setText(_translate("MainWindow", "Heavy"))
  949.         self.demonSelect_18.setText(_translate("MainWindow", "Hell Knight"))
  950.         self.demonSelect_14.setText(_translate("MainWindow", "Arachnotron"))
  951.         self.demonSelect_17.setText(_translate("MainWindow", "Baron of Hell"))
  952.         self.demonSelect_12.setText(_translate("MainWindow", "Maykr Drone"))
  953.         self.demonSelect_7.setText(_translate("MainWindow", "Marauder"))
  954.         self.demonSelect_19.setText(_translate("MainWindow", "Imp"))
  955.         self.demonSelect_9.setText(_translate("MainWindow", "Revenant"))
  956.         self.demonSelect_3.setText(_translate("MainWindow", "Carcass"))
  957.         self.labelMonsterType_SHeavy.setText(_translate("MainWindow", "Super Heavy"))
  958.         self.demonSelect_10.setText(_translate("MainWindow", "Tyrant"))
  959.         self.demonSelect_5.setText(_translate("MainWindow", "Dread Knight"))
  960.         self.demonSelect_21.setText(_translate("MainWindow", "Pinky"))
  961.         self.demonSelect_16.setText(_translate("MainWindow", "Zombie"))
  962.         self.demonSelect_13.setText(_translate("MainWindow", "Mecha Zombie"))
  963.         self.demonSelect_8.setText(_translate("MainWindow", "Prowler"))
  964.         self.demonSelect_22.setText(_translate("MainWindow", "Soldier"))
  965.         self.demonSelect_2.setText(_translate("MainWindow", "Blood Maykr"))
  966.         self.demonSelect_1.setText(_translate("MainWindow", "Archvile"))
  967.         self.labelMonsterType_Fodder.setText(_translate("MainWindow", "Fodder"))
  968.         self.demonSelect_20.setText(_translate("MainWindow", "Mancubus"))
  969.         self.demonSelect_6.setText(_translate("MainWindow", "Gargoyle"))
  970.         self.demonSelect_4.setText(_translate("MainWindow", "Doom Hunter"))
  971.         self.demonSelect_11.setText(_translate("MainWindow", "Whiplash"))
  972.         self.labelMonsterTypeHeader.setText(_translate("MainWindow", "__**Monster Type Selection**__"))
  973.         self.labelMonsterTypePresetInfo.setText(_translate("MainWindow", "Presets (Ignores Above Selections)"))
  974.         self.radioButtonPresetAInfo.setText(_translate("MainWindow", "Fodder + Carcass, Prowler, Whiplash, Marauder"))
  975.         self.radioButtonPresetSuperHeavyInfo.setText(_translate("MainWindow", "Super Heavy"))
  976.         self.radioButtonPresetFodderInfo.setText(_translate("MainWindow", "Fodder"))
  977.         self.radioButtonPresetCInfo.setText(_translate("MainWindow", "All"))
  978.         self.radioButtonPresetHeavyInfo.setText(_translate("MainWindow", "Heavy"))
  979.         self.radioButtonPresetNoneInfo.setText(_translate("MainWindow", "None"))
  980.         self.radioButtonPresetBInfo.setText(_translate("MainWindow", "All sans Tyrant"))
  981.         self.radioButtonPresetDInfo.setText(_translate("MainWindow", "Thruster Assisted and Teleporting Demons"))
  982.         self.inputStartCoords.setPlaceholderText(_translate("MainWindow", "Start Coordinates"))
  983.         self.inputEntityNum.setPlaceholderText(_translate("MainWindow", "Starting Entity Number"))
  984.         self.buttonClearOutput.setText(_translate("MainWindow", "Clear Output File"))
  985.         self.groupBoxTraversalDelta.setTitle(_translate("MainWindow", "Delta Values"))
  986.         self.labelHorDelta.setText(_translate("MainWindow", "Horizontal :"))
  987.         self.labelVerDelta.setText(_translate("MainWindow", "Vertical :"))
  988.         self.labelXDelta.setText(_translate("MainWindow", "X :"))
  989.         self.labelYDelta.setText(_translate("MainWindow", "Y : "))
  990.         self.labelValXDelta.setText(_translate("MainWindow", "0.0000"))
  991.         self.labelValYDelta.setText(_translate("MainWindow", "0.0000"))
  992.         self.labelValHorDelta.setText(_translate("MainWindow", "0.0000"))
  993.         self.labelValVerDelta.setText(_translate("MainWindow", "0.0000"))
  994.         self.tabWidgetTraversalEntityTypes.setTabText(self.tabWidgetTraversalEntityTypes.indexOf(self.tab),
  995.                                                       _translate("MainWindow", "Traversal Info"))
  996.         self.buttonClearCoordsAndAnims.setText(_translate("MainWindow", "Clear Coordinates and Midpoints"))
  997.         self.inputEndCoordsChain.setPlaceholderText(_translate("MainWindow", "Destination Coordiantes"))
  998.         self.buttonClearOutputChain.setText(_translate("MainWindow", "Clear Output File"))
  999.         self.demonSelect_15_Chain.setText(_translate("MainWindow", "Wolf"))
  1000.         self.labelMonsterType_Heavy_4.setText(_translate("MainWindow", "Heavy"))
  1001.         self.demonSelect_18_Chain.setText(_translate("MainWindow", "Hell Knight"))
  1002.         self.demonSelect_14_Chain.setText(_translate("MainWindow", "Arachnotron"))
  1003.         self.demonSelect_17_Chain.setText(_translate("MainWindow", "Baron of Hell"))
  1004.         self.demonSelect_12_Chain.setText(_translate("MainWindow", "Maykr Drone"))
  1005.         self.demonSelect_7_Chain.setText(_translate("MainWindow", "Marauder"))
  1006.         self.demonSelect_19_Chain.setText(_translate("MainWindow", "Imp"))
  1007.         self.demonSelect_9_Chain.setText(_translate("MainWindow", "Revenant"))
  1008.         self.demonSelect_3_Chain.setText(_translate("MainWindow", "Carcass"))
  1009.         self.labelMonsterType_SHeavy_4.setText(_translate("MainWindow", "Super Heavy"))
  1010.         self.demonSelect_10_Chain.setText(_translate("MainWindow", "Tyrant"))
  1011.         self.demonSelect_5_Chain.setText(_translate("MainWindow", "Dread Knight"))
  1012.         self.demonSelect_21_Chain.setText(_translate("MainWindow", "Pinky"))
  1013.         self.demonSelect_16_Chain.setText(_translate("MainWindow", "Zombie"))
  1014.         self.demonSelect_13_Chain.setText(_translate("MainWindow", "Mecha Zombie"))
  1015.         self.demonSelect_8_Chain.setText(_translate("MainWindow", "Prowler"))
  1016.         self.demonSelect_22_Chain.setText(_translate("MainWindow", "Soldier"))
  1017.         self.demonSelect_2_Chain.setText(_translate("MainWindow", "Blood Maykr"))
  1018.         self.demonSelect_1_Chain.setText(_translate("MainWindow", "Archvile"))
  1019.         self.labelMonsterType_Fodder_4.setText(_translate("MainWindow", "Fodder"))
  1020.         self.demonSelect_20_Chain.setText(_translate("MainWindow", "Mancubus"))
  1021.         self.demonSelect_6_Chain.setText(_translate("MainWindow", "Gargoyle"))
  1022.         self.demonSelect_4_Chain.setText(_translate("MainWindow", "Doom Hunter"))
  1023.         self.demonSelect_11_Chain.setText(_translate("MainWindow", "Whiplash"))
  1024.         self.labelMonsterTypeHeader_3.setText(_translate("MainWindow", "__**Monster Type Selection**__"))
  1025.         self.labelMonsterTypePresetChain.setText(_translate("MainWindow", "Presets (Ignores Above Selections)"))
  1026.         self.radioButtonPresetFodderChain.setText(_translate("MainWindow", "Fodder"))
  1027.         self.radioButtonPresetHeavyChain.setText(_translate("MainWindow", "Heavy"))
  1028.         self.radioButtonPresetSuperHeavyChain.setText(_translate("MainWindow", "Super Heavy"))
  1029.         self.radioButtonPresetNoneChain.setText(_translate("MainWindow", "None"))
  1030.         self.radioButtonPresetAChain.setText(_translate("MainWindow", "Fodder + Carcass, Prowler, Whiplash, Marauder"))
  1031.         self.radioButtonPresetBChain.setText(_translate("MainWindow", "All sans Tyrant"))
  1032.         self.radioButtonPresetCChain.setText(_translate("MainWindow", "All"))
  1033.         self.radioButtonPresetDChain.setText(_translate("MainWindow", "Thruster Assisted and Teleporting Demons"))
  1034.         self.inputStartCoordsChain.setPlaceholderText(_translate("MainWindow", "Start Coordinates"))
  1035.         self.buttonGenerateTraversalChain.setText(_translate("MainWindow", "Generate Traversal Chain"))
  1036.         self.selectReciprocalTraversalChain.setText(_translate("MainWindow", "Create reciprocal traversal chain"))
  1037.         self.inputEntityNumChain.setPlaceholderText(_translate("MainWindow", "Starting Entity Number"))
  1038.         self.inputMidCoordsChain.setPlaceholderText(_translate("MainWindow", "Midpoint Coordinates"))
  1039.         self.labelStartAnimSelect.setText(_translate("MainWindow", "Select animation to first midpoint"))
  1040.         self.labelMidAnimSelect.setText(_translate("MainWindow", "Select animation to next midpoint/destination"))
  1041.         self.pushButtonAddMidpoint.setText(_translate("MainWindow", "Add Midpoint"))
  1042.         self.labelCurrentMidPoints.setText(_translate("MainWindow", "Current Midpoints"))
  1043.         self.tabWidgetTraversalEntityTypes.setTabText(self.tabWidgetTraversalEntityTypes.indexOf(self.tab_2),
  1044.                                                       _translate("MainWindow", "Traversal Chain"))
  1045.  
  1046.     def clearCoordsDEInfo(
  1047.             self
  1048.     ):
  1049.  
  1050.         self.inputStartCoords.clear()
  1051.         self.inputEndCoords.clear()
  1052.  
  1053.     def clearCoordsDEChain(
  1054.             self
  1055.     ):
  1056.  
  1057.         self.inputStartCoordsChain.clear()
  1058.         self.inputMidCoordsChain.clear()
  1059.         self.inputEndCoordsChain.clear()
  1060.         self.listWidgetMidpoints.clear()
  1061.         self.listWidgetMidAnims.clear()
  1062.         tempAnimList.clear()
  1063.  
  1064.     def getMonsterTypesDEInfoTraversal(
  1065.             self
  1066.     ):
  1067.  
  1068.         # Incredibly ugly, but it works. PLEASE replace this if possible!!!
  1069.         if self.radioButtonPresetNoneInfo.isChecked():
  1070.             tempList = []
  1071.             if self.demonSelect_1.isChecked():
  1072.                 tempList.append(1)
  1073.             if self.demonSelect_2.isChecked():
  1074.                 tempList.append(2)
  1075.             if self.demonSelect_3.isChecked():
  1076.                 tempList.append(3)
  1077.             if self.demonSelect_4.isChecked():
  1078.                 tempList.append(4)
  1079.             if self.demonSelect_5.isChecked():
  1080.                 tempList.append(5)
  1081.             if self.demonSelect_6.isChecked():
  1082.                 tempList.append(6)
  1083.             if self.demonSelect_7.isChecked():
  1084.                 tempList.append(7)
  1085.             if self.demonSelect_8.isChecked():
  1086.                 tempList.append(8)
  1087.             if self.demonSelect_9.isChecked():
  1088.                 tempList.append(9)
  1089.             if self.demonSelect_10.isChecked():
  1090.                 tempList.append(10)
  1091.             if self.demonSelect_11.isChecked():
  1092.                 tempList.append(11)
  1093.             if self.demonSelect_12.isChecked():
  1094.                 tempList.append(12)
  1095.             if self.demonSelect_13.isChecked():
  1096.                 tempList.append(13)
  1097.             if self.demonSelect_14.isChecked():
  1098.                 tempList.append(14)
  1099.             if self.demonSelect_15.isChecked():
  1100.                 tempList.append(15)
  1101.             if self.demonSelect_16.isChecked():
  1102.                 tempList.append(16)
  1103.             if self.demonSelect_17.isChecked():
  1104.                 tempList.append(17)
  1105.             if self.demonSelect_18.isChecked():
  1106.                 tempList.append(18)
  1107.             if self.demonSelect_19.isChecked():
  1108.                 tempList.append(19)
  1109.             if self.demonSelect_20.isChecked():
  1110.                 tempList.append(20)
  1111.             if self.demonSelect_21.isChecked():
  1112.                 tempList.append(21)
  1113.             if self.demonSelect_22.isChecked():
  1114.                 tempList.append(22)
  1115.             return tempList
  1116.         elif self.radioButtonPresetFodderInfo.isChecked():  # Fodder
  1117.             return list([6, 19, 12, 13, 22, 16])
  1118.         elif self.radioButtonPresetHeavyInfo.isChecked():  # Heavy
  1119.             return list([14, 2, 3, 5, 18, 20, 21, 8, 9, 11])
  1120.         elif self.radioButtonPresetSuperHeavyInfo.isChecked():  # Super Heavy
  1121.             return list([1, 17, 4, 7, 10, 15])
  1122.         elif self.radioButtonPresetAInfo.isChecked():  # Fodder + Carcass, Prowler, Whiplash, Marauder
  1123.             return list([6, 19, 12, 13, 22, 16, 3, 8, 11, 7])
  1124.         elif self.radioButtonPresetDInfo.isChecked():  # Maykr Drone, Soldier, Prowler, Revenant, Archvile, Doom Hunter
  1125.             return list([12, 22, 8, 9, 1, 4])
  1126.         elif self.radioButtonPresetBInfo.isChecked():  # All sans Tyrant
  1127.             return list([1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22])
  1128.         elif self.radioButtonPresetCInfo.isChecked():  # All
  1129.             return list([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22])
  1130.  
  1131.     def getMonsterTypesDETraversalChain(
  1132.             self
  1133.     ):
  1134.  
  1135.         if self.radioButtonPresetNoneChain.isChecked():
  1136.             tempList = []
  1137.             if self.demonSelect_1_Chain.isChecked():
  1138.                 tempList.append(1)
  1139.             if self.demonSelect_2_Chain.isChecked():
  1140.                 tempList.append(2)
  1141.             if self.demonSelect_3_Chain.isChecked():
  1142.                 tempList.append(3)
  1143.             if self.demonSelect_4_Chain.isChecked():
  1144.                 tempList.append(4)
  1145.             if self.demonSelect_5_Chain.isChecked():
  1146.                 tempList.append(5)
  1147.             if self.demonSelect_6_Chain.isChecked():
  1148.                 tempList.append(6)
  1149.             if self.demonSelect_7_Chain.isChecked():
  1150.                 tempList.append(7)
  1151.             if self.demonSelect_8_Chain.isChecked():
  1152.                 tempList.append(8)
  1153.             if self.demonSelect_9_Chain.isChecked():
  1154.                 tempList.append(9)
  1155.             if self.demonSelect_10_Chain.isChecked():
  1156.                 tempList.append(10)
  1157.             if self.demonSelect_11_Chain.isChecked():
  1158.                 tempList.append(11)
  1159.             if self.demonSelect_12_Chain.isChecked():
  1160.                 tempList.append(12)
  1161.             if self.demonSelect_13_Chain.isChecked():
  1162.                 tempList.append(13)
  1163.             if self.demonSelect_14_Chain.isChecked():
  1164.                 tempList.append(14)
  1165.             if self.demonSelect_15_Chain.isChecked():
  1166.                 tempList.append(15)
  1167.             if self.demonSelect_16_Chain.isChecked():
  1168.                 tempList.append(16)
  1169.             if self.demonSelect_17_Chain.isChecked():
  1170.                 tempList.append(17)
  1171.             if self.demonSelect_18_Chain.isChecked():
  1172.                 tempList.append(18)
  1173.             if self.demonSelect_19_Chain.isChecked():
  1174.                 tempList.append(19)
  1175.             if self.demonSelect_20_Chain.isChecked():
  1176.                 tempList.append(20)
  1177.             if self.demonSelect_21_Chain.isChecked():
  1178.                 tempList.append(21)
  1179.             if self.demonSelect_22_Chain.isChecked():
  1180.                 tempList.append(22)
  1181.             return tempList
  1182.         elif self.radioButtonPresetFodderChain.isChecked():  # Fodder
  1183.             return list([6, 19, 12, 13, 22, 16])
  1184.         elif self.radioButtonPresetHeavyChain.isChecked():  # Heavy
  1185.             return list([14, 2, 3, 5, 18, 20, 21, 8, 9, 11])
  1186.         elif self.radioButtonPresetSuperHeavyChain.isChecked():  # Super Heavy
  1187.             return list([1, 17, 4, 7, 10, 15])
  1188.         elif self.radioButtonPresetAChain.isChecked():  # Fodder + Carcass, Prowler, Whiplash, Marauder
  1189.             return list([6, 19, 12, 13, 22, 16, 3, 8, 11, 7])
  1190.         elif self.radioButtonPresetDChain.isChecked():  # Maykr Drone, Soldier, Prowler, Revenant, Archvile, Doom Hunter
  1191.             return list([12, 22, 8, 9, 1, 4])
  1192.         elif self.radioButtonPresetBChain.isChecked():  # All sans Tyrant
  1193.             return list([1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22])
  1194.         elif self.radioButtonPresetCChain.isChecked():  # All
  1195.             return list([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22])
  1196.  
  1197.     def displayDeltaValues(
  1198.             self
  1199.     ):
  1200.  
  1201.         startCoordsStr = self.inputStartCoords.text()
  1202.         endCoordsStr = self.inputEndCoords.text()
  1203.         startCoordsFloat = stringToList(startCoordsStr, 'float')
  1204.         endCoordsFloat = stringToList(endCoordsStr, 'float')
  1205.  
  1206.         if startCoordsStr == '' or endCoordsStr == '' or len(startCoordsFloat) < 3 or len(endCoordsFloat) < 3:
  1207.             self.labelValXDelta.setText("0.0000")
  1208.             self.labelValYDelta.setText("0.0000")
  1209.             self.labelValHorDelta.setText("0.0000")
  1210.             self.labelValVerDelta.setText("0.0000")
  1211.         else:
  1212.             deltaX = endCoordsFloat[0] - startCoordsFloat[0]
  1213.             deltaY = endCoordsFloat[1] - startCoordsFloat[1]
  1214.             deltaZ = endCoordsFloat[2] - startCoordsFloat[2]
  1215.             deltaHor = math.sqrt(math.pow(deltaX, 2) + math.pow(deltaY, 2))
  1216.             self.labelValXDelta.setText(format(deltaX, '.4f'))
  1217.             self.labelValYDelta.setText(format(deltaY, '.4f'))
  1218.             self.labelValHorDelta.setText(format(deltaHor, '.4f'))
  1219.             self.labelValVerDelta.setText(format(deltaZ, '.4f'))
  1220.  
  1221.     def getGUIInputsDEInfoTraversal(
  1222.             self
  1223.     ):
  1224.  
  1225.         entityNum = int(self.inputEntityNum.text())
  1226.         startCoords = stringToList(self.inputStartCoords.text(), 'float')
  1227.         endCoords = stringToList(self.inputEndCoords.text(), 'float')
  1228.         monsterIndices = self.getMonsterTypesDEInfoTraversal()
  1229.         reciprocalTraversal = bool(self.selectReciprocalTraversal.isChecked())
  1230.         animIndex = int(self.comboBoxAnimSelect.currentIndex()) + 1
  1231.  
  1232.         # entityNum,startCoords,endCoords,monsterIndices,animIndex,reciprocalTraversal
  1233.         generateDEInfoTraversal(entityNum, startCoords, endCoords, monsterIndices, animIndex, reciprocalTraversal)
  1234.         self.inputEntityNum.setText(str(entityNum + 1))
  1235.  
  1236.     def addMidPointToList(
  1237.             self
  1238.     ):
  1239.  
  1240.         self.listWidgetMidpoints.addItem(self.inputMidCoordsChain.text())
  1241.         tempAnimList.append(self.comboBoxAnimSelectStartChain_2.currentIndex())
  1242.         self.listWidgetMidAnims.addItem(DEAnimDictionary[1][self.comboBoxAnimSelectStartChain_2.currentIndex()])
  1243.         self.inputMidCoordsChain.clear()
  1244.  
  1245.     def getGUIInputsDETraversalChain(
  1246.             self
  1247.     ):
  1248.  
  1249.         entityNum = int(self.inputEntityNumChain.text())
  1250.         startCoords = stringToList(self.inputStartCoordsChain.text(), 'float')
  1251.  
  1252.         midCoords = []
  1253.         for i in range(self.listWidgetMidpoints.count()):
  1254.             placeHolder = str(self.listWidgetMidpoints.item(i).text())
  1255.             midCoords.append(stringToList(placeHolder, 'float'))
  1256.  
  1257.         endCoords = stringToList(self.inputEndCoordsChain.text(), 'float')
  1258.  
  1259.         midPoints = len(tempAnimList)
  1260.         monsterIndices = self.getMonsterTypesDETraversalChain()
  1261.         tempAnimList.insert(0, int(self.comboBoxAnimSelectStartChain.currentIndex()) + 1)
  1262.         reciprocalTraversal = bool(self.selectReciprocalTraversalChain.isChecked())
  1263.  
  1264.         generateDETraversalChain(entityNum, startCoords, midCoords, endCoords, False, midPoints, monsterIndices,
  1265.                                  tempAnimList, reciprocalTraversal)
  1266.         # generateDETraversalChain(entityNum, startCoords, midCoords, endCoords, isOnCeiling, midPoints, monsterIndices, traversalAnims, reciprocalTraversal)
  1267.  
  1268.         self.clearCoordsDEChain()
  1269.         self.inputEntityNumChain.setText(str(entityNum + 1))
  1270.  
  1271.  
  1272. # if name main
  1273. if __name__ == "__main__":
  1274.     # mainConsole()
  1275.     import sys
  1276.  
  1277.     app = QtWidgets.QApplication(sys.argv)
  1278.     MainWindow = QtWidgets.QMainWindow()
  1279.     ui = Ui_MainWindow()
  1280.     ui.setupUi(MainWindow)
  1281.     MainWindow.show()
  1282.     sys.exit(app.exec_())
  1283.  
Add Comment
Please, Sign In to add comment