directions = [
[8, Vector(16, 0, 0), 16], # forward
[1032, Vector(8, 8, 0), 11.314], # forward + right
[1024, Vector(0, 16, 0), 16], # right
[1040, Vector(-8, 8, 0), 11.314], # backwards + right
[16, Vector(-16, 0, 0), 16], # backwards
[528, Vector(-8, -8, 0), 11.314], # backwards + left
[512, Vector(0, -16, 0), 16], # left
[520, Vector(8, -8, 0), 11.314], # forward + left
]
ray_end = Vector(0, 0, -200)
...
def get_neighbors(current, explored, yaw):
for button, direction, cost in directions:
debug("direction" + str(button))
node = Vector(0, 0, 0)
node.mul_add(rotate(direction, m_radians(yaw)), current, 1.0)
debug(node)
if node in explored:
debug("branch 1")
result = explored[node]
if result: yield result, button, cost
else:
debug("branch 2")
trace = GameTrace()
end = Vector(0, 0, 0)
end.mul_add(node, ray_end, 1.0)
debug(end)
engine_trace.trace_ray(Ray(node, end), ContentMasks.SOLID_BRUSH_ONLY, TraceFilterSimple(trace_type=TraceType.WORLD_ONLY), trace)
if trace.did_hit():
result = trace.end_position
debug(result)
debug("Trace flags:" + str(trace.surface.flags))
if result != node or trace.surface.flags & ContentFlags.MOVEABLE:
explored[node] = result
yield result, button, cost
else:
explored[node] = 0