made rain possible

This commit is contained in:
troido 2019-01-20 14:33:09 +01:00
parent 8bb1f394c3
commit abe4f555e4
6 changed files with 49 additions and 4 deletions

View File

@ -41,6 +41,7 @@
"rat": ["",7],
"closeddoor": ["",1 ,3],
"opendoor": ["",3],
"raindrop": ["",12],
" ": [" ", 7]
},
"default": ["", 7],

View File

@ -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": {

View File

@ -21,3 +21,4 @@ from .spawner import Spawner
from .staticserializer import StaticSerializer
from .trap import Trap
from .volatile import Volatile
from .weather import Weather

View File

@ -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)

View File

@ -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)})

View File

@ -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