Asciifarm/asciifarm/server/world.py

73 lines
1.8 KiB
Python

from . import room
from . import player
# The World class is like the model in the MVC pattern (though the rest is not that clear)
class World:
def __init__(self, data={"begin": None, "rooms": {}}):
self.rooms = {}
self.beginRoom = data["begin"]
self.players = {}
for roomname, roomdata in data["rooms"].items():
self.makeRoom(roomname, roomdata)
def createPlayer(self, name, data=None):
if name in self.players:
raise Exception("Can not make new player with the name of an existing player")
pl = player.Player(name, self)
self.players[name] = pl
return pl
def playerJoin(self, name):
pl = self.players[name]
r = pl.getRoom()
if not r:
r = self.getBeginRoom()
pl.joinRoom(r)
return pl
def makeRoom(self, name, data):
ro = room.Room(name, data)
self.rooms[name] = ro
return ro
def update(self):
for r in self.rooms.values():
r.update()
for player in self.players:
self.controlPlayer(player, None)
def getPlayer(self, playername):
return self.players[playername]
def hasPlayer(self, playername):
return playername in self.players
def getRoom(self, roomname):
return self.rooms.get(roomname)
def getBeginRoom(self):
return self.beginRoom
def controlPlayer(self, playername, action):
self.players[playername].control(action)
def removePlayer(self, name):
if name not in self.players:
return
pl = self.players[name]
pl.leaveRoom()
def resetChangedCells(self):
for room in self.rooms.values():
room.resetChangedCells()