made rain possible
This commit is contained in:
parent
8bb1f394c3
commit
abe4f555e4
|
@ -41,6 +41,7 @@
|
|||
"rat": ["r",7],
|
||||
"closeddoor": ["+",1 ,3],
|
||||
"opendoor": [""",3],
|
||||
"raindrop": [":",12],
|
||||
" ": [" ", 7]
|
||||
},
|
||||
"default": ["?", 7],
|
||||
|
|
|
@ -38,8 +38,9 @@
|
|||
"armour": ["[", 7],
|
||||
"wound": [" ", 7, 1],
|
||||
"rat": ["r", 7],
|
||||
"closeddoor": ["+",1 ,3],
|
||||
"opendoor": ["\"",3 ],
|
||||
"closeddoor": ["+",1, 3],
|
||||
"opendoor": ["\"", 3],
|
||||
"raindrop": [":", 12],
|
||||
" ": [" ", 7]
|
||||
},
|
||||
"writable": {
|
||||
|
|
|
@ -21,3 +21,4 @@ from .spawner import Spawner
|
|||
from .staticserializer import StaticSerializer
|
||||
from .trap import Trap
|
||||
from .volatile import Volatile
|
||||
from .weather import Weather
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
|
||||
import random
|
||||
|
||||
from .component import Component
|
||||
|
||||
class Weather(Component):
|
||||
|
||||
def __init__(self, maxspeed=1, minspeed=1, spread=0, direction="south"):
|
||||
self.maxspeed = maxspeed
|
||||
self.minspeed = minspeed
|
||||
self.spread = spread
|
||||
self.direction = direction
|
||||
|
||||
def attach(self, obj):
|
||||
self.owner = obj
|
||||
obj.addListener("roomjoin", self.roomJoin)
|
||||
|
||||
def roomJoin(self, o, roomData, stamp):
|
||||
self.moveEvent = roomData.getEvent("move")
|
||||
self.moveEvent.addListener(self.move)
|
||||
|
||||
def move(self):
|
||||
for i in range(random.randint(self.minspeed, self.maxspeed)):
|
||||
self.moveStep()
|
||||
|
||||
def moveStep(self):
|
||||
if self.owner.getGround() is None:
|
||||
return
|
||||
neighbours = self.owner.getGround().getNeighbours()
|
||||
if self.direction in neighbours:
|
||||
newPlace = neighbours[self.direction]
|
||||
self.owner.place(newPlace)
|
||||
self.owner.trigger("move")
|
||||
else:
|
||||
self.owner.remove()
|
||||
|
||||
def remove(self):
|
||||
self.moveEvent.removeListener(self.move)
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
from ..entity import Entity
|
||||
from ..components import StaticSerializer as Static
|
||||
from ..components import Portal, Spawner, Volatile
|
||||
from ..components import Portal, Spawner, Volatile, Weather
|
||||
|
||||
|
||||
entities = {}
|
||||
|
@ -26,3 +26,5 @@ entities["roomexit"] = lambda destRoom, destPos=None, mask=(False, False), sprit
|
|||
|
||||
|
||||
entities["wound"] = lambda duration=4, height=0.2: Entity(sprite="wound", name="", height=height, components={"volatile": Volatile(duration), "serialize": Static(None)})
|
||||
|
||||
entities["raindrop"] = lambda: Entity(sprite="raindrop", name="", height=10, components={"weather": Weather(maxspeed=4, minspeed=3), "serialize": Static(None)})
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
- windows comptibility (libtcod/tdl instead of ncurses?)
|
||||
- player-owned doors (and items)
|
||||
- different messages for in-game log, let client construct them
|
||||
- chat colours
|
||||
- show adjacent objects
|
||||
- have a difference between ground-like items and interesting items
|
||||
- tilled soil
|
||||
|
@ -37,6 +36,7 @@
|
|||
|
||||
## DONE
|
||||
|
||||
- chat colours
|
||||
- store non-unique and stateless objects as string
|
||||
- custom getstr
|
||||
- runtime-created rooms
|
||||
|
|
Loading…
Reference in New Issue