SWBF-msh-Blender-IO/addons/io_scene_swbf_msh/msh_material.py

73 lines
1.5 KiB
Python

""" Contains Material and dependent types for representing materials easilly
saved to a .msh file. """
from dataclasses import dataclass
from typing import Tuple
from enum import Enum, Flag
from mathutils import Color
class Rendertype(Enum):
# TODO: Add SWBF1 rendertypes.
NORMAL = 0
SCROLLING = 3
ENVMAPPED = 6
ANIMATED = 7
REFRACTION = 22
BLINK = 25
NORMALMAPPED_TILED = 24
NORMALMAPPED_ENVMAPPED = 26
NORMALMAPPED = 27
NORMALMAPPED_TILED_ENVMAP = 29
# Placeholders to avoid crashes/import-export inconsistencies
OTHER_1 = 1
OTHER_2 = 2
OTHER_4 = 4
OTHER_5 = 5
OTHER_8 = 8
OTHER_9 = 9
OTHER_10 = 10
OTHER_11 = 11
OTHER_12 = 12
OTHER_13 = 13
OTHER_14 = 14
OTHER_15 = 15
OTHER_16 = 16
OTHER_17 = 17
OTHER_18 = 18
OTHER_19 = 19
OTHER_20 = 20
OTHER_21 = 21
OTHER_23 = 23
OTHER_28 = 28
OTHER_30 = 30
OTHER_31 = 31
class MaterialFlags(Flag):
NONE = 0
UNLIT = 1
GLOW = 2
BLENDED_TRANSPARENCY = 4
DOUBLESIDED = 8
HARDEDGED_TRANSPARENCY = 16
PERPIXEL = 32
ADDITIVE_TRANSPARENCY = 64
SPECULAR = 128
@dataclass
class Material:
""" Data class representing a .msh material."""
name: str = ""
specular_color: Color = Color((1.0, 1.0, 1.0))
rendertype: Rendertype = Rendertype.NORMAL
flags: MaterialFlags = MaterialFlags.NONE
data: Tuple[int, int] = (0, 0)
texture0: str = "white.tga"
texture1: str = ""
texture2: str = ""
texture3: str = ""