Source code for ggame.indicator
"""
MathApp indicator classes for displaying two-state or boolean values.
"""
from ggame.mathapp import _MathVisual
from ggame.asset import Frame, ImageAsset
[docs]class ImageIndicator(_MathVisual):
"""
Use a sprite sheet image to indicate integer or boolean values.
Required Inputs
:param str url: Location of image file consisting of a multi-image sprite sheet.
:param (float,float) pos: Position in physical or logical units. May be a
:class:`ggame.point.Point` instance, a literal (x,y) pair, or a function
that returns an (x,y) pair.
:param int value: The state of the indicator. May be a function that returns
a suitable (integer) value.
:param \\**kwargs:
See below
:Optional Keyword Arguments:
* **positioning** (*str*) One of 'logical' (default) or 'physical'
* **frame** (*:class:`ggame.asset.Frame`*) Sub-frame location of sub-image within
the main image.
* **qty** (*int*) The number of sub-frames, when used as sprite sheet.
* **direction** (*str*) One of 'horizontal' (default) or 'vertical'.
* **margin** (*int*) Number of pixels between sub-frames if sprite sheet.
Example:
.. literalinclude:: ../examples/indicatorimageindicator.py
"""
_posinputsdef = ["pos"]
_nonposinputsdef = ["value"]
def __init__(self, url, *args, **kwargs):
kwargs.setdefault("frame", None)
kwargs.setdefault("qty", 1)
kwargs.setdefault("direction", "horizontal")
kwargs.setdefault("margin", 0)
super().__init__(
ImageAsset(
url,
kwargs["frame"],
kwargs["qty"],
kwargs["direction"],
kwargs["margin"],
),
*args,
**kwargs
)
self.center = (0, 0)
def _buildAsset(self):
# pylint: disable=no-member
inval = self._nposinputs.value()
# pylint: enable=no-member
if inval:
self.setImage(1)
elif not inval:
self.setImage(0)
else:
self.setImage(inval)
return self.asset
[docs] def physicalPointTouching(self, ppos):
self.setExtents() # ensure xmin, xmax are correct
x, y = ppos
return self.xmin <= x <= self.xmax and self.ymin <= y <= self.ymax
[docs] def translate(self, pdisp):
pass
[docs]class LEDIndicator(ImageIndicator):
"""
Subclass of ImageIndicator using a red LED on/off image.
Required Inputs
:param (float,float) pos: Position in physical or logical units. May be a
:class:`ggame.point.Point` instance, a literal (x,y) pair, or a function
that returns an (x,y) pair.
:param int value: The state of the indicator. May be a function that returns
a suitable (integer) value.
:param \\**kwargs:
See below
:Optional Keyword Arguments:
* **positioning** (*str*) One of 'logical' (default) or 'physical'
Example:
.. literalinclude:: ../examples/indicatorledindicator.py
"""
def __init__(self, *args, **kwargs):
kwargs.setdefault("frame", Frame(0, 0, 600, 600))
kwargs.setdefault("qty", 2)
super().__init__(self.getImagePath("red-led-off-on.png"), *args, **kwargs)
self.scale = 0.05