Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def uniform(self, low: float, high: float) -> float:
"""Return a random floating number in the range: low <= n <= high.
Args:
low (float): The lower bound of the random range.
high (float): The upper bound of the random range.
Returns:
float: A random float.
"""
return float(lib.TCOD_random_get_double(self.random_c, low, high))
@classmethod
def from_sdl_event(cls, sdl_event: Any) -> "Undefined":
self = cls()
self.sdl_event = sdl_event
return self
def __str__(self) -> str:
if self.sdl_event:
return "" % self.sdl_event.type
return ""
_SDL_TO_CLASS_TABLE = {
lib.SDL_QUIT: Quit,
lib.SDL_KEYDOWN: KeyDown,
lib.SDL_KEYUP: KeyUp,
lib.SDL_MOUSEMOTION: MouseMotion,
lib.SDL_MOUSEBUTTONDOWN: MouseButtonDown,
lib.SDL_MOUSEBUTTONUP: MouseButtonUp,
lib.SDL_MOUSEWHEEL: MouseWheel,
lib.SDL_TEXTINPUT: TextInput,
lib.SDL_WINDOWEVENT: WindowEvent,
} # type: Dict[int, Any]
def get() -> Iterator[Any]:
"""Return an iterator for all pending events.
Events are processed as the iterator is consumed. Breaking out of, or
discarding the iterator will leave the remaining events on the event queue.
It is also safe to call this function inside of a loop that is already
x = ffi.new("int[2]")
y = x + 1
while lib.TCOD_path_walk(self._path_c, x, y, False):
path.append((x[0], y[0]))
return path
class Dijkstra(_PathFinder):
"""
Args:
cost (Union[tcod.map.Map, numpy.ndarray, Any]):
diagonal (float): Multiplier for diagonal movement.
A value of 0 will disable diagonal movement entirely.
"""
_path_new_using_map = lib.TCOD_dijkstra_new
_path_new_using_function = lib.TCOD_dijkstra_new_using_function
_path_delete = lib.TCOD_dijkstra_delete
def set_goal(self, x: int, y: int) -> None:
"""Set the goal point and recompute the Dijkstra path-finder.
"""
lib.TCOD_dijkstra_compute(self._path_c, x, y)
def get_path(self, x: int, y: int) -> List[Tuple[int, int]]:
"""Return a list of (x, y) steps to reach the goal point, if possible.
"""
lib.TCOD_dijkstra_path_set(self._path_c, x, y)
path = []
pointer_x = ffi.new("int[2]")
pointer_y = pointer_x + 1
while lib.TCOD_dijkstra_path_walk(self._path_c, pointer_x, pointer_y):
self = cls(event_type)
self.sdl_event = sdl_event
return self
def __repr__(self) -> str:
return "tcod.event.%s(type=%r)" % (self.__class__.__name__, self.type)
__WINDOW_TYPES = {
lib.SDL_WINDOWEVENT_SHOWN: "WindowShown",
lib.SDL_WINDOWEVENT_HIDDEN: "WindowHidden",
lib.SDL_WINDOWEVENT_EXPOSED: "WindowExposed",
lib.SDL_WINDOWEVENT_MOVED: "WindowMoved",
lib.SDL_WINDOWEVENT_RESIZED: "WindowResized",
lib.SDL_WINDOWEVENT_SIZE_CHANGED: "WindowSizeChanged",
lib.SDL_WINDOWEVENT_MINIMIZED: "WindowMinimized",
lib.SDL_WINDOWEVENT_MAXIMIZED: "WindowMaximized",
lib.SDL_WINDOWEVENT_RESTORED: "WindowRestored",
lib.SDL_WINDOWEVENT_ENTER: "WindowEnter",
lib.SDL_WINDOWEVENT_LEAVE: "WindowLeave",
lib.SDL_WINDOWEVENT_FOCUS_GAINED: "WindowFocusGained",
lib.SDL_WINDOWEVENT_FOCUS_LOST: "WindowFocusLost",
lib.SDL_WINDOWEVENT_CLOSE: "WindowClose",
lib.SDL_WINDOWEVENT_TAKE_FOCUS: "WindowTakeFocus",
lib.SDL_WINDOWEVENT_HIT_TEST: "WindowHitTest",
}
class WindowMoved(WindowEvent):
"""
Attributes:
type (str): Always "WINDOWMOVED".
x (int): Movement on the x-axis.
def __init__(self, graph: Union[CustomGraph, SimpleGraph]):
self._graph = graph
self._order = graph._order
self._frontier_p = ffi.gc(
lib.TCOD_frontier_new(self._graph._ndim), lib.TCOD_frontier_delete
)
self._distance = maxarray(self._graph._shape_c)
self._travel = _world_array(self._graph._shape_c)
self._distance_p = _export(self._distance)
self._travel_p = _export(self._travel)
self._heuristic = (
None
) # type: Optional[Tuple[int, int, int, int, Tuple[int, ...]]]
self._heuristic_p = ffi.NULL # type: Any
return 0, 0
xy = ffi.new("double[2]", (x, y))
lib.TCOD_sys_pixel_to_tile(xy, xy + 1)
return xy[0], xy[1]
Point = NamedTuple("Point", [("x", int), ("y", int)])
# manually define names for SDL macros
BUTTON_LEFT = lib.SDL_BUTTON_LEFT
BUTTON_MIDDLE = lib.SDL_BUTTON_MIDDLE
BUTTON_RIGHT = lib.SDL_BUTTON_RIGHT
BUTTON_X1 = lib.SDL_BUTTON_X1
BUTTON_X2 = lib.SDL_BUTTON_X2
BUTTON_LMASK = lib.SDL_BUTTON_LMASK
BUTTON_MMASK = lib.SDL_BUTTON_MMASK
BUTTON_RMASK = lib.SDL_BUTTON_RMASK
BUTTON_X1MASK = lib.SDL_BUTTON_X1MASK
BUTTON_X2MASK = lib.SDL_BUTTON_X2MASK
# reverse tables are used to get the tcod.event name from the value.
_REVERSE_BUTTON_TABLE = {
BUTTON_LEFT: "BUTTON_LEFT",
BUTTON_MIDDLE: "BUTTON_MIDDLE",
BUTTON_RIGHT: "BUTTON_RIGHT",
BUTTON_X1: "BUTTON_X1",
BUTTON_X2: "BUTTON_X2",
}
_REVERSE_BUTTON_MASK_TABLE = {
BUTTON_LMASK: "BUTTON_LMASK",
BUTTON_MMASK: "BUTTON_MMASK",
def size(self) -> Tuple[int, int]:
"""Return the pixel (width, height) of the window.
This attribute can be set to change the size of the window but the
given size must be greater than (1, 1) or else an exception will be
raised.
"""
xy = ffi.new("int[2]")
lib.SDL_GetWindowSize(self.p, xy, xy + 1)
return xy[0], xy[1]
__WINDOW_TYPES = {
lib.SDL_WINDOWEVENT_SHOWN: "WindowShown",
lib.SDL_WINDOWEVENT_HIDDEN: "WindowHidden",
lib.SDL_WINDOWEVENT_EXPOSED: "WindowExposed",
lib.SDL_WINDOWEVENT_MOVED: "WindowMoved",
lib.SDL_WINDOWEVENT_RESIZED: "WindowResized",
lib.SDL_WINDOWEVENT_SIZE_CHANGED: "WindowSizeChanged",
lib.SDL_WINDOWEVENT_MINIMIZED: "WindowMinimized",
lib.SDL_WINDOWEVENT_MAXIMIZED: "WindowMaximized",
lib.SDL_WINDOWEVENT_RESTORED: "WindowRestored",
lib.SDL_WINDOWEVENT_ENTER: "WindowEnter",
lib.SDL_WINDOWEVENT_LEAVE: "WindowLeave",
lib.SDL_WINDOWEVENT_FOCUS_GAINED: "WindowFocusGained",
lib.SDL_WINDOWEVENT_FOCUS_LOST: "WindowFocusLost",
lib.SDL_WINDOWEVENT_CLOSE: "WindowClose",
lib.SDL_WINDOWEVENT_TAKE_FOCUS: "WindowTakeFocus",
lib.SDL_WINDOWEVENT_HIT_TEST: "WindowHitTest",
}
class WindowMoved(WindowEvent):
"""
Attributes:
type (str): Always "WINDOWMOVED".
x (int): Movement on the x-axis.
x (int): Movement on the y-axis.
"""
def __init__(self, x: int, y: int) -> None:
super().__init__(None)
self.x = x
self.y = y
index = tuple(index) # Check for bad input.
if len(index) != self._graph._ndim:
raise TypeError(
"Index must be %i items, got %r" % (self._distance.ndim, index)
)
self.resolve(index)
if self._order == "F": # Convert to ij indexing order.
index = index[::-1]
length = _check(
lib.get_travel_path(
self._graph._ndim, self._travel_p, index, ffi.NULL,
)
)
path = np.ndarray((length, self._graph._ndim), dtype=np.intc)
_check(
lib.get_travel_path(
self._graph._ndim,
self._travel_p,
index,
ffi.from_buffer("int*", path),
)
)
return path[:, ::-1] if self._order == "F" else path
def __getstate__(self) -> Any:
state = self.__dict__.copy()
del state["_path_c"]
del state["shape"]
del state["_callback"]
del state["_userdata"]
return state
def __setstate__(self, state: Any) -> None:
self.__dict__.update(state)
self.__init__(self.cost, self.diagonal) # type: ignore
_path_new_using_map = lib.TCOD_path_new_using_map
_path_new_using_function = lib.TCOD_path_new_using_function
_path_delete = lib.TCOD_path_delete
class AStar(_PathFinder):
"""
Args:
cost (Union[tcod.map.Map, numpy.ndarray, Any]):
diagonal (float): Multiplier for diagonal movement.
A value of 0 will disable diagonal movement entirely.
"""
def get_path(
self, start_x: int, start_y: int, goal_x: int, goal_y: int
) -> List[Tuple[int, int]]:
"""Return a list of (x, y) steps to reach the goal point, if possible.
Args: