created buildable doors (that regain full health when opened/closed
This commit is contained in:
parent
c06e1c9b27
commit
5e0514ddbd
|
@ -8,11 +8,13 @@ class Change(Component):
|
|||
This could probably also be implemented with a combination of harvest and loot,
|
||||
but this seemed better."""
|
||||
|
||||
def __init__(self, into, nextArgs=None, nextKwargs=None):
|
||||
def __init__(self, into, permitted=None, nextArgs=None, nextKwargs=None):
|
||||
|
||||
self.into = into
|
||||
self.nextArgs = nextArgs or []
|
||||
self.nextKwargs = nextKwargs or {}
|
||||
|
||||
self.permitted = permitted
|
||||
|
||||
def attach(self, obj):
|
||||
self.owner = obj
|
||||
|
@ -21,7 +23,17 @@ class Change(Component):
|
|||
def roomJoin(self, o, roomData):
|
||||
self.roomData = roomData
|
||||
|
||||
def interact(self, obj):
|
||||
def interact(self, other):
|
||||
if self.permitted is not None and other.getName() not in self.permitted:
|
||||
return
|
||||
obj = gameobjects.makeEntity(self.into, self.roomData, *self.nextArgs, preserve=self.owner.isPreserved(), **self.nextKwargs)
|
||||
obj.place(self.owner.getGround())
|
||||
self.owner.remove()
|
||||
|
||||
def toJSON(self):
|
||||
return {
|
||||
"into": self.into,
|
||||
"permitted": self.permitted,
|
||||
"nextArgs": self.nextArgs,
|
||||
"nextKwargs": self.nextKwargs
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
from .component import Component
|
||||
|
||||
|
||||
class HomePortal(Component):
|
||||
|
||||
def __init__(self, roomName="*home:{}"):
|
||||
self.roomName = roomName
|
||||
|
||||
def attach(self, obj):
|
||||
obj.addListener("objectenter", self.onEnter)
|
||||
self.owner = obj
|
||||
|
||||
|
||||
def onEnter(self, owner, obj=None, *data):
|
||||
|
||||
obj.trigger("changeroom", self.destRoom, dest)
|
||||
|
||||
def toJSON(self):
|
||||
return {
|
||||
"destRoom": self.destRoom,
|
||||
"destPos": self.origin,
|
||||
"mask": self.mask
|
||||
}
|
||||
|
|
@ -80,7 +80,7 @@ entities["troll"] = lambda home=None: Entity(sprite="troll", height=1.8, compone
|
|||
"fighter": Fighter(maxHealth=75, strength=15, slowness=10),
|
||||
"alignment": Alignment(faction.EVIL),
|
||||
"controller": MonsterAi(viewDist=8, moveChance=0.01, home=home),
|
||||
"loot": Loot([("stone", 1), ("stone", .3), ("pebble", .5), ("pebble", .5), ("pebble", .5)])
|
||||
"loot": Loot([("stone", 1), ("stone", .3), ("pebble", .5), ("pebble", .5), ("pebble", .5), ("hardwood", 0.1)])
|
||||
})
|
||||
|
||||
entities["rat"] = lambda home=None: Entity(sprite="rat", height=1, components={
|
||||
|
@ -118,6 +118,8 @@ entities["sword"] = lambda: Entity(sprite="sword", height=0.5, components={"item
|
|||
|
||||
entities["club"] = lambda: Entity(sprite="club", height=0.5, components={"item": Equippable("hand", {"strength": 3})})
|
||||
|
||||
entities["weapon"] = lambda strength=0, name="weapon": Entity(sprite="sword", name=name, height=0.5, components={"item": Equippable("hand", {"strength": strength})})
|
||||
|
||||
entities["armour"] = lambda: Entity(sprite="armour", height=0.5, components={"item": Equippable("body", {"defense": 100})})
|
||||
|
||||
entities["wound"] = lambda duration=4, height=0.2: Entity(sprite="wound", height=height, components={"volatile": Volatile(duration)})
|
||||
|
@ -126,6 +128,20 @@ entities["closeddoor"] = lambda: Entity(sprite="closeddoor", name="door", height
|
|||
|
||||
entities["opendoor"] = lambda: Entity(sprite="opendoor", name="door", height=1, flags={"occupied"}, components={"interact": Change("closeddoor")})
|
||||
|
||||
entities["builtcloseddoor"] = lambda: Entity(sprite="closeddoor", name="door", height=2, flags={"solid"}, components={
|
||||
"interact": Change("builtopendoor"),
|
||||
"fighter": Fighter(maxHealth=100, strength=0),
|
||||
"alignment": Alignment(faction.NONE),
|
||||
"loot": Loot([("stone", 1)])})
|
||||
|
||||
entities["builtopendoor"] = lambda: Entity(sprite="opendoor", name="door", height=1, flags={"occupied"}, components={
|
||||
"interact": Change("builtcloseddoor"),
|
||||
"fighter": Fighter(maxHealth=100, strength=0),
|
||||
"alignment": Alignment(faction.NONE),
|
||||
"loot": Loot([("stone", 1)])})
|
||||
|
||||
entities["hardwood"] = lambda: Entity(sprite="hardwood", height=0.4, components={"item": Build("builtcloseddoor", flagsNeeded={"freeland"}, blockingFlags={"solid", "occupied"})})
|
||||
|
||||
def makeEntity(entType, roomData, *args, preserve=False, **kwargs):
|
||||
entity = entities[entType](*args, **kwargs)
|
||||
entity.construct(roomData, preserve)
|
||||
|
|
Loading…
Reference in New Issue