1717class PlanetGenerator :
1818 shouldUpdatePhysicsMeshes = False
1919 aStarHandler : AStar
20+ listOfItems = None
21+ examplePointFrom : NodeKey
2022
2123 def __init__ (self , winCreator : WindowCreator , gridSize : int , radius : float ):
2224 self .radius = radius
@@ -58,6 +60,18 @@ def __init__(self, winCreator: WindowCreator, gridSize: int, radius: float):
5860 self .RegenPlanet ()
5961 self .winCreator .base .taskMgr .doMethodLater (1 , self .UpdatePhysicsMesh , "Planet Physics Updater" )
6062
63+ self .winCreator .base .accept ("r" , self .NextPoint )
64+
65+ def NextPoint (self ):
66+ examplePointTo : NodeKey = next (self .listOfItems )
67+
68+ self .sphere3 .setPos (examplePointTo [0 ], examplePointTo [1 ], examplePointTo [2 ])
69+ PipelineInstancing .RenderThisModelAtVertexes (self .sphere1 ,
70+ self .aStarHandler .GetPathFromTo (
71+ self .examplePointFrom .point ,
72+ examplePointTo .point ),
73+ self .winCreator )
74+
6175 def RegenPlanet (self ):
6276 self .winCreator .baseData .debuggerPlanetFormer .Inform ("Regenerating planet" )
6377 self .cubeformerNav .GenerateNoiseSphere (self .radius )
@@ -72,67 +86,61 @@ def UpdatePlanet(self):
7286
7387 def UpdatePhysicsMesh (self , task ):
7488 if self .shouldUpdatePhysicsMeshes :
75- # Generate marching
76- self .marchingCubesNav .EdgeGenerator ()
77- self .marchingCubesNav .MarchCube ()
78-
79- # Extract Mesh Data (Tri Indexes and Vertexes)
80- self .winCreator .base .graphicsEngine .extractTextureData (self .marchingCubesNav .edgeVertexBuffer ,
81- self .winCreator .base .win .gsg )
82- ramImageVertex = self .marchingCubesNav .edgeVertexBuffer .getRamImage ()
83- output = np .frombuffer (ramImageVertex , dtype = np .float32 )
84- output : np .ndarray = output .reshape ((self .marchingCubesNav .size [2 ],
85- self .marchingCubesNav .size [1 ],
86- self .marchingCubesNav .size [0 ]* 3 , 4 ))
87-
88- self .winCreator .base .graphicsEngine .extractTextureData (self .marchingCubesNav .triangleBuffer ,
89- self .winCreator .base .win .gsg )
90- ramImage = self .marchingCubesNav .triangleBuffer .getRamImage ()
91- outputTriangle = memoryview (ramImage ).cast ("i" )
92-
93- # Restructure that data to be a node network instead using a dictionary
94- outputR = map (tuple , output .reshape ((self .marchingCubesNav .size [0 ]* 3 *
95- self .marchingCubesNav .size [1 ] *
96- self .marchingCubesNav .size [2 ], 4 )))
97- nodeDict = dict ((NodeKey (el ), set ([])) for el in outputR )
98- del outputR
99-
100- buffer = np .empty (12 , dtype = int )
101-
102- triagIndexCount = self .marchingCubesNav .vertexCount * 4
103- for count , x in enumerate (outputTriangle ):
104- buffer [count % 12 ] = x
105- if count % 12 == 11 :
106- v1 : NodeRef = NodeRef (tuple (output [buffer [2 ], buffer [1 ], buffer [0 ]]))
107- v2 : NodeRef = NodeRef (tuple (output [buffer [6 ], buffer [5 ], buffer [4 ]]))
108- v3 : NodeRef = NodeRef (tuple (output [buffer [10 ], buffer [9 ], buffer [8 ]]))
109-
110- nodeDict [v1 ].add (v2 )
111- nodeDict [v1 ].add (v3 )
112-
113- nodeDict [v2 ].add (v1 )
114- nodeDict [v2 ].add (v3 )
115-
116- nodeDict [v3 ].add (v2 )
117- nodeDict [v3 ].add (v1 )
118-
119- if count > triagIndexCount :
120- break
121- listOfItems = (item [0 ] for item in nodeDict .items () if len (item [1 ]) > 0 )
122-
123- examplePointFrom : NodeKey = next (listOfItems )
124- for i in range (128 ): next (listOfItems )
125- examplePointTo : NodeKey = next (listOfItems )
126-
127- self .sphere2 .setPos (examplePointFrom [0 ], examplePointFrom [1 ], examplePointFrom [2 ])
128- self .sphere3 .setPos (examplePointTo [0 ], examplePointTo [1 ], examplePointTo [2 ])
129-
130- self .aStarHandler = AStar (nodeDict )
131- PipelineInstancing .RenderThisModelAtVertexes (self .sphere1 ,
132- self .aStarHandler .GetPathFromTo (
133- examplePointFrom .point ,
134- examplePointTo .point ),
135- self .winCreator )
89+ self .GenerateAStarPather ()
13690
13791 self .shouldUpdatePhysicsMeshes = False
13892 return Task .again
93+
94+ def GenerateAStarPather (self ):
95+ # Generate marching
96+ self .marchingCubesNav .EdgeGenerator ()
97+ self .marchingCubesNav .MarchCube ()
98+
99+ # Extract Mesh Data (Tri Indexes and Vertexes)
100+ self .winCreator .base .graphicsEngine .extractTextureData (self .marchingCubesNav .edgeVertexBuffer ,
101+ self .winCreator .base .win .gsg )
102+ ramImageVertex = self .marchingCubesNav .edgeVertexBuffer .getRamImage ()
103+ output = np .frombuffer (ramImageVertex , dtype = np .float32 )
104+ output : np .ndarray = output .reshape ((self .marchingCubesNav .size [2 ],
105+ self .marchingCubesNav .size [1 ],
106+ self .marchingCubesNav .size [0 ] * 3 , 4 ))
107+
108+ self .winCreator .base .graphicsEngine .extractTextureData (self .marchingCubesNav .triangleBuffer ,
109+ self .winCreator .base .win .gsg )
110+ ramImage = self .marchingCubesNav .triangleBuffer .getRamImage ()
111+ outputTriangle = memoryview (ramImage ).cast ("i" )
112+
113+ # Restructure that data to be a node network instead using a dictionary
114+ outputR = map (tuple , output .reshape ((self .marchingCubesNav .size [0 ] * 3 *
115+ self .marchingCubesNav .size [1 ] *
116+ self .marchingCubesNav .size [2 ], 4 )))
117+ nodeDict = dict ((NodeKey (el ), set ([])) for el in outputR )
118+ del outputR
119+
120+ buffer = np .empty (12 , dtype = int )
121+
122+ triagIndexCount = self .marchingCubesNav .vertexCount * 4
123+ for count , x in enumerate (outputTriangle ):
124+ buffer [count % 12 ] = x
125+ if count % 12 == 11 :
126+ v1 : NodeRef = NodeRef (tuple (output [buffer [2 ], buffer [1 ], buffer [0 ]]))
127+ v2 : NodeRef = NodeRef (tuple (output [buffer [6 ], buffer [5 ], buffer [4 ]]))
128+ v3 : NodeRef = NodeRef (tuple (output [buffer [10 ], buffer [9 ], buffer [8 ]]))
129+
130+ nodeDict [v1 ].add (v2 )
131+ nodeDict [v1 ].add (v3 )
132+
133+ nodeDict [v2 ].add (v1 )
134+ nodeDict [v2 ].add (v3 )
135+
136+ nodeDict [v3 ].add (v2 )
137+ nodeDict [v3 ].add (v1 )
138+
139+ if count > triagIndexCount :
140+ break
141+ self .listOfItems = (item [0 ] for item in nodeDict .items () if len (item [1 ]) > 0 )
142+
143+ self .examplePointFrom : NodeKey = next (self .listOfItems )
144+ self .sphere2 .setPos (self .examplePointFrom [0 ], self .examplePointFrom [1 ], self .examplePointFrom [2 ])
145+
146+ self .aStarHandler = AStar (nodeDict )
0 commit comments