100 lines
3.1 KiB
Python
Executable File
100 lines
3.1 KiB
Python
Executable File
import socket, select
|
|
import apiutil
|
|
from vec3 import Vec3
|
|
from event import TileEvent
|
|
|
|
comm = None
|
|
def connect(address, port=4711):
|
|
global comm
|
|
comm = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
|
comm.connect((address, 4711))
|
|
|
|
connect("localhost")
|
|
|
|
def drainSocket(s):
|
|
while True:
|
|
read, w, x = select.select([s], [], [], 0.0)
|
|
if len(read) == 0: break
|
|
s.recv(1500)
|
|
|
|
def generateFunc(name, unpack=None):
|
|
def _inner(*l):
|
|
s = apiutil.call(name,*l)
|
|
drainSocket(comm)
|
|
comm.send(s)
|
|
if not unpack: return
|
|
|
|
r = comm.recv(1024)
|
|
if r != "Fail\n":
|
|
return unpack(r)
|
|
return _inner
|
|
|
|
def unpackArrayTo(func, f=lambda x:x):
|
|
"""Calling func with unpacked array element arguments"""
|
|
def _inner(s): return [func(*map(f, e.split(","))) for e in s.split("|") if e.strip()]
|
|
return _inner
|
|
|
|
def unpackTo(func, f=lambda x:x):
|
|
"""Calling func with unpacked arguments"""
|
|
def _inner(s): return func(*map(f, s.split(",")))
|
|
return _inner
|
|
|
|
def postMessageLoop():
|
|
n = 0
|
|
while 1:
|
|
postMessage(n)
|
|
n += 1
|
|
|
|
def Print(s):
|
|
print(s)
|
|
|
|
def readV3(s): return unpackTo(Vec3, float)(s)
|
|
def readV3ints(s): return unpackTo(Vec3, lambda x:int(float(x)))(s)
|
|
|
|
class Holder:
|
|
pass
|
|
|
|
# Block, world
|
|
world = Holder()
|
|
world.setBlock = generateFunc("world.setBlock")
|
|
world.getBlock = generateFunc("world.getBlock", int)
|
|
world.setBlocks = generateFunc("world.setBlocks")
|
|
world.getHeight = generateFunc("world.getHeight", int)
|
|
world.getPlayerIds = generateFunc("world.getPlayerIds", unpackArrayTo(int))
|
|
world.setting = generateFunc("world.setting")
|
|
|
|
# Checkpoint
|
|
world.checkpoint = Holder()
|
|
world.checkpoint.save = generateFunc("world.checkpoint.save")
|
|
world.checkpoint.restore= generateFunc("world.checkpoint.restore")
|
|
# = generateFunc("entity.getType
|
|
|
|
# Player
|
|
player = Holder()
|
|
player.setTile = generateFunc("player.setTile")
|
|
player.getTile = generateFunc("player.getTile", readV3ints)
|
|
player.setPos = generateFunc("player.setPos")
|
|
player.getPos = generateFunc("player.getPos", readV3)
|
|
player.setting = generateFunc("player.setting")
|
|
|
|
# Camera
|
|
camera = Holder()
|
|
camera.setNormal = generateFunc("camera.mode.setNormal")
|
|
#camera.setThirdPerson = generateFunc("camera.mode.setThirdPerson")
|
|
camera.setFixed = generateFunc("camera.mode.setFixed")
|
|
camera.setFollow = generateFunc("camera.mode.setFollow")
|
|
camera.setPos = generateFunc("camera.setPos")
|
|
#setCameraFollow1 = generateFunc("camera.mode.setFollowWithPosition")
|
|
#setCameraFollow2 = generateFunc("camera.mode.setFollowWithRotation")
|
|
|
|
# Events
|
|
events = Holder()
|
|
events.block = Holder()
|
|
events.block.hits = generateFunc("events.block.hits", unpackArrayTo(TileEvent.Hit, int))
|
|
#pollChat = generateFunc("events.chat", unpackArrayTo(TileEvent.Hit, int))
|
|
# Chat
|
|
chat = Holder()
|
|
chat.post = generateFunc("chat.post")
|
|
|
|
from functools import partial
|
|
setAutojump = partial(player.setting, "autojump") |