Browse Source

Add type hints to the Korman ResMgr.

pull/372/head
Adam Johnson 2 years ago
parent
commit
cb770cf638
Signed by: Hoikas
GPG Key ID: 0B6515D6FF6F271E
  1. 25
      korman/exporter/manager.py
  2. 26
      korman/nodes/node_core.py
  3. 4
      korman/nodes/node_responder.py

25
korman/exporter/manager.py

@ -13,10 +13,11 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Korman. If not, see <http://www.gnu.org/licenses/>. # along with Korman. If not, see <http://www.gnu.org/licenses/>.
from __future__ import annotations
import bpy import bpy
from pathlib import Path
from PyHSPlasma import * from PyHSPlasma import *
from typing import Iterable from typing import *
import weakref import weakref
from . import explosions from . import explosions
@ -214,13 +215,13 @@ class ExportManager:
if isinstance(i, pClass): if isinstance(i, pClass):
yield i yield i
def find_create_key(self, pClass, bl=None, name=None, so=None): def find_create_key(self, pClass: Type[KeyedT], bl=None, name=None, so=None) -> plKey[KeyedT]:
key = self.find_key(pClass, bl, name, so) key = self.find_key(pClass, bl, name, so)
if key is None: if key is None:
key = self.add_object(pl=pClass, name=name, bl=bl, so=so).key key = self.add_object(pl=pClass, name=name, bl=bl, so=so).key
return key return key
def find_key(self, pClass, bl=None, name=None, so=None, loc=None): def find_key(self, pClass: Type[KeyedT], bl=None, name=None, so=None, loc=None) -> Optional[plKey[KeyedT]]:
"""Given a blender Object and a Plasma class, find (or create) an exported plKey""" """Given a blender Object and a Plasma class, find (or create) an exported plKey"""
if loc is not None: if loc is not None:
location = loc location = loc
@ -255,13 +256,16 @@ class ExportManager:
so.addModifier(key) so.addModifier(key)
return key return key
def find_create_object(self, pClass, bl=None, name=None, so=None): def find_create_object(
self, pClass: Type[KeyedT], bl: bpy.types.Object = None,
name: Optional[str] = None, so: Optional[plSceneObject] = None
) -> KeyedT:
key = self.find_key(pClass, bl, name, so) key = self.find_key(pClass, bl, name, so)
if key is None: if key is None:
return self.add_object(pl=pClass, name=name, bl=bl, so=so) return self.add_object(pl=pClass, name=name, bl=bl, so=so)
return key.object return key.object
def find_object(self, pClass, bl=None, name=None, so=None): def find_object(self, pClass: Type[KeyedT], bl=None, name=None, so=None) -> Optional[KeyedT]:
key = self.find_key(pClass, bl, name, so) key = self.find_key(pClass, bl, name, so)
if key is not None: if key is not None:
return key.object return key.object
@ -306,11 +310,14 @@ class ExportManager:
self._pages[""] = location self._pages[""] = location
return location return location
def get_location(self, bl): def get_location(self, bl) -> plLocation:
"""Returns the Page Location of a given Blender Object""" """Returns the Page Location of a given Blender Object"""
return self._pages[bl.plasma_object.page] return self._pages[bl.plasma_object.page]
def get_scene_node(self, location=None, bl=None): def get_scene_node(
self, location: Optional[plLocation] = None,
bl: Optional[bpy.types.Object]=None
) -> plSceneNode:
"""Gets a Plasma Page's plSceneNode key""" """Gets a Plasma Page's plSceneNode key"""
assert (location is not None) ^ (bl is not None) assert (location is not None) ^ (bl is not None)
@ -318,7 +325,7 @@ class ExportManager:
location = self._pages[bl.plasma_object.page] location = self._pages[bl.plasma_object.page]
return self._nodes[location].key return self._nodes[location].key
def get_textures_page(self, key): def get_textures_page(self, key: plKey) -> plLocation:
"""Gets the appropriate page for a texture for a given plLayer""" """Gets the appropriate page for a texture for a given plLayer"""
# The point of this is to account for per-page textures... # The point of this is to account for per-page textures...
if bpy.context.scene.world.plasma_age.use_texture_page: if bpy.context.scene.world.plasma_age.use_texture_page:

26
korman/nodes/node_core.py

@ -13,16 +13,22 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Korman. If not, see <http://www.gnu.org/licenses/>. # along with Korman. If not, see <http://www.gnu.org/licenses/>.
from __future__ import annotations
import abc import abc
import bpy import bpy
from bpy.props import * from bpy.props import *
from PyHSPlasma import * from PyHSPlasma import *
import time import time
from typing import *
from ..exporter import ExportError from ..exporter import ExportError
if TYPE_CHECKING:
from ..exporter import Exporter
class PlasmaNodeBase: class PlasmaNodeBase:
def generate_notify_msg(self, exporter, so, socket_id, idname=None): def generate_notify_msg(self, exporter: Exporter, so: plSceneObject, socket_id: str, idname: Optional[str] = None) -> plNotifyMsg:
notify = plNotifyMsg() notify = plNotifyMsg()
notify.BCastFlags = (plMessage.kNetPropagate | plMessage.kLocalPropagate) notify.BCastFlags = (plMessage.kNetPropagate | plMessage.kLocalPropagate)
for i in self.find_outputs(socket_id, idname): for i in self.find_outputs(socket_id, idname):
@ -36,7 +42,7 @@ class PlasmaNodeBase:
notify.addReceiver(key) notify.addReceiver(key)
return notify return notify
def get_key(self, exporter, so): def get_key(self, exporter: Exporter, so: plSceneObject):
return None return None
def get_key_name(self, single, suffix=None, bl=None, so=None): def get_key_name(self, single, suffix=None, bl=None, so=None):
@ -59,7 +65,7 @@ class PlasmaNodeBase:
return str(getattr(self, self.pl_label_attrib, self.bl_label)) return str(getattr(self, self.pl_label_attrib, self.bl_label))
return self.bl_label return self.bl_label
def export(self, exporter, bo, so): def export(self, exporter: Exporter, bo: bpy.types.Object, so: plSceneObject):
pass pass
@property @property
@ -67,7 +73,7 @@ class PlasmaNodeBase:
"""This node can only be exported once because it is a targeted plSingleModifier""" """This node can only be exported once because it is a targeted plSingleModifier"""
return False return False
def _find_create_object(self, pClass, exporter, **kwargs): def _find_create_object(self, pClass: Type[KeyedT], exporter: Exporter, **kwargs) -> KeyedT:
"""Finds or creates an hsKeyedObject specific to this node.""" """Finds or creates an hsKeyedObject specific to this node."""
assert "name" not in kwargs assert "name" not in kwargs
kwargs["name"] = self.get_key_name(issubclass(pClass, (plObjInterface, plSingleModifier)), kwargs["name"] = self.get_key_name(issubclass(pClass, (plObjInterface, plSingleModifier)),
@ -75,7 +81,7 @@ class PlasmaNodeBase:
kwargs.get("so")) kwargs.get("so"))
return exporter.mgr.find_create_object(pClass, **kwargs) return exporter.mgr.find_create_object(pClass, **kwargs)
def _find_create_key(self, pClass, exporter, **kwargs): def _find_create_key(self, pClass: Type[KeyedT], exporter: Exporter, **kwargs) -> plKey[KeyedT]:
"""Finds or creates a plKey specific to this node.""" """Finds or creates a plKey specific to this node."""
assert "name" not in kwargs assert "name" not in kwargs
kwargs["name"] = self.get_key_name(issubclass(pClass, (plObjInterface, plSingleModifier)), kwargs["name"] = self.get_key_name(issubclass(pClass, (plObjInterface, plSingleModifier)),
@ -83,7 +89,7 @@ class PlasmaNodeBase:
kwargs.get("so")) kwargs.get("so"))
return exporter.mgr.find_create_key(pClass, **kwargs) return exporter.mgr.find_create_key(pClass, **kwargs)
def _find_key(self, pClass, exporter, **kwargs): def _find_key(self, pClass: Type[KeyedT], exporter: Exporter, **kwargs) -> Optional[plKey[KeyedT]]:
"""Finds a plKey specific to this node.""" """Finds a plKey specific to this node."""
assert "name" not in kwargs assert "name" not in kwargs
kwargs["name"] = self.get_key_name(issubclass(pClass, (plObjInterface, plSingleModifier)), kwargs["name"] = self.get_key_name(issubclass(pClass, (plObjInterface, plSingleModifier)),
@ -276,15 +282,15 @@ class PlasmaNodeBase:
link = self.id_data.links.new(in_socket, out_socket) link = self.id_data.links.new(in_socket, out_socket)
@property @property
def node_path(self): def node_path(self) -> str:
"""Returns an absolute path to this Node. Needed because repr() uses an elipsis...""" """Returns an absolute path to this Node. Needed because repr() uses an elipsis..."""
return "{}.{}".format(repr(self.id_data), self.path_from_id()) return "{}.{}".format(repr(self.id_data), self.path_from_id())
def previously_exported(self, exporter): def previously_exported(self, exporter) -> bool:
return self.name in exporter.exported_nodes[self.id_data.name] return self.name in exporter.exported_nodes[self.id_data.name]
@classmethod @classmethod
def poll(cls, context): def poll(cls, context) -> bool:
return (context.bl_idname == "PlasmaNodeTree") return (context.bl_idname == "PlasmaNodeTree")
def raise_error(self, message): def raise_error(self, message):
@ -292,7 +298,7 @@ class PlasmaNodeBase:
raise ExportError(final) raise ExportError(final)
@property @property
def requires_actor(self): def requires_actor(self) -> bool:
return False return False
@property @property

4
korman/nodes/node_responder.py

@ -13,6 +13,8 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Korman. If not, see <http://www.gnu.org/licenses/>. # along with Korman. If not, see <http://www.gnu.org/licenses/>.
from __future__ import annotations
import bpy import bpy
from bpy.props import * from bpy.props import *
from collections import OrderedDict from collections import OrderedDict
@ -82,7 +84,7 @@ class PlasmaResponderNode(PlasmaVersionedNode, bpy.types.Node):
layout.prop(self, "detect_untrigger") layout.prop(self, "detect_untrigger")
layout.prop(self, "no_ff_sounds") layout.prop(self, "no_ff_sounds")
def get_key(self, exporter, so): def get_key(self, exporter, so) -> plKey[plResponderModifier]:
return self._find_create_key(plResponderModifier, exporter, so=so) return self._find_create_key(plResponderModifier, exporter, so=so)
def get_key_name(self, single, suffix=None, bl=None, so=None) -> str: def get_key_name(self, single, suffix=None, bl=None, so=None) -> str:

Loading…
Cancel
Save