From 2b268de0631c9b74b0a6a354443a42ee51d88e09 Mon Sep 17 00:00:00 2001 From: troido Date: Sun, 31 Dec 2017 00:10:14 +0100 Subject: [PATCH] merged roomedge into portal, moved tcommunicate and utils to common folder and fixed package when starting main directory --- asciifarm/__main__.py | 6 ++-- asciifarm/client/connection.py | 2 +- asciifarm/{client => common}/tcommunicate.py | 0 asciifarm/{server => common}/utils.py | 0 asciifarm/maps/begin.json | 2 +- asciifarm/maps/right.json | 2 +- asciifarm/maps/town.json | 2 +- asciifarm/server/components/fighter.py | 2 +- asciifarm/server/components/portal.py | 22 ++++++++++---- asciifarm/server/components/roomedge.py | 31 ------------------- asciifarm/server/game.py | 2 +- asciifarm/server/gameobjects.py | 9 ++---- asciifarm/server/grid.py | 2 +- asciifarm/server/socketserver.py | 2 +- asciifarm/server/tcommunicate.py | 32 -------------------- 15 files changed, 29 insertions(+), 87 deletions(-) rename asciifarm/{client => common}/tcommunicate.py (100%) rename asciifarm/{server => common}/utils.py (100%) delete mode 100644 asciifarm/server/components/roomedge.py delete mode 100644 asciifarm/server/tcommunicate.py diff --git a/asciifarm/__main__.py b/asciifarm/__main__.py index c357e90..568569b 100644 --- a/asciifarm/__main__.py +++ b/asciifarm/__main__.py @@ -15,11 +15,11 @@ if len(sys.argv)>1 and sys.argv[1] in {"server", "client"}: else: # make it work even if it wasn't executed as module import os.path - sys.path.append(os.path.join(os.path.dirname(__file__))) + sys.path.append(os.path.join(os.path.dirname(__file__), "..")) if sys.argv[1] == "server": - from server import main + from asciifarm.server import main else: - from client import main + from asciifarm.client import main main.main(sys.argv[2:]) else: diff --git a/asciifarm/client/connection.py b/asciifarm/client/connection.py index 9ca2ccc..4eb0ffe 100644 --- a/asciifarm/client/connection.py +++ b/asciifarm/client/connection.py @@ -1,7 +1,7 @@ import socket -from .tcommunicate import send, receive +from asciifarm.common.tcommunicate import send, receive class Connection: diff --git a/asciifarm/client/tcommunicate.py b/asciifarm/common/tcommunicate.py similarity index 100% rename from asciifarm/client/tcommunicate.py rename to asciifarm/common/tcommunicate.py diff --git a/asciifarm/server/utils.py b/asciifarm/common/utils.py similarity index 100% rename from asciifarm/server/utils.py rename to asciifarm/common/utils.py diff --git a/asciifarm/maps/begin.json b/asciifarm/maps/begin.json index 777506d..75073b4 100644 --- a/asciifarm/maps/begin.json +++ b/asciifarm/maps/begin.json @@ -102,7 +102,7 @@ "!": ["grass", "club"], "]": ["grass", "armour"], "1": [{ - "type": "roomboundary", + "type": "roomexit", "args": ["right", [1, 0], [false, true]] }, "grass"], " ": [] diff --git a/asciifarm/maps/right.json b/asciifarm/maps/right.json index 2cd4fa4..1ca09bd 100644 --- a/asciifarm/maps/right.json +++ b/asciifarm/maps/right.json @@ -93,7 +93,7 @@ "X": "rock", "^": ["spiketrap", "ground"], "1": [{ - "type": "roomboundary", + "type": "roomexit", "args": ["begin", [-2, 0], [false, true]] }, "grass"], "%": [{ diff --git a/asciifarm/maps/town.json b/asciifarm/maps/town.json index 6eeeee8..955416b 100644 --- a/asciifarm/maps/town.json +++ b/asciifarm/maps/town.json @@ -94,7 +94,7 @@ "X": "rock", "^": ["spiketrap", "ground"], "1": [{ - "type": "roomboundary", + "type": "roomexit", "args": ["begin", [-2, 0], [false, true]] }, "grass"], "%": [{ diff --git a/asciifarm/server/components/fighter.py b/asciifarm/server/components/fighter.py index 85c0b5c..36df152 100644 --- a/asciifarm/server/components/fighter.py +++ b/asciifarm/server/components/fighter.py @@ -1,5 +1,5 @@ from .. import timeout -from .. import utils +from asciifarm.common import utils import random from .component import Component diff --git a/asciifarm/server/components/portal.py b/asciifarm/server/components/portal.py index 3674a22..6dbd0cd 100644 --- a/asciifarm/server/components/portal.py +++ b/asciifarm/server/components/portal.py @@ -4,21 +4,31 @@ from .component import Component class Portal(Component): - def __init__(self, destRoom, destPos=None): + def __init__(self, destRoom, destPos=(0,0), mask=(False, False)): self.destRoom = destRoom - self.destPos = destPos - if isinstance(self.destPos, list): - destPos = tuple(destPos) + self.origin = destPos + self.mask = mask def attach(self, obj): obj.addListener("objectenter", self.onEnter) + self.owner = obj + def onEnter(self, owner, obj=None, *data): - obj.trigger("changeroom", self.destRoom, self.destPos) + offset = self.owner.getGround().getPos() + if isinstance(self.origin, str): + dest = self.origin + else: + dest = tuple( + self.origin[i] + (offset[i] if self.mask[i] else 0) + for i in range(2) + ) + obj.trigger("changeroom", self.destRoom, dest) def toJSON(self): return { "destRoom": self.destRoom, - "destPos": self.destPos + "destPos": self.origin, + "mask": self.mask } diff --git a/asciifarm/server/components/roomedge.py b/asciifarm/server/components/roomedge.py deleted file mode 100644 index b3c2b13..0000000 --- a/asciifarm/server/components/roomedge.py +++ /dev/null @@ -1,31 +0,0 @@ - -from .component import Component - -# todo: combine with portal - -class RoomEdge(Component): - - def __init__(self, destRoom, destOrigin=(0,0), mask=(True, True)): - self.destRoom = destRoom - self.origin = destOrigin - self.mask = mask - - def attach(self, obj): - obj.addListener("objectenter", self.onEnter) - self.owner = obj - - - def onEnter(self, owner, obj=None, *data): - offset = self.owner.getGround().getPos() - dest = tuple( - self.origin[i] + (offset[i] if self.mask[i] else 0) - for i in range(2) - ) - obj.trigger("changeroom", self.destRoom, dest) - - def toJSON(self): - return { - "destRoom": self.destRoom, - "destPos": self.destPos - } - diff --git a/asciifarm/server/game.py b/asciifarm/server/game.py index 4ac14b7..7f2a953 100644 --- a/asciifarm/server/game.py +++ b/asciifarm/server/game.py @@ -3,7 +3,7 @@ import time from . import gameserver from . import world from . import view -from . import utils +from asciifarm.common import utils import os import json diff --git a/asciifarm/server/gameobjects.py b/asciifarm/server/gameobjects.py index f12b75f..3f51705 100644 --- a/asciifarm/server/gameobjects.py +++ b/asciifarm/server/gameobjects.py @@ -18,7 +18,6 @@ from .components.build import Build from .components.harvest import Harvest from .components.food import Food from .components.equippable import Equippable -from .components.roomedge import RoomEdge """ This module contains factory functions for many placable entities, and a make function to call a factory by a string name """ @@ -78,14 +77,10 @@ def makeWater(): return Entity(sprite="water", height=0) entities["water"] = makeWater -def makeRoomExit(destRoom, destPos=None, sprite="exit", size=0): - return Entity(sprite=sprite, height=size, components={"collision": Portal(destRoom, destPos)}) +def makeRoomExit(destRoom, destPos=None, mask=(False, False), sprite=" ", size=0): + return Entity(sprite=sprite, height=size, components={"collision": Portal(destRoom, destPos, mask)}) entities["roomexit"] = makeRoomExit -def makeRoomBoundary(destRoom, destPos=None, mask=(True, True)): - return Entity(sprite=" ", height=0, components={"collision": RoomEdge(destRoom, destPos, mask)}) -entities["roomboundary"] = makeRoomBoundary - def makeRabbit(): return Entity(sprite="rabbit", height=1, components={"move": Move(slowness=4), "controller": RandomWalkController(moveChance=0.05)}) entities["rabbit"] = makeRabbit diff --git a/asciifarm/server/grid.py b/asciifarm/server/grid.py index d88f0c8..24c218f 100644 --- a/asciifarm/server/grid.py +++ b/asciifarm/server/grid.py @@ -1,4 +1,4 @@ -from . import utils +from asciifarm.common import utils class Grid: diff --git a/asciifarm/server/socketserver.py b/asciifarm/server/socketserver.py index 1ce3da2..8690e76 100644 --- a/asciifarm/server/socketserver.py +++ b/asciifarm/server/socketserver.py @@ -3,7 +3,7 @@ import socket import sys import threading -from .tcommunicate import send, receive +from asciifarm.common.tcommunicate import send, receive # Class to open a TCP Socket diff --git a/asciifarm/server/tcommunicate.py b/asciifarm/server/tcommunicate.py deleted file mode 100644 index b1fc1b0..0000000 --- a/asciifarm/server/tcommunicate.py +++ /dev/null @@ -1,32 +0,0 @@ - -HEADER_SIZE = 4 - - -# this module is for sending discree messages over TCP -# this is achieved by prefixing all messages with their length -# calls to send and recv will also keep attempting to send all data unless this proves impossible - - -def send(sock, msg): - length = len(msg) - header = length.to_bytes(4, byteorder="big") - totalmsg = header + msg - sock.sendall(totalmsg) - -def receive(sock): - header = recvall(sock, 4) #sock.recv(4) - length = int.from_bytes(header, byteorder="big") - return recvall(sock, length) - -def recvall(sock, length): - chunks = [] - bytes_recd = 0 - while bytes_recd < length: - chunk = sock.recv(min(length - bytes_recd, 4096)) - if chunk == b'': - break - #raise RuntimeError("socket connection broken") - chunks.append(chunk) - bytes_recd = bytes_recd + len(chunk) - return b''.join(chunks) -