Source code for pooltool.objects.datatypes
from __future__ import annotations
from abc import ABC, abstractmethod
from attrs import define, evolve, field
[docs]@define
class NullObject:
"""A null object
Attributes:
id: Object ID.
"""
id: str = field(default="dummy")
def copy(self) -> NullObject:
return evolve(self)
[docs]class Render(ABC):
def __init__(self):
"""A base class for rendering physical pool objects
This class stores base operations on panda3d nodes that are associated with any
pool objects such as cues, tables, and balls.
Notes
=====
- All nodes for a given object (e.g. table) are stored in self.nodes.
- Each method decorated with 'abstractmethod' must be defined by the child
class. The decorator _ensures_ this happens.
"""
self.nodes = {}
self.rendered = False
def remove_node(self, name):
self.nodes[name].removeNode()
del self.nodes[name]
def remove_nodes(self):
for node in self.nodes.values():
node.removeNode()
self.nodes = {}
self.rendered = False
def hide_node(self, name):
self.nodes[name].hide()
def hide_nodes(self, ignore=set()):
for node_name in self.nodes:
if node_name in ignore:
continue
self.hide_node(node_name)
def show_node(self, name):
self.nodes[name].show()
def show_nodes(self, ignore=set()):
for node_name in self.nodes:
if node_name in ignore:
continue
self.show_node(node_name)
def get_node(self, name):
return self.nodes[name]
@abstractmethod
def get_render_state(self):
pass
@abstractmethod
def render(self):
self.rendered = True