98 lines
2.4 KiB
Python
98 lines
2.4 KiB
Python
AIR = "air"
|
|
|
|
|
|
class TileDef:
|
|
__slots__ = ("name", "solid", "oneWay", "hazard", "ladder", "slope", "damage")
|
|
|
|
def __init__(self, name, solid=False, oneWay=False, hazard=False, ladder=False, slope=None, damage=0):
|
|
self.name = name
|
|
self.solid = solid
|
|
self.oneWay = oneWay
|
|
self.hazard = hazard
|
|
self.ladder = ladder
|
|
self.slope = slope
|
|
self.damage = damage
|
|
|
|
|
|
tileRegistry = {
|
|
AIR: TileDef(AIR),
|
|
"ground": TileDef("ground", solid=True),
|
|
"brick": TileDef("brick", solid=True),
|
|
"stone": TileDef("stone", solid=True),
|
|
"dirt": TileDef("dirt", solid=True),
|
|
"platform": TileDef("platform", oneWay=True),
|
|
"woodOneWay": TileDef("woodOneWay", oneWay=True),
|
|
"spike": TileDef("spike", hazard=True, damage=2),
|
|
"lava": TileDef("lava", hazard=True, damage=3),
|
|
"ladder": TileDef("ladder", ladder=True),
|
|
"ladderTop": TileDef("ladderTop", ladder=True, oneWay=True),
|
|
"slopeRight": TileDef("slopeRight", slope="ascendRight"),
|
|
"slopeLeft": TileDef("slopeLeft", slope="ascendLeft"),
|
|
"pipeTL": TileDef("pipeTL", solid=True),
|
|
"pipeTR": TileDef("pipeTR", solid=True),
|
|
"pipeBL": TileDef("pipeBL", solid=True),
|
|
"pipeBR": TileDef("pipeBR", solid=True),
|
|
}
|
|
|
|
|
|
asciiToTile = {
|
|
"X": "ground",
|
|
"#": "brick",
|
|
"S": "stone",
|
|
"D": "dirt",
|
|
"=": "platform",
|
|
"-": "woodOneWay",
|
|
"^": "spike",
|
|
"~": "lava",
|
|
"H": "ladder",
|
|
"T": "ladderTop",
|
|
"/": "slopeRight",
|
|
"\\": "slopeLeft",
|
|
"L": "pipeTL",
|
|
"R": "pipeTR",
|
|
"l": "pipeBL",
|
|
"r": "pipeBR",
|
|
}
|
|
|
|
tileToAscii = {value: key for key, value in asciiToTile.items()}
|
|
|
|
|
|
asciiEntities = {
|
|
"p": "playerSpawn",
|
|
"g": "goomba",
|
|
"c": "chaser",
|
|
"f": "flyer",
|
|
"s": "shooter",
|
|
"o": "coin",
|
|
"G": "gem",
|
|
"k": "key",
|
|
"v": "heart",
|
|
"@": "checkpoint",
|
|
"E": "exit",
|
|
}
|
|
|
|
|
|
def tileDef(name):
|
|
return tileRegistry.get(name, tileRegistry[AIR])
|
|
|
|
|
|
def isSolidName(name):
|
|
return tileRegistry[name].solid if name in tileRegistry else False
|
|
|
|
|
|
def isOneWayName(name):
|
|
return tileRegistry[name].oneWay if name in tileRegistry else False
|
|
|
|
|
|
def isHazardName(name):
|
|
return tileRegistry[name].hazard if name in tileRegistry else False
|
|
|
|
|
|
def isLadderName(name):
|
|
return tileRegistry[name].ladder if name in tileRegistry else False
|
|
|
|
|
|
def slopeKind(name):
|
|
definition = tileRegistry.get(name)
|
|
return definition.slope if definition else None
|