summaryrefslogtreecommitdiff
path: root/asciifarm/client/display.py
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-03-06 11:26:59 +0100
committertroido <troido@protonmail.com>2020-03-06 11:26:59 +0100
commitdd07ff4d686f07cdc9736627dd0ef099ef5e4e4f (patch)
treef43310b3779a95efd74a40ba8139cf146ad49051 /asciifarm/client/display.py
parentc9366616079240cd7ee3d243c9f6897d40b4267d (diff)
new directory structure for the separate client repo
Diffstat (limited to 'asciifarm/client/display.py')
-rw-r--r--asciifarm/client/display.py174
1 files changed, 0 insertions, 174 deletions
diff --git a/asciifarm/client/display.py b/asciifarm/client/display.py
deleted file mode 100644
index edd5acb..0000000
--- a/asciifarm/client/display.py
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
-
-import os
-from ratuil.layout import Layout
-from ratuil.bufferedscreen import BufferedScreen as Screen
-#from ratuil.screen import Screen
-from ratuil.textstyle import TextStyle
-from asciifarm.common.utils import get
-from .listselector import ListSelector
-
-
-SIDEWIDTH = 20
-
-ALPHABET = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
-
-class Display:
-
- def __init__(self, charMap):
-
- self.characters = {}
-
- def parseSprite(sprite):
- if isinstance(sprite, str):
- return (sprite, None, None)
- char = get(sprite, 0, " ")
- fg = get(sprite, 1)
- bg = get(sprite, 2)
- return (char, fg, bg)
- for name, sprite in charMap["mapping"].items():
- vals = parseSprite(sprite)
- if vals:
- self.characters[name] = vals
-
- for name, colours in charMap.get("writable", {}).items():
- fg = get(colours, 0)
- bg = get(colours, 1)
- for i in range(min(len(ALPHABET), len(charMap.get("alphabet", [])))):
- self.characters[name + '-' + ALPHABET[i]] = (charMap["alphabet"][i], fg, bg)
-
- self.defaultChar = parseSprite(charMap.get("default", "?"))
-
- self.messageColours = charMap.get("msgcolours", {})
-
- fname = os.path.join(os.path.dirname(__file__), "layout.xml")
- self.layout = Layout.from_xml_file(fname)
- self.layout.get("field").set_char_size(charMap.get("charwidth", 1))
-
- self.screen = Screen()
- self.screen.clear()
-
- self.layout.set_target(self.screen)
- self.layout.update()
-
-
-
- # temporary, until these have a better place
- self.inventory = ListSelector(self.getWidget("inventory"))
- self.inventory._debug_name = "inventory"
- self.equipment = ListSelector(self.getWidget("equipment"))
- self.equipment._debug_name = "equipment"
- self.ground = ListSelector(self.getWidget("ground"))
- self.ground._debug_name = "ground"
- self.switch = ListSelector(self.getWidget("switchtitles"))
- self.switch._debug_name = "switch"
-
- self.switch.setItems(["inventory", "equipment", "ground"])
- self.menus = {
- "inventory": self.inventory,
- "equipment": self.equipment,
- "ground": self.ground
- }
-
- self.layout.get("switch").select(0)
-
-
- def getWidget(self, name):
- return self.layout.get(name)
-
- def resizeField(self, size):
- self.getWidget("field").set_size(*size)
- self.getWidget("fieldbackground").change()
-
- def drawFieldCells(self, cells):
- field = self.getWidget("field")
- for cell in cells:
- (x, y), spriteNames = cell
- if not len(spriteNames):
- char, fg, bg = self.getChar(' ')
- else:
- char, fg, bg = self.getChar(spriteNames[0])
- for spriteName in spriteNames[1:]:
- if bg is not None:
- break
- _char, _fg, bg = self.getChar(spriteName)
- field.change_cell(x, y, char, TextStyle(fg, bg))
-
-
- def setFieldCenter(self, pos):
- self.getWidget("field").set_center(*pos)
-
- def setHealth(self, health, maxHealth):
- if health is None:
- health = 0
- if maxHealth is None:
- maxHealth = 0
- self.getWidget("health").set_total(maxHealth)
- self.getWidget("health").set_filled(health)
- self.getWidget("healthtitle").format({"filled": health, "total":maxHealth})
-
-
- def showInfo(self, infostring):
- self.getWidget("info").set_text(infostring)
-
- def selectMenu(self, *args, **kwargs):
- self.switch.select(*args, **kwargs)
- self.layout.get("switch").select(self.getSelectedMenu())
-
- def getSelectedMenu(self):
- return self.switch.getSelectedItem()
-
- def getSelectedItem(self, menu=None):
- return self._getMenu(menu).getSelected()
-
- def selectItem(self, menu=None, *args, **kwargs):
- self._getMenu(menu).select(*args, **kwargs)
-
- def _getMenu(self, name=None):
- if name is None:
- name = self.getSelectedMenu()
- name = name.casefold()
- return self.menus[name]
-
- def setInventory(self, items):
- self.inventory.setItems(items)
-
-
- def setEquipment(self, slots):
- self.equipment.setItems([
- slot + ": " + (item if item else "")
- for slot, item in slots
- ])
-
- def setGround(self, items):
- self.ground.setItems(items)
-
-
- def addMessage(self, message, msgtype=None):
- if msgtype is not None:
- style = TextStyle(*self.messageColours.get(msgtype, (7,0)))
- else:
- style = None
- self.getWidget("msg").add_message(message, style)
-
- def log(self, message):
- self.addMessage(str(message))
-
- def scrollBack(self, amount, relative=True):
- self.getWidget("msg").scroll(amount, relative)
-
- def setInputString(self, string, cursor):
- self.getWidget("textinput").set_text(string, cursor)
-
- def update(self):
- self.layout.update()
- self.screen.update()
-
- def getChar(self, sprite):
- """This returns the character belonging to some spritename. This does not read a character"""
- return self.characters.get(sprite, self.defaultChar)
-
- def update_size(self):
- self.screen.reset()
-