# -*- coding: utf-8 -*- """ Python class for DF_Hack::Maps """ from ._pydfhack import _MapManager from .mixins import NeedsStart from .decorators import suspend from .blocks import Block, Point class Map(NeedsStart, _MapManager): api = None cls = _MapManager def __init__(self, api, *args, **kwds): self.cls.__init__(self, args, kwds) self.api = api @suspend def get_size(self): return self.size @suspend def Is_Valid_Block(self, x=0, y=0, z=0, point=None): """ Checks if coords are valid """ if point: point = point.get_block() x, y, z = point.xyz return self.cls.Is_Valid_Block(self, x, y, z) @suspend def Read_Tile_Types(self, x=0, y=0, z=0, point=None): """ Returns 16x16 block in form of list of lists. Should be called either by point or x,y,z coords. Coords are in block form. """ if point: point = point.get_block() x, y, z = point.xyz return self.cls.Read_Tile_Types(self, x, y, z) @suspend def Write_Tile_Types(self, x=0, y=0, z=0, tiles=None, point=None): if point: point = point.get_block() x, y, z = point.xyz return self.cls.Write_Tile_Types(self, x, y, z, tiles) @suspend def Read_Designations(self, x=0, y=0, z=0, point=None): """ Returns 16x16 block in form of list of lists. """ if point: point = point.get_block() x, y, z = point.xyz return self.cls.Read_Designations(self, x, y, z) @suspend def Write_Designations(self, x=0, y=0, z=0, tiles=None, point=None): if point: point = point.get_block() x, y, z = point.xyz return self.cls.Write_Designations(self, x, y, z, tiles) @suspend def Write_Occupancy(self, *args, **kw): return self.cls.Write_Occupancy(self, *args, **kw) @suspend def Write_Dirty_Bit(self, *args, **kw): return self.cls.Write_Dirty_Bit(self, *args, **kw) @suspend def Write_Block_Flags(self, *args, **kw): return self.cls.Write_Block_Flags(self, *args, **kw) @suspend def Read_Region_Offsets(self, *args, **kw): return self.cls.Read_Region_Offsets(self, *args, **kw) @suspend def Read_Dirty_Bit(self, *args, **kw): return self.cls.Read_Dirty_Bit(self, *args, **kw) @suspend def Read_Occupancy(self, *args, **kw): return self.cls.Read_Occupancy(self, *args, **kw) @suspend def Read_Block_Flags(self, *args, **kw): return self.cls.Read_Block_Flags(self, *args, **kw) @suspend def Read_Geology(self, *args, **kw): return self.cls.Read_Geology(self, *args, **kw) @suspend def Read_Block_40d(self, *args, **kw): return self.cls.Read_Block_40d(self, *args, **kw) @suspend def get_block(self, point): point = point.get_block() block = Block(api=self.api, coords=point) return block @suspend def get_tile(self, x=0, y=0, z=0, point=None): if not point: point = Point(x, y, z) block = Block(api=self.api, coords=point.get_block()) return block.get_tile(point=point)