2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import Point3
|
|
|
|
from panda3d.core import Vec3
|
2019-11-02 17:27:54 -05:00
|
|
|
import copy
|
|
|
|
from toontown.toonbase import TTLocalizer
|
|
|
|
__mickeyPaths = {'a': (Point3(17, -17, 4.025), ('b', 'e')),
|
|
|
|
'b': (Point3(17.5, 7.6, 4.025), ('c', 'e')),
|
|
|
|
'c': (Point3(85, 11.5, 4.025), ('d',)),
|
|
|
|
'd': (Point3(85, -13, 4.025), ('a',)),
|
|
|
|
'e': (Point3(-27.5, -5.25, 0.0), ('a', 'b', 'f')),
|
|
|
|
'f': (Point3(-106.15, -4.0, -2.5), ('e',
|
|
|
|
'g',
|
|
|
|
'h',
|
|
|
|
'i')),
|
|
|
|
'g': (Point3(-89.5, 93.5, 0.5), ('f', 'h')),
|
|
|
|
'h': (Point3(-139.95, 1.69, 0.5), ('f', 'g', 'i')),
|
|
|
|
'i': (Point3(-110.95, -68.57, 0.5), ('f', 'h'))}
|
|
|
|
__mickeyWaypoints = (('a',
|
|
|
|
'e',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('b',
|
|
|
|
'e',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('e',
|
|
|
|
'f',
|
|
|
|
1,
|
|
|
|
[Point3(-76.87, -7.85, -1.85), Point3(-80.57, -4.0, -1.85)]),
|
|
|
|
('f',
|
|
|
|
'g',
|
|
|
|
1,
|
|
|
|
[Point3(-106.62, 28.65, -1.5)]),
|
|
|
|
('g',
|
|
|
|
'h',
|
|
|
|
1,
|
|
|
|
[Point3(-128.38, 60.27, 0.5)]),
|
|
|
|
('h',
|
|
|
|
'f',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('h',
|
|
|
|
'i',
|
|
|
|
1,
|
|
|
|
[Point3(-137.13, -42.79, 0.5)]),
|
|
|
|
('i',
|
|
|
|
'f',
|
|
|
|
1,
|
|
|
|
[]))
|
|
|
|
__minniePaths = {'a': (Point3(53.334, 71.057, 6.525), ('b', 'r')),
|
|
|
|
'b': (Point3(127.756, 58.665, -11.75), ('a', 's', 'c')),
|
|
|
|
'c': (Point3(130.325, 15.174, -2.003), ('b', 'd')),
|
|
|
|
'd': (Point3(126.173, 7.057, 0.522), ('c', 'e')),
|
|
|
|
'e': (Point3(133.843, -6.618, 4.71), ('d',
|
|
|
|
'f',
|
|
|
|
'g',
|
|
|
|
'h')),
|
|
|
|
'f': (Point3(116.876, 1.119, 3.304), 'e'),
|
|
|
|
'g': (Point3(116.271, -41.568, 3.304), ('e', 'h')),
|
|
|
|
'h': (Point3(128.983, -49.656, -0.231), ('e',
|
|
|
|
'g',
|
|
|
|
'i',
|
|
|
|
'j')),
|
|
|
|
'i': (Point3(106.024, -75.249, -4.498), 'h'),
|
|
|
|
'j': (Point3(135.016, -93.072, -13.376), ('h', 'k', 'z')),
|
|
|
|
'k': (Point3(123.966, -100.242, -10.879), ('j', 'l')),
|
|
|
|
'l': (Point3(52.859, -109.081, 6.525), ('k', 'm')),
|
|
|
|
'm': (Point3(-32.071, -107.049, 6.525), ('l', 'n')),
|
|
|
|
'n': (Point3(-40.519, -99.685, 6.525), ('m', 'o')),
|
|
|
|
'o': (Point3(-40.245, -88.634, 6.525), ('n', 'p')),
|
|
|
|
'p': (Point3(-66.3, -62.192, 6.525), ('o', 'q')),
|
|
|
|
'q': (Point3(-66.212, 23.069, 6.525), ('p', 'r')),
|
|
|
|
'r': (Point3(-18.344, 69.532, 6.525), ('q', 'a')),
|
|
|
|
's': (Point3(91.357, 44.546, -13.475), ('b', 't')),
|
|
|
|
't': (Point3(90.355, 6.279, -13.475), ('s', 'u')),
|
|
|
|
'u': (Point3(-13.765, 42.362, -14.553), ('t', 'v')),
|
|
|
|
'v': (Point3(-52.627, 7.428, -14.553), ('u', 'w')),
|
|
|
|
'w': (Point3(-50.654, -54.879, -14.553), ('v', 'x')),
|
|
|
|
'x': (Point3(-3.711, -81.819, -14.553), ('w', 'y')),
|
|
|
|
'y': (Point3(90.777, -49.714, -13.475), ('z', 'x')),
|
|
|
|
'z': (Point3(90.059, -79.426, -13.475), ('j', 'y'))}
|
|
|
|
__minnieWaypoints = (('a',
|
|
|
|
'b',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('k',
|
|
|
|
'l',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('b',
|
|
|
|
'c',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('c',
|
|
|
|
'd',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('d',
|
|
|
|
'e',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('e',
|
|
|
|
'f',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('e',
|
|
|
|
'g',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('e',
|
|
|
|
'h',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('g',
|
|
|
|
'h',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('h',
|
|
|
|
'i',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('h',
|
|
|
|
'j',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('s',
|
|
|
|
'b',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('t',
|
|
|
|
'u',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('x',
|
|
|
|
'y',
|
|
|
|
1,
|
|
|
|
[]))
|
|
|
|
__goofyPaths = {'a': (Point3(64.995, 169.665, 10.027), ('b', 'q')),
|
|
|
|
'b': (Point3(48.893, 208.912, 10.027), ('a', 'c')),
|
|
|
|
'c': (Point3(5.482, 210.479, 10.03), ('b', 'd')),
|
|
|
|
'd': (Point3(-34.153, 203.284, 10.029), ('c', 'e')),
|
|
|
|
'e': (Point3(-66.656, 174.334, 10.026), ('d', 'f')),
|
|
|
|
'f': (Point3(-55.994, 162.33, 10.026), ('e', 'g')),
|
|
|
|
'g': (Point3(-84.554, 142.099, 0.027), ('f', 'h')),
|
|
|
|
'h': (Point3(-92.215, 96.446, 0.027), ('g', 'i')),
|
|
|
|
'i': (Point3(-63.168, 60.055, 0.027), ('h', 'j')),
|
|
|
|
'j': (Point3(-37.637, 69.974, 0.027), ('i', 'k')),
|
|
|
|
'k': (Point3(-3.018, 26.157, 0.027), ('j', 'l', 'm')),
|
|
|
|
'l': (Point3(-0.711, 46.843, 0.027), 'k'),
|
|
|
|
'm': (Point3(26.071, 46.401, 0.027), ('k', 'n')),
|
|
|
|
'n': (Point3(30.87, 67.432, 0.027), ('m', 'o')),
|
|
|
|
'o': (Point3(93.903, 90.685, 0.027), ('n', 'p')),
|
|
|
|
'p': (Point3(88.129, 140.575, 0.027), ('o', 'q')),
|
|
|
|
'q': (Point3(53.988, 158.232, 10.027), ('p', 'a'))}
|
|
|
|
__goofyWaypoints = (('f',
|
|
|
|
'g',
|
|
|
|
1,
|
|
|
|
[]), ('p',
|
|
|
|
'q',
|
|
|
|
1,
|
|
|
|
[]))
|
|
|
|
__goofySpeedwayPaths = {'a': (Point3(-9.0, -19.517, -0.323), ('b', 'k')),
|
|
|
|
'b': (Point3(-30.047, -1.578, -0.373), ('a', 'c')),
|
|
|
|
'c': (Point3(-10.367, 49.042, -0.373), ('b', 'd')),
|
|
|
|
'd': (Point3(38.439, 44.348, -0.373), ('c', 'e')),
|
|
|
|
'e': (Point3(25.527, -2.395, -0.373), ('d', 'f')),
|
|
|
|
'f': (Point3(-4.043, -59.865, -0.003), ('e', 'g')),
|
|
|
|
'g': (Point3(0.39, -99.475, -0.009), ('f', 'h')),
|
|
|
|
'h': (Point3(21.147, -109.127, -0.013), ('g', 'i')),
|
|
|
|
'i': (Point3(5.981, -147.606, -0.013), ('h', 'j')),
|
|
|
|
'j': (Point3(-24.898, -120.618, -0.013), ('i', 'k')),
|
|
|
|
'k': (Point3(-2.71, -90.315, -0.011), ('j', 'a'))}
|
|
|
|
__goofySpeedwayWaypoints = (('a',
|
|
|
|
'k',
|
|
|
|
1,
|
|
|
|
[]), ('k',
|
|
|
|
'a',
|
|
|
|
1,
|
|
|
|
[]))
|
|
|
|
__donaldPaths = {'a': (Point3(-94.883, -94.024, 0.025), 'b'),
|
|
|
|
'b': (Point3(-13.962, -92.233, 0.025), ('a', 'h')),
|
|
|
|
'c': (Point3(68.417, -91.929, 0.025), ('m', 'g')),
|
|
|
|
'd': (Point3(68.745, 91.227, 0.025), ('k', 'i')),
|
|
|
|
'e': (Point3(4.047, 94.26, 0.025), ('i', 'j')),
|
|
|
|
'f': (Point3(-91.271, 90.987, 0.025), 'j'),
|
|
|
|
'g': (Point3(43.824, -94.129, 0.025), ('c', 'h')),
|
|
|
|
'h': (Point3(13.905, -91.334, 0.025), ('b', 'g')),
|
|
|
|
'i': (Point3(43.062, 88.152, 0.025), ('d', 'e')),
|
|
|
|
'j': (Point3(-48.96, 88.565, 0.025), ('e', 'f')),
|
|
|
|
'k': (Point3(75.118, 52.84, -16.62), ('d', 'l')),
|
|
|
|
'l': (Point3(44.677, 27.091, -15.385), ('k', 'm')),
|
|
|
|
'm': (Point3(77.009, -16.022, -14.975), ('l', 'c'))}
|
|
|
|
__donaldWaypoints = (('d',
|
|
|
|
'k',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('k',
|
|
|
|
'l',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('l',
|
|
|
|
'm',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('m',
|
|
|
|
'c',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('b',
|
|
|
|
'a',
|
|
|
|
1,
|
|
|
|
[Point3(-55.883, -89.0, 0.025)]))
|
|
|
|
__plutoPaths = {'a': (Point3(-110.0, -37.8, 8.6), ('b', 'c')),
|
|
|
|
'b': (Point3(-11.9, -128.2, 6.2), ('a', 'c')),
|
|
|
|
'c': (Point3(48.9, -14.4, 6.2), ('b', 'a', 'd')),
|
|
|
|
'd': (Point3(0.25, 80.5, 6.2), ('c', 'e')),
|
|
|
|
'e': (Point3(-83.3, 36.1, 6.2), ('d', 'a'))}
|
|
|
|
__plutoWaypoints = (('a',
|
|
|
|
'b',
|
|
|
|
1,
|
|
|
|
[Point3(-90.4, -57.2, 3.0), Point3(-63.6, -79.8, 3.0), Point3(-50.1, -89.1, 6.2)]),
|
|
|
|
('c',
|
|
|
|
'a',
|
|
|
|
1,
|
|
|
|
[Point3(-15.6, -25.6, 6.2),
|
|
|
|
Point3(-37.5, -38.5, 3.0),
|
|
|
|
Point3(-55.0, -55.0, 3.0),
|
|
|
|
Point3(-85.0, -46.4, 3.0)]),
|
|
|
|
('d',
|
|
|
|
'e',
|
|
|
|
0,
|
|
|
|
[Point3(-25.8, 60.0, 6.2), Point3(-61.9, 64.5, 6.2)]),
|
|
|
|
('e',
|
|
|
|
'a',
|
|
|
|
1,
|
|
|
|
[Point3(-77.2, 28.5, 6.2), Point3(-76.4, 12.0, 3.0), Point3(-93.2, -21.2, 3.0)]))
|
|
|
|
__daisyPaths = {'a': (Point3(64.995, 169.665, 10.027), ('b', 'q')),
|
|
|
|
'b': (Point3(48.893, 208.912, 10.027), ('a', 'c')),
|
|
|
|
'c': (Point3(5.482, 210.479, 10.03), ('b', 'd')),
|
|
|
|
'd': (Point3(-34.153, 203.284, 10.029), ('c', 'e')),
|
|
|
|
'e': (Point3(-66.656, 174.334, 10.026), ('d', 'f')),
|
|
|
|
'f': (Point3(-55.994, 162.33, 10.026), ('e', 'g')),
|
|
|
|
'g': (Point3(-84.554, 142.099, 0.027), ('f', 'h')),
|
|
|
|
'h': (Point3(-92.215, 96.446, 0.027), ('g', 'i')),
|
|
|
|
'i': (Point3(-63.168, 60.055, 0.027), ('h', 'j')),
|
|
|
|
'j': (Point3(-37.637, 69.974, 0.027), ('i', 'k')),
|
|
|
|
'k': (Point3(-3.018, 26.157, 0.027), ('j', 'l', 'm')),
|
|
|
|
'l': (Point3(-0.711, 46.843, 0.027), 'k'),
|
|
|
|
'm': (Point3(26.071, 46.401, 0.027), ('k', 'n')),
|
|
|
|
'n': (Point3(30.87, 67.432, 0.027), ('m', 'o')),
|
|
|
|
'o': (Point3(93.903, 90.685, 0.027), ('n', 'p')),
|
|
|
|
'p': (Point3(88.129, 140.575, 0.027), ('o', 'q')),
|
|
|
|
'q': (Point3(53.988, 158.232, 10.027), ('p', 'a'))}
|
|
|
|
__daisyWaypoints = (('f',
|
|
|
|
'g',
|
|
|
|
1,
|
|
|
|
[]), ('p',
|
|
|
|
'q',
|
|
|
|
1,
|
|
|
|
[]))
|
|
|
|
__chipPaths = {'a': (Point3(50.004, 102.725, 0.6), ('b', 'k')),
|
|
|
|
'b': (Point3(-29.552, 112.531, 0.6), ('c', 'a')),
|
|
|
|
'c': (Point3(-51.941, 146.155, 0.025), ('d', 'b')),
|
|
|
|
'd': (Point3(-212.334, -3.639, 0.025), ('e', 'c')),
|
|
|
|
'e': (Point3(-143.466, -67.526, 0.025), ('f', 'd', 'i')),
|
|
|
|
'f': (Point3(-107.556, -62.257, 0.025), ('g', 'e', 'j')),
|
|
|
|
'g': (Point3(-43.103, -71.518, 0.2734), ('h', 'f', 'j')),
|
|
|
|
'h': (Point3(-40.605, -125.124, 0.025), ('i', 'g')),
|
|
|
|
'i': (Point3(-123.05, -124.542, 0.025), ('h', 'e')),
|
|
|
|
'j': (Point3(-40.092, 2.784, 1.268), ('k',
|
|
|
|
'b',
|
|
|
|
'f',
|
|
|
|
'g')),
|
|
|
|
'k': (Point3(75.295, 26.715, 1.4), ('a', 'j'))}
|
|
|
|
__chipWaypoints = (('a',
|
|
|
|
'b',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('a',
|
|
|
|
'k',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('b',
|
|
|
|
'c',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('b',
|
|
|
|
'j',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('c',
|
|
|
|
'd',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('d',
|
|
|
|
'e',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('e',
|
|
|
|
'f',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('e',
|
|
|
|
'i',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('f',
|
|
|
|
'g',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('f',
|
|
|
|
'j',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('g',
|
|
|
|
'h',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('g',
|
|
|
|
'j',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('h',
|
|
|
|
'i',
|
|
|
|
1,
|
|
|
|
[]),
|
|
|
|
('j',
|
|
|
|
'k',
|
|
|
|
1,
|
|
|
|
[]))
|
|
|
|
DaleOrbitDistanceOverride = {('b', 'c'): 2.5,
|
|
|
|
('e', 'f'): 2.5}
|
|
|
|
startNode = 'a'
|
|
|
|
|
|
|
|
def getPaths(charName, location = 0):
|
|
|
|
if charName == TTLocalizer.Mickey:
|
|
|
|
return __mickeyPaths
|
|
|
|
elif charName == TTLocalizer.VampireMickey:
|
|
|
|
return __mickeyPaths
|
|
|
|
elif charName == TTLocalizer.Minnie:
|
|
|
|
return __minniePaths
|
|
|
|
elif charName == TTLocalizer.WitchMinnie:
|
|
|
|
return __minniePaths
|
|
|
|
elif charName == TTLocalizer.Daisy or charName == TTLocalizer.SockHopDaisy:
|
|
|
|
return __daisyPaths
|
|
|
|
elif charName == TTLocalizer.Goofy:
|
|
|
|
if location == 0:
|
|
|
|
return __goofyPaths
|
|
|
|
else:
|
|
|
|
return __goofySpeedwayPaths
|
|
|
|
elif charName == TTLocalizer.SuperGoofy:
|
|
|
|
return __goofySpeedwayPaths
|
|
|
|
elif charName == TTLocalizer.Donald or charName == TTLocalizer.FrankenDonald:
|
|
|
|
return __donaldPaths
|
|
|
|
elif charName == TTLocalizer.Pluto:
|
|
|
|
return __plutoPaths
|
|
|
|
elif charName == TTLocalizer.WesternPluto:
|
|
|
|
return __plutoPaths
|
|
|
|
elif charName == TTLocalizer.Chip or charName == TTLocalizer.PoliceChip:
|
|
|
|
return __chipPaths
|
|
|
|
elif charName == TTLocalizer.Dale or charName == TTLocalizer.JailbirdDale:
|
|
|
|
return __chipPaths
|
|
|
|
elif charName == TTLocalizer.DonaldDock:
|
|
|
|
return {'a': (Point3(0, 0, 0), 'a')}
|
|
|
|
|
|
|
|
|
|
|
|
def __getWaypointList(paths):
|
|
|
|
if paths == __mickeyPaths:
|
|
|
|
return __mickeyWaypoints
|
|
|
|
elif paths == __minniePaths:
|
|
|
|
return __minnieWaypoints
|
|
|
|
elif paths == __daisyPaths:
|
|
|
|
return __daisyWaypoints
|
|
|
|
elif paths == __goofyPaths:
|
|
|
|
return __goofyWaypoints
|
|
|
|
elif paths == __goofySpeedwayPaths:
|
|
|
|
return __goofySpeedwayWaypoints
|
|
|
|
elif paths == __donaldPaths:
|
|
|
|
return __donaldWaypoints
|
|
|
|
elif paths == __plutoPaths:
|
|
|
|
return __plutoWaypoints
|
|
|
|
elif paths == __chipPaths:
|
|
|
|
return __chipWaypoints
|
|
|
|
elif paths == __dalePaths:
|
|
|
|
return __chipWaypoints
|
|
|
|
|
|
|
|
|
|
|
|
def getNodePos(node, paths):
|
|
|
|
return paths[node][0]
|
|
|
|
|
|
|
|
|
|
|
|
def getAdjacentNodes(node, paths):
|
|
|
|
return paths[node][1]
|
|
|
|
|
|
|
|
|
|
|
|
def getWayPoints(fromNode, toNode, paths, wpts = None):
|
|
|
|
list = []
|
|
|
|
if fromNode != toNode:
|
|
|
|
if wpts == None:
|
|
|
|
wpts = __getWaypointList(paths)
|
|
|
|
for path in wpts:
|
|
|
|
if path[0] == fromNode and path[1] == toNode:
|
|
|
|
for point in path[3]:
|
|
|
|
list.append(Point3(point))
|
|
|
|
|
|
|
|
break
|
|
|
|
elif path[0] == toNode and path[1] == fromNode:
|
|
|
|
for point in path[3]:
|
|
|
|
list = [Point3(point)] + list
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
return list
|
|
|
|
|
|
|
|
|
|
|
|
def getRaycastFlag(fromNode, toNode, paths):
|
|
|
|
result = 0
|
|
|
|
if fromNode != toNode:
|
|
|
|
wpts = __getWaypointList(paths)
|
|
|
|
for path in wpts:
|
|
|
|
if path[0] == fromNode and path[1] == toNode:
|
|
|
|
if path[2]:
|
|
|
|
result = 1
|
|
|
|
break
|
|
|
|
elif path[0] == toNode and path[1] == fromNode:
|
|
|
|
if path[2]:
|
|
|
|
result = 1
|
|
|
|
break
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def getPointsFromTo(fromNode, toNode, paths):
|
|
|
|
startPoint = Point3(getNodePos(fromNode, paths))
|
|
|
|
endPoint = Point3(getNodePos(toNode, paths))
|
|
|
|
return [startPoint] + getWayPoints(fromNode, toNode, paths) + [endPoint]
|
|
|
|
|
|
|
|
|
|
|
|
def getWalkDuration(fromNode, toNode, velocity, paths):
|
|
|
|
posPoints = getPointsFromTo(fromNode, toNode, paths)
|
|
|
|
duration = 0
|
|
|
|
for pointIndex in range(len(posPoints) - 1):
|
|
|
|
startPoint = posPoints[pointIndex]
|
|
|
|
endPoint = posPoints[pointIndex + 1]
|
|
|
|
distance = Vec3(endPoint - startPoint).length()
|
|
|
|
duration += distance / velocity
|
|
|
|
|
|
|
|
return duration
|
|
|
|
|
|
|
|
|
|
|
|
def getWalkDistance(fromNode, toNode, velocity, paths):
|
|
|
|
posPoints = getPointsFromTo(fromNode, toNode, paths)
|
|
|
|
retval = 0
|
|
|
|
for pointIndex in range(len(posPoints) - 1):
|
|
|
|
startPoint = posPoints[pointIndex]
|
|
|
|
endPoint = posPoints[pointIndex + 1]
|
|
|
|
distance = Vec3(endPoint - startPoint).length()
|
|
|
|
retval += distance
|
|
|
|
|
|
|
|
return retval
|