added flags to entities, and used this instead of solid

This commit is contained in:
troido 2017-10-29 23:00:47 +01:00
parent 2c2aa878ee
commit f2ad73c3c3
8 changed files with 36 additions and 31 deletions

View File

@ -69,7 +69,6 @@ The idea is to make 3 different kind of areas:
- equipment
- autofight/autoretaliate?
- display target enemy health
- write converter to convert tiled map files to readable files
- better reaction on player death
- room unloading when there are no players
- better inventory selection
@ -78,7 +77,12 @@ The idea is to make 3 different kind of areas:
- world persistence
- support websockets
- windows comptibility (libtcod/tdl instead of ncurses?)
- multicharacter sprites in client
- write converter to convert tiled map files to readable files
## Other Ideas
- multicharacter sprites
- plants growing as cellular automata
## DONE

View File

@ -53,11 +53,10 @@
"+": "floor",
"^": ["spiketrap"],
"r": ["grass", "rabbit"],
"$": {
"$": [{
"type": "roomexit",
"args": ["basement", "toarena"],
"kwargs": {"sprite": "floor"}
},
"args": ["basement", "toarena"]
}, "floor"],
"g": [
"ground",
{

View File

@ -52,16 +52,15 @@
".": "floor",
"^": ["spiketrap"],
"r": ["grass", "rabbit"],
"<": {
"<": [{
"type": "roomexit",
"args": ["begin", "stairdown"],
"kwargs": {"sprite": "stairup"}
},
"$": {
"kwargs": {"sprite": "stairup", "size": 1}
}, "floor"],
"$": [{
"type": "roomexit",
"args": ["arena"],
"kwargs": {"sprite": "floor"}
},
"args": ["arena"]
}, "floor"],
" ": []
}
}

View File

@ -52,11 +52,11 @@
".": "ground",
"+": "floor",
"^": ["spiketrap"],
">": {
">": [{
"type": "roomexit",
"args": ["basement","stairup"],
"kwargs": {"sprite": "stairdown"}
},
"kwargs": {"sprite": "stairdown", "size": 1}
}, "floor"],
"r": ["grass", "rabbit"]
}
}

View File

@ -14,13 +14,13 @@ class Entity:
Remove methods are for cleanup, like unsubscribing from events.
"""
def __init__(self, sprite=' ', solid=False, height=0, name=None, components={}):
def __init__(self, sprite=' ', height=0, name=None, components={}, flags=set()):
self.sprite = sprite # the name of the image to display for this entity
self.solid = solid
self.height = height # if multiple objects are on a square, the tallest one is drawn
self.name = name if name else sprite # human readable name/description
self.components = components
self.observable = event.Event()
self.flags = frozenset(flags)
self.ground = None
self.roomData = None
@ -84,6 +84,6 @@ class Entity:
objects.discard(self)
return objects
def isSolid(self):
return self.solid
def getFlags(self):
return self.flags

View File

@ -25,15 +25,15 @@ entities = {}
def makeWall():
return Entity(sprite="wall", height=2, solid=True)
return Entity(sprite="wall", height=2, flags={"solid"})
entities["wall"] = makeWall
def makeRock():
return Entity(sprite="rock", height=10, solid=True)
return Entity(sprite="rock", height=10, flags={"solid"})
entities["rock"] = makeRock
def makeTree():
return Entity(sprite="tree", height=3, solid=True)
return Entity(sprite="tree", height=3, flags={"solid"})
entities["tree"] = makeTree
def makeStone():
@ -45,22 +45,22 @@ def makePebble():
entities["pebble"] = makePebble
def makeGrass():
return Entity(sprite=random.choice(["ground", "grass1", "grass2", "grass3"]), height=0.1)
return Entity(sprite=random.choice(["ground", "grass1", "grass2", "grass3"]), height=0.1, flags={"floor"})
entities["grass"] = makeGrass
def makeFloor():
return Entity(sprite="floor", height=0)
return Entity(sprite="floor", height=0.1, flags={"floor"})
entities["floor"] = makeFloor
def makeGround():
return Entity(sprite="ground", height=0)
return Entity(sprite="ground", height=0.1, flags={"floor"})
entities["ground"] = makeGround
def makeWater():
return Entity(sprite="water", height=0, solid=True)
return Entity(sprite="water", height=0)
entities["water"] = makeWater
def makeRoomExit(destRoom, destPos=None, sprite="exit", size=1):
def makeRoomExit(destRoom, destPos=None, sprite="exit", size=0):
return Entity(sprite=sprite, height=size, components={"collision": Portal(destRoom, destPos)})
entities["roomexit"] = makeRoomExit
@ -130,7 +130,7 @@ entities["seed"] = makeSeed
def makeBuiltWall():
return Entity(sprite="wall", height=2, solid=True, components={"fighter": Fighter(maxHealth=100, strength=0), "alignment": Alignment(faction.NONE), "loot": Loot([("stone", 1)])})
return Entity(sprite="wall", height=2, components={"fighter": Fighter(maxHealth=100, strength=0), "alignment": Alignment(faction.NONE), "loot": Loot([("stone", 1)])}, flags={"solid"})
entities["builtwall"] = makeBuiltWall

View File

@ -13,8 +13,12 @@ class GroundPatch:
self.neighbours = None
self.event = event.Event()
def getFlags(self):
return set().union(*[obj.getFlags() for obj in self.getObjs()])
def accessible(self):
return not any(obj.isSolid() for obj in self.objects)
flags = self.getFlags()
return "floor" in flags and "solid" not in flags
def addObj(self, obj):
oldTop = self._getTopObj()

View File

@ -52,7 +52,6 @@ class Player:
pos = place or room.getEntrance()
self.entity = entity.Entity(
sprite = "player",
solid = False,
height = 2,
name = '~' + self.name,
components={