merged roomedge into portal, moved tcommunicate and utils to common folder and fixed package when starting main directory
This commit is contained in:
parent
b3fc583cb1
commit
2b268de063
|
@ -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:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
import socket
|
||||
|
||||
from .tcommunicate import send, receive
|
||||
from asciifarm.common.tcommunicate import send, receive
|
||||
|
||||
class Connection:
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
"!": ["grass", "club"],
|
||||
"]": ["grass", "armour"],
|
||||
"1": [{
|
||||
"type": "roomboundary",
|
||||
"type": "roomexit",
|
||||
"args": ["right", [1, 0], [false, true]]
|
||||
}, "grass"],
|
||||
" ": []
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
"X": "rock",
|
||||
"^": ["spiketrap", "ground"],
|
||||
"1": [{
|
||||
"type": "roomboundary",
|
||||
"type": "roomexit",
|
||||
"args": ["begin", [-2, 0], [false, true]]
|
||||
}, "grass"],
|
||||
"%": [{
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
"X": "rock",
|
||||
"^": ["spiketrap", "ground"],
|
||||
"1": [{
|
||||
"type": "roomboundary",
|
||||
"type": "roomexit",
|
||||
"args": ["begin", [-2, 0], [false, true]]
|
||||
}, "grass"],
|
||||
"%": [{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from .. import timeout
|
||||
from .. import utils
|
||||
from asciifarm.common import utils
|
||||
import random
|
||||
from .component import Component
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from . import utils
|
||||
from asciifarm.common import utils
|
||||
|
||||
|
||||
class Grid:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
Loading…
Reference in New Issue