This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
multipong/actor.py

76 lines
2.0 KiB
Python
Executable File

from common import *
import event
import display
import uuid
import registry
import dpath.util
import logging
logger = logging.getLogger()
class Actor(event.EventHandler, registry.Registerable):
def __init__(self, *args, **kwargs):
registry.Registerable.__init__(self, *args, **kwargs)
event.EventHandler.__init__(self, *args, **kwargs)
self.x = 0
self.y = 0
self.vx = 0
self.vy = 0
dpath.util.merge(
self.__eventHandlers__,
{
'moveUp': self._event_moveUp,
'moveDown': self._event_moveDown
}
)
def _event_moveUp(self, evt):
self.y -= 1
def _event_moveDown(self, evt):
self.y += 1
def frame(self, display):
return getattr(
self,
"frameFor{}".format(display.__class__.__name__)
)()
def width(self, display):
return getattr(
self,
"widthFor{}".format(display.__class__.__name__)
)()
def height(self, display):
return getattr(
self,
"heightFor{}".format(display.__class__.__name__)
)()
class Text(Actor):
def __init__(self, *args, **kwargs):
Actor.__init__(self, *args, **kwargs)
self.setText(kwargs.get('text', ""))
def setText(self, text):
self.__text__ = text
def frameForCursesDisplay(self):
def drawForCurses(disp):
disp.__screen__.addstr(self.y, self.x, self.__text__)
return drawForCurses
def widthForCursesDisplay(self):
widths = []
for line in self.__text__.split('\n'):
widths.append(len(line))
return max(widths)
def heightForCursesDisplay(self):
self.height = len(self.__text__.split("\n"))
class Paddle(Text):
def __init__(self, *args, **kwargs):
Text.__init__(self, *args, **kwargs)
self.__text__ = "|"