Example #1
0
 def _setstate_old(self, state: Any) -> None:
     self._random = state[0]
     self.noise_c = ffi.new("struct TCOD_Noise*")
     self.noise_c.ndim = state[3]
     ffi.buffer(self.noise_c.map)[:] = state[4]
     ffi.buffer(self.noise_c.buffer)[:] = state[5]
     self.noise_c.H = state[6]
     self.noise_c.lacunarity = state[7]
     ffi.buffer(self.noise_c.exponent)[:] = state[8]
     if state[9]:
         # high change of this being prematurely garbage collected!
         self.__waveletTileData = ffi.new("float[]", 32 * 32 * 32)
         ffi.buffer(self.__waveletTileData)[:] = state[9]
     self.noise_c.noise_type = state[10]
     self._tdl_noise_c = ffi.new(
         "TDLNoise*", (self.noise_c, self.noise_c.ndim, state[1], state[2]))
Example #2
0
 def __new__(cls, image: Any) -> "_ImageBufferArray":
     size = image.height * image.width
     self = np.frombuffer(ffi.buffer(lib.TCOD_image_get_colors()[size]),
                          np.uint8)
     self = self.reshape((image.height, image.width, 3)).view(cls)
     self._image_c = image.cdata
     return self  # type: ignore
Example #3
0
    def _init_setup_console_data(self, order: str = "C") -> None:
        """Setup numpy arrays over libtcod data buffers."""
        global _root_console
        self._key_color = None
        if self.console_c == ffi.NULL:
            _root_console = self
            self._console_data = lib.TCOD_ctx.root
        else:
            self._console_data = ffi.cast("struct TCOD_Console*",
                                          self.console_c)

        self._tiles = np.frombuffer(
            ffi.buffer(self._console_data.tiles[0:self.width * self.height]),
            dtype=self.DTYPE,
        ).reshape((self.height, self.width))

        self._order = tcod._internal.verify_order(order)
Example #4
0
def _compile_cost_edges(edge_map: Any) -> Tuple[Any, int]:
    """Return an edge_cost array using an integer map."""
    edge_map = np.copy(edge_map)
    if edge_map.ndim != 2:
        raise ValueError("edge_map must be 2 dimensional. (Got %i)" %
                         edge_map.ndim)
    edge_center = edge_map.shape[0] // 2, edge_map.shape[1] // 2
    edge_map[edge_center] = 0
    edge_map[edge_map < 0] = 0
    edge_nz = edge_map.nonzero()
    edge_array = np.transpose(edge_nz)
    edge_array -= edge_center
    c_edges = ffi.new("int[]", len(edge_array) * 3)
    edges = np.frombuffer(ffi.buffer(c_edges),
                          dtype=np.intc).reshape(len(edge_array), 3)
    edges[:, :2] = edge_array
    edges[:, 2] = edge_map[edge_nz]
    return c_edges, len(edge_array)