-def win_map():
- win_size = next(win["size"] for win in windows if win["func"] == win_map)
- offset = [0, 0]
- for i in range(2):
- if world_data["map_center"][i] * (i + 1) > win_size[i] / 2 and \
- win_size[i] < world_data["map_size"] * (i + 1):
- if world_data["map_center"][i] * (i + 1) \
- < world_data["map_size"] * (i + 1) - win_size[i] / 2:
- offset[i] = world_data["map_center"][i] * (i + 1) \
- - int(win_size[i] / 2)
- if i == 1:
- offset[1] = offset[1] + world_data["map_center"][0] % 2
- else:
- offset[i] = world_data["map_size"] * (i + 1) - win_size[i] + i
- winmap_size = [world_data["map_size"], world_data["map_size"] * 2 + 1]
- winmap = []
- curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLUE)
- curses.init_pair(2, curses.COLOR_BLUE, curses.COLOR_BLACK)
- for y in range(world_data["map_size"]):
- for x in range(world_data["map_size"]):
- char = world_data["fov_map"][y * world_data["map_size"] + x]
- if world_data["look_mode"] and y == world_data["map_center"][0] \
- and x == world_data["map_center"][1]:
- if char == " ":
- char = \
- world_data["mem_map"][y * world_data["map_size"] + x]
- winmap += [(char, curses.A_REVERSE), (" ", curses.A_REVERSE)]
- continue
- if char == " ":
- char = world_data["mem_map"][y * world_data["map_size"] + x]
- attribute = curses.color_pair(1) if char == " " \
- else curses.color_pair(2)
- winmap += [(char, attribute), (" ", attribute)]
- else:
- winmap += char + " "
- if y % 2 == 0:
- winmap += " "
- return offset, winmap_size, winmap
-
-
-def win_inventory():
- win_size = next(win["size"] for win in windows
- if win["func"] == win_inventory)
- winmap = []
- winmap_size = [0, win_size[1]]
- for line in world_data["inventory"]:
- winmap_size[1] = winmap_size[1] if len(line) <= winmap_size[1] \
- else len(line)
- count = 0
- for line in world_data["inventory"]:
- padding_size = winmap_size[1] - len(line)
- line += (" " * padding_size)
- if count == world_data["inventory_selection"]:
- line_new = []
- for x in range(len(line)):
- line_new += [(line[x], curses.A_REVERSE)]
- line = line_new
- winmap += line
- winmap_size[0] = winmap_size[0] + 1
- count += 1
- offset = [0, 0]
- if world_data["inventory_selection"] > win_size[0]/2:
- if world_data["inventory_selection"] < len(world_data["inventory"]) \
- - win_size[0]/2:
- offset[0] = world_data["inventory_selection"] - int(win_size[0]/2)
- else:
- offset[0] = len(world_data["inventory"]) - win_size[0]
- return offset, winmap_size, winmap
-
-
-def win_look():
- winmap = ""
- winmap_size = [0, 0]
- for line in world_data["look"]:
- winmap_size[1] = winmap_size[1] if len(line) <= winmap_size[1] \
- else len(line)
- for line in world_data["look"]:
- padding_size = winmap_size[1] - len(line)
- winmap += line + (" " * padding_size)
- winmap_size[0] = winmap_size[0] + 1
- offset = [world_data["look_scroll"], 0]
- return offset, winmap_size, winmap
-
-
-def win_info():
- winmap = "T: " + str(world_data["turn"]) \
- + " H: " + str(world_data["lifepoints"]) \
- + " S: " + str(world_data["satiation"])
- winmap_size = [1, len(winmap)]
- offset = [0, 0]
- return offset, winmap_size, winmap
-
-
-def win_log():
- win_size = next(win["size"] for win in windows if win["func"] == win_log)
- offset = [0, 0]
- winmap = ""
- number_of_lines = 0
- for line in world_data["log"]:
- number_of_lines += math.ceil(len(line) / win_size[1])
- padding_size = win_size[1] - (len(line) % win_size[1])
- winmap += line + (padding_size * " ")
- if number_of_lines < win_size[0]:
- winmap = (" " * win_size[1] * (win_size[0] - number_of_lines)) + winmap
- number_of_lines = win_size[0]
- elif number_of_lines > win_size[0]:
- offset[0] = number_of_lines - win_size[0]
- winmap_size = [number_of_lines, win_size[1]]
- return offset, winmap_size, winmap
-
-
-def command_quit():
- command_sender("QUIT")()
- raise SystemExit("Received QUIT command, forwarded to server, leaving.")
-
-
-def command_toggle_look_mode():
- if not world_data["look_mode"]:
- world_data["look_mode"] = True
- else:
- world_data["look_mode"] = False
- world_data["map_center"] = world_data["avatar_position"]
- query_mapcell()
-
-
-def command_sender(string, int_field=None):
- def command_send():
- int_string = ""
- if int_field:
- int_string = " " + str(world_data[int_field])
- io["file_out"].write(string + int_string + "\n")
- io["file_out"].flush()
- return command_send
-
-
-def command_looker(string):
- def command_look():
- if string == "west" \
- and world_data["map_center"][1] > 0:
- world_data["map_center"][1] -= 1
- elif string == "east" \
- and world_data["map_center"][1] < world_data["map_size"] - 1:
- world_data["map_center"][1] += 1
- else:
- y_unevenness = world_data["map_center"][0] % 2
- y_evenness = int(not(y_unevenness))
- if string[6:] == "west" and \
- world_data["map_center"][1] > -y_unevenness:
- if string[:5] == "north" and world_data["map_center"][0] > 0:
- world_data["map_center"][0] -= 1
- world_data["map_center"][1] -= y_evenness
- if string[:5] == "south" and world_data["map_center"][0] \
- < world_data["map_size"] - 1:
- world_data["map_center"][0] += 1
- world_data["map_center"][1] -= y_evenness
- elif string[6:] == "east" and world_data["map_center"][1] \
- < world_data["map_size"] - y_unevenness:
- if string[:5] == "north" and world_data["map_center"][0] > 0:
- world_data["map_center"][0] -= 1
- world_data["map_center"][1] += y_unevenness
- if string[:5] == "south" and world_data["map_center"][0] \
- < world_data["map_size"] - 1:
- world_data["map_center"][0] += 1
- world_data["map_center"][1] += y_unevenness
- query_mapcell()
- return command_look
-
-
-def command_look_scroller(string):
- def command_look_scroll():
- win_size = next(win["size"] for win in windows
- if win["func"] == win_look)
- if string == "up" and world_data["look_scroll"] > 0:
- world_data["look_scroll"] -= 1
- elif string == "down" and world_data["look_scroll"] \
- < len(world_data["look"]) - win_size[0]:
- world_data["look_scroll"] += 1
- return command_look_scroll
-
-
-def command_inventory_selector(string):
- def command_inventory_select():
- if string == "up" and world_data["inventory_selection"] > 0:
- world_data["inventory_selection"] -= 1
- elif string == "down" and world_data["inventory_selection"] \
- < len(world_data["inventory"]) - 1:
- world_data["inventory_selection"] += 1
- return command_inventory_select
-
-
-windows = [
- {"config": [1, 33], "func": win_info, "title": "Info"},
- {"config": [-7, 33], "func": win_log, "title": "Log"},
- {"config": [4, 16], "func": win_inventory, "title": "Inventory"},
- {"config": [4, 16], "func": win_look, "title": "Things here"},
- {"config": [0, -34], "func": win_map, "title": "Map"}
-]
-io = {
- "path_out": "server/in",
- "path_in": "server/out",
- "path_worldstate": "server/worldstate"
-}
-commands = {
- "A": (command_sender("ai"),),
- "D": (command_sender("drop", "inventory_selection"),),
- "J": (command_look_scroller("down"),),
- "K": (command_look_scroller("up"),),
- "P": (command_sender("pick_up"),),
- "Q": (command_quit,),
- "U": (command_sender("use", "inventory_selection"),),
- "W": (command_sender("wait"),),
- "c": (command_sender("move south-east"), command_looker("south-east")),
- "d": (command_sender("move east"), command_looker("east")),
- "e": (command_sender("move north-east"), command_looker("north-east")),
- "j": (command_inventory_selector("down"),),
- "k": (command_inventory_selector("up"),),
- "l": (command_toggle_look_mode,),
- "s": (command_sender("move west"), command_looker("west")),
- "w": (command_sender("move north-west"), command_looker("north-west")),
- "x": (command_sender("move south-west"), command_looker("south-west")),
-}