Browse Source

Begin custom PLASMA_GAME engine

According to the sparse documentation, custom render engines are the most
future-proof way of customizing the internal blender panels.
Unfortunately, even then, we must do some metaprogramming hacks...
pull/1/head
Adam Johnson 12 years ago
parent
commit
736447ec9e
  1. 4
      korman/__init__.py
  2. 47
      korman/render.py

4
korman/__init__.py

@ -14,11 +14,11 @@
# along with Korman. If not, see <http://www.gnu.org/licenses/>.
import bpy
from . import exporter
from . import exporter, render
bl_info = {
"name": "Korman",
"author": "Guild of Writers H'uru Team",
"author": "Guild of Writers",
"blender": (2, 6, 3), # I can't be bothered to support old stuff
"location": "File > Import-Export",
"description": "Exporter for Cyan Worlds' Plasma Engine",

47
korman/render.py

@ -0,0 +1,47 @@
# This file is part of Korman.
#
# Korman is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Korman is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Korman. If not, see <http://www.gnu.org/licenses/>.
import bpy
class PlasmaRenderEngine(bpy.types.RenderEngine):
bl_idname = "PLASMA_GAME"
bl_label = "Plasma Game"
pass
# Explicitly whitelist compatible Blender panels...
from bl_ui import properties_material
properties_material.MATERIAL_PT_context_material.COMPAT_ENGINES.add("PLASMA_GAME")
properties_material.MATERIAL_PT_preview.COMPAT_ENGINES.add("PLASMA_GAME")
del properties_material
@classmethod
def _new_poll(cls, context):
"""Nifty replacement for naughty built-in Blender poll()s"""
if context.scene.render.engine == "PLASMA_GAME":
return False
else:
# Dear god you better save the old poll...
return cls._old_poll(cls, context)
def _swap_poll(cls):
cls._old_poll = cls.poll
cls.poll = _new_poll
# Hmm... Physics panels don't respect the supported engine thing.
# Metaprogramming to the rescue!
from bl_ui import properties_physics_common
_swap_poll(properties_physics_common.PhysicButtonsPanel)
del properties_physics_common
Loading…
Cancel
Save