diff --git a/korman/exporter/material.py b/korman/exporter/material.py index fd201bc..217c16b 100644 --- a/korman/exporter/material.py +++ b/korman/exporter/material.py @@ -1408,7 +1408,7 @@ class MaterialConverter: state = layer.state is_waveset = bo.plasma_modifiers.water_basic.enabled - if bo.data.show_double_sided: + if bm.plasma_material.double_sided: if is_waveset: self._report.warn("FORCING single sided--this is a waveset (are you insane?)") else: diff --git a/korman/operators/op_toolbox.py b/korman/operators/op_toolbox.py index a5ffb64..9574d66 100644 --- a/korman/operators/op_toolbox.py +++ b/korman/operators/op_toolbox.py @@ -174,33 +174,33 @@ class PlasmaToggleAllPlasmaObjectsOperator(ToolboxOperator, bpy.types.Operator): class PlasmaToggleDoubleSidedOperator(ToolboxOperator, bpy.types.Operator): - bl_idname = "mesh.plasma_toggle_double_sided" + bl_idname = "material.plasma_toggle_double_sided" bl_label = "Toggle All Double Sided" - bl_description = "Toggles all meshes to be double sided" + bl_description = "Toggles all materials to be double sided" enable = BoolProperty(name="Enable", description="Enable Double Sided") def execute(self, context): enable = self.enable - for mesh in bpy.data.meshes: - mesh.show_double_sided = enable + for mat in bpy.data.materials: + mat.plasma_material.double_sided = enable return {"FINISHED"} class PlasmaToggleDoubleSidedSelectOperator(ToolboxOperator, bpy.types.Operator): - bl_idname = "mesh.plasma_toggle_double_sided_selected" + bl_idname = "material.plasma_toggle_double_sided_selected" bl_label = "Toggle Selected Double Sided" - bl_description = "Toggles selected meshes double sided value" + bl_description = "Toggles selected meshes' material(s) double sided value" @classmethod def poll(cls, context): return super().poll(context) and hasattr(bpy.context, "selected_objects") def execute(self, context): - mesh_list = [i.data for i in context.selected_objects if i.type == "MESH"] - enable = not all((mesh.show_double_sided for mesh in mesh_list)) - for mesh in mesh_list: - mesh.show_double_sided = enable + mat_list = [slot.material for slot in itertools.chain.from_iterable((i.material_slots for i in context.selected_objects)) if slot and slot.material] + enable = not all((mat.plasma_material.double_sided for mat in mat_list)) + for mat in mat_list: + mat.plasma_material.double_sided = enable return {"FINISHED"} diff --git a/korman/properties/__init__.py b/korman/properties/__init__.py index 9980638..c249296 100644 --- a/korman/properties/__init__.py +++ b/korman/properties/__init__.py @@ -19,6 +19,7 @@ from .prop_anim import * from .prop_camera import * from .prop_image import * from .prop_lamp import * +from .prop_material import * from . import modifiers from .prop_object import * from .prop_scene import * @@ -32,6 +33,7 @@ def register(): bpy.types.Camera.plasma_camera = bpy.props.PointerProperty(type=PlasmaCamera) bpy.types.Image.plasma_image = bpy.props.PointerProperty(type=PlasmaImage) bpy.types.Lamp.plasma_lamp = bpy.props.PointerProperty(type=PlasmaLamp) + byp.types.Material.plasma_material = bpy.Props.PointerProperty(type=PlasmaMaterial) bpy.types.Object.plasma_net = bpy.props.PointerProperty(type=PlasmaNet) bpy.types.Object.plasma_object = bpy.props.PointerProperty(type=PlasmaObject) bpy.types.Scene.plasma_scene = bpy.props.PointerProperty(type=PlasmaScene) diff --git a/korman/properties/prop_material.py b/korman/properties/prop_material.py new file mode 100644 index 0000000..eeb742d --- /dev/null +++ b/korman/properties/prop_material.py @@ -0,0 +1,27 @@ +# 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 . + +import bpy +from bpy.props import * + +from .. import idprops + +class PlasmaMaterial(bpy.types.PropertyGroup): + bl_idname = "material.plasma_material" + + double_sided = BoolProperty(name="Double Sided", + description="Sets this material as double sided (formerly TWOSIDE)", + default=False) + diff --git a/korman/ui/__init__.py b/korman/ui/__init__.py index d5a2ac6..92e54fa 100644 --- a/korman/ui/__init__.py +++ b/korman/ui/__init__.py @@ -18,6 +18,7 @@ from .ui_camera import * from .ui_image import * from .ui_lamp import * from .ui_list import * +from .ui_material import * from .ui_menus import * from .ui_modifiers import * from .ui_object import * diff --git a/korman/ui/ui_material.py b/korman/ui/ui_material.py new file mode 100644 index 0000000..adf5d44 --- /dev/null +++ b/korman/ui/ui_material.py @@ -0,0 +1,42 @@ +# 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 . + +import bpy + +from . import ui_list + +class MaterialButtonsPanel: + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "material" + + @classmethod + def poll(cls, context): + return context.material and context.scene.render.engine == "PLASMA_GAME" + + +class PlasmaMaterialPanel(MaterialButtonsPanel, bpy.types.Panel): + bl_label = "Plasma Material Options" + + def draw(self, context): + mat = context.material + mat_props = mat.plasma_material + layout = self.layout + + split = layout.split() + col = split.column() + sub = col.column() + col.prop(mat_props, "double_sided") +