feat(sim): tile grid and static entity base
This commit is contained in:
1 parent
990fd2dd0e
commit
bf2ab194e4
2 files changed
+155
No files matched your search
@@ -0,0 +1,58 @@
|
|||||||
|
import itertools
|
||||||
|
|
||||||
|
from .geometry import Aabb
|
||||||
|
|
||||||
|
_idCounter = itertools.count(1)
|
||||||
|
|
||||||
|
|
||||||
|
class Actor:
|
||||||
|
def __init__(self, x, y, w, h):
|
||||||
|
self.id = next(_idCounter)
|
||||||
|
self.x = float(x)
|
||||||
|
self.y = float(y)
|
||||||
|
self.w = float(w)
|
||||||
|
self.h = float(h)
|
||||||
|
self.vx = 0.0
|
||||||
|
self.vy = 0.0
|
||||||
|
self.facing = 1
|
||||||
|
self.onGround = False
|
||||||
|
self.onCeiling = False
|
||||||
|
self.onWallLeft = False
|
||||||
|
self.onWallRight = False
|
||||||
|
self.groundPlatform = None
|
||||||
|
self.alive = True
|
||||||
|
self.removed = False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def aabb(self):
|
||||||
|
return Aabb(self.x, self.y, self.w, self.h)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def centerX(self):
|
||||||
|
return self.x + self.w * 0.5
|
||||||
|
|
||||||
|
@property
|
||||||
|
def centerY(self):
|
||||||
|
return self.y + self.h * 0.5
|
||||||
|
|
||||||
|
@property
|
||||||
|
def left(self):
|
||||||
|
return self.x
|
||||||
|
|
||||||
|
@property
|
||||||
|
def right(self):
|
||||||
|
return self.x + self.w
|
||||||
|
|
||||||
|
@property
|
||||||
|
def top(self):
|
||||||
|
return self.y
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bottom(self):
|
||||||
|
return self.y + self.h
|
||||||
|
|
||||||
|
def hurtBox(self):
|
||||||
|
return self.aabb
|
||||||
|
|
||||||
|
def kill(self):
|
||||||
|
self.alive = False
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
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
|
||||||
Reference in new issue
Block a user