import bpy import typing from . import UTIL_virtools_types, UTIL_functions class RawVirtoolsTexture(): # Instance Member Declarations mSaveOptions: UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS mVideoFormat: UTIL_virtools_types.VX_PIXELFORMAT # Default Value Declarations cDefaultSaveOptions: typing.ClassVar[UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS] = UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_RAWDATA cDefaultVideoFormat: typing.ClassVar[UTIL_virtools_types.VX_PIXELFORMAT] = UTIL_virtools_types.VX_PIXELFORMAT._16_ARGB1555 def __init__(self, **kwargs): # assign default value for each component self.mSaveOptions = kwargs.get('mSaveOptions', RawVirtoolsTexture.cDefaultSaveOptions) self.mVideoFormat = kwargs.get('mVideoFormat', RawVirtoolsTexture.cDefaultVideoFormat) # blender enum prop helper defines _g_Helper_CK_TEXTURE_SAVEOPTIONS = UTIL_virtools_types.EnumPropHelper(UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS) _g_Helper_VX_PIXELFORMAT = UTIL_virtools_types.EnumPropHelper(UTIL_virtools_types.VX_PIXELFORMAT) class BBP_PG_virtools_texture(bpy.types.PropertyGroup): save_options: bpy.props.EnumProperty( name = "Save Options", description = "When saving a composition textures or sprites can be kept as reference to external files or converted to a given format and saved inside the composition file.", items = _g_Helper_CK_TEXTURE_SAVEOPTIONS.generate_items(), default = _g_Helper_CK_TEXTURE_SAVEOPTIONS.to_selection(RawVirtoolsTexture.cDefaultSaveOptions), translation_context = 'BBP_PG_virtools_texture/property' ) # type: ignore video_format: bpy.props.EnumProperty( name = "Video Format", description = "The desired surface pixel format in video memory.", items = _g_Helper_VX_PIXELFORMAT.generate_items(), default = _g_Helper_VX_PIXELFORMAT.to_selection(RawVirtoolsTexture.cDefaultVideoFormat), translation_context = 'BBP_PG_virtools_texture/property' ) # type: ignore #region Virtools Texture Getter Setter def get_virtools_texture(img: bpy.types.Image) -> BBP_PG_virtools_texture: return img.virtools_texture def get_raw_virtools_texture(img: bpy.types.Image) -> RawVirtoolsTexture: props: BBP_PG_virtools_texture = get_virtools_texture(img) rawdata: RawVirtoolsTexture = RawVirtoolsTexture() rawdata.mSaveOptions = _g_Helper_CK_TEXTURE_SAVEOPTIONS.get_selection(props.save_options) rawdata.mVideoFormat = _g_Helper_VX_PIXELFORMAT.get_selection(props.video_format) return rawdata def set_raw_virtools_texture(img: bpy.types.Image, rawdata: RawVirtoolsTexture) -> None: props: BBP_PG_virtools_texture = get_virtools_texture(img) props.save_options = _g_Helper_CK_TEXTURE_SAVEOPTIONS.to_selection(rawdata.mSaveOptions) props.video_format = _g_Helper_VX_PIXELFORMAT.to_selection(rawdata.mVideoFormat) #endregion #region Virtools Texture Drawer # YYC MARK: # Because Image do not have its unique properties window, # so we only can draw Virtools Texture properties in other window. # We provide various functions to help draw properties. def draw_virtools_texture(img: bpy.types.Image, layout: bpy.types.UILayout): props: BBP_PG_virtools_texture = get_virtools_texture(img) layout.prop(props, 'save_options') layout.prop(props, 'video_format') #endregion #region Ballance Texture Preset _g_OpaqueBallanceTexturePreset: RawVirtoolsTexture = RawVirtoolsTexture( mSaveOptions = UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_EXTERNAL, mVideoFormat = UTIL_virtools_types.VX_PIXELFORMAT._16_ARGB1555, ) _g_TransparentBallanceTexturePreset: RawVirtoolsTexture = RawVirtoolsTexture( mSaveOptions = UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_EXTERNAL, mVideoFormat = UTIL_virtools_types.VX_PIXELFORMAT._32_ARGB8888, ) _g_NonBallanceTexturePreset: RawVirtoolsTexture = RawVirtoolsTexture( mSaveOptions = UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_RAWDATA, mVideoFormat = UTIL_virtools_types.VX_PIXELFORMAT._32_ARGB8888, ) ## The preset collection of all Ballance texture. # Key is texture name and can be used as file name checking. # Value is its preset which can be assigned. _g_BallanceTexturePresets: dict[str, RawVirtoolsTexture] = { # "atari.avi": _g_TransparentBallanceTexturePreset, "atari.bmp": _g_OpaqueBallanceTexturePreset, "Ball_LightningSphere1.bmp": _g_OpaqueBallanceTexturePreset, "Ball_LightningSphere2.bmp": _g_OpaqueBallanceTexturePreset, "Ball_LightningSphere3.bmp": _g_OpaqueBallanceTexturePreset, "Ball_Paper.bmp": _g_OpaqueBallanceTexturePreset, "Ball_Stone.bmp": _g_OpaqueBallanceTexturePreset, "Ball_Wood.bmp": _g_OpaqueBallanceTexturePreset, "Brick.bmp": _g_OpaqueBallanceTexturePreset, "Button01_deselect.tga": _g_TransparentBallanceTexturePreset, "Button01_select.tga": _g_TransparentBallanceTexturePreset, "Button01_special.tga": _g_TransparentBallanceTexturePreset, "Column_beige.bmp": _g_OpaqueBallanceTexturePreset, "Column_beige_fade.tga": _g_TransparentBallanceTexturePreset, "Column_blue.bmp": _g_OpaqueBallanceTexturePreset, "Cursor.tga": _g_TransparentBallanceTexturePreset, "Dome.bmp": _g_OpaqueBallanceTexturePreset, "DomeEnvironment.bmp": _g_OpaqueBallanceTexturePreset, "DomeShadow.tga": _g_TransparentBallanceTexturePreset, "ExtraBall.bmp": _g_OpaqueBallanceTexturePreset, "ExtraParticle.bmp": _g_OpaqueBallanceTexturePreset, "E_Holzbeschlag.bmp": _g_OpaqueBallanceTexturePreset, "FloorGlow.bmp": _g_OpaqueBallanceTexturePreset, "Floor_Side.bmp": _g_OpaqueBallanceTexturePreset, "Floor_Top_Border.bmp": _g_OpaqueBallanceTexturePreset, "Floor_Top_Borderless.bmp": _g_OpaqueBallanceTexturePreset, "Floor_Top_Checkpoint.bmp": _g_OpaqueBallanceTexturePreset, "Floor_Top_Flat.bmp": _g_OpaqueBallanceTexturePreset, "Floor_Top_Profil.bmp": _g_OpaqueBallanceTexturePreset, "Floor_Top_ProfilFlat.bmp": _g_OpaqueBallanceTexturePreset, "Font_1.tga": _g_TransparentBallanceTexturePreset, "Gravitylogo_intro.bmp": _g_OpaqueBallanceTexturePreset, "HardShadow.bmp": _g_OpaqueBallanceTexturePreset, "Laterne_Glas.bmp": _g_OpaqueBallanceTexturePreset, "Laterne_Schatten.tga": _g_TransparentBallanceTexturePreset, "Laterne_Verlauf.tga": _g_TransparentBallanceTexturePreset, "Logo.bmp": _g_OpaqueBallanceTexturePreset, "Metal_stained.bmp": _g_OpaqueBallanceTexturePreset, "Misc_Ufo.bmp": _g_OpaqueBallanceTexturePreset, "Misc_UFO_Flash.bmp": _g_OpaqueBallanceTexturePreset, "Modul03_Floor.bmp": _g_OpaqueBallanceTexturePreset, "Modul03_Wall.bmp": _g_OpaqueBallanceTexturePreset, "Modul11_13_Wood.bmp": _g_OpaqueBallanceTexturePreset, "Modul11_Wood.bmp": _g_OpaqueBallanceTexturePreset, "Modul15.bmp": _g_OpaqueBallanceTexturePreset, "Modul16.bmp": _g_OpaqueBallanceTexturePreset, "Modul18.bmp": _g_OpaqueBallanceTexturePreset, "Modul18_Gitter.tga": _g_TransparentBallanceTexturePreset, "Modul30_d_Seiten.bmp": _g_OpaqueBallanceTexturePreset, "Particle_Flames.bmp": _g_OpaqueBallanceTexturePreset, "Particle_Smoke.bmp": _g_OpaqueBallanceTexturePreset, "PE_Bal_balloons.bmp": _g_OpaqueBallanceTexturePreset, "PE_Bal_platform.bmp": _g_OpaqueBallanceTexturePreset, "PE_Ufo_env.bmp": _g_OpaqueBallanceTexturePreset, "Pfeil.tga": _g_TransparentBallanceTexturePreset, "P_Extra_Life_Oil.bmp": _g_OpaqueBallanceTexturePreset, "P_Extra_Life_Particle.bmp": _g_OpaqueBallanceTexturePreset, "P_Extra_Life_Shadow.bmp": _g_OpaqueBallanceTexturePreset, "Rail_Environment.bmp": _g_OpaqueBallanceTexturePreset, "sandsack.bmp": _g_OpaqueBallanceTexturePreset, "SkyLayer.bmp": _g_OpaqueBallanceTexturePreset, "Sky_Vortex.bmp": _g_OpaqueBallanceTexturePreset, "Stick_Bottom.tga": _g_TransparentBallanceTexturePreset, "Stick_Stripes.bmp": _g_OpaqueBallanceTexturePreset, "Target.bmp": _g_OpaqueBallanceTexturePreset, "Tower_Roof.bmp": _g_OpaqueBallanceTexturePreset, "Trafo_Environment.bmp": _g_OpaqueBallanceTexturePreset, "Trafo_FlashField.bmp": _g_OpaqueBallanceTexturePreset, "Trafo_Shadow_Big.tga": _g_TransparentBallanceTexturePreset, "Tut_Pfeil01.tga": _g_TransparentBallanceTexturePreset, "Tut_Pfeil_Hoch.tga": _g_TransparentBallanceTexturePreset, "Wolken_intro.tga": _g_TransparentBallanceTexturePreset, "Wood_Metal.bmp": _g_OpaqueBallanceTexturePreset, "Wood_MetalStripes.bmp": _g_OpaqueBallanceTexturePreset, "Wood_Misc.bmp": _g_OpaqueBallanceTexturePreset, "Wood_Nailed.bmp": _g_OpaqueBallanceTexturePreset, "Wood_Old.bmp": _g_OpaqueBallanceTexturePreset, "Wood_Panel.bmp": _g_OpaqueBallanceTexturePreset, "Wood_Plain.bmp": _g_OpaqueBallanceTexturePreset, "Wood_Plain2.bmp": _g_OpaqueBallanceTexturePreset, "Wood_Raft.bmp": _g_OpaqueBallanceTexturePreset, } def get_ballance_texture_preset(texname: str) -> RawVirtoolsTexture: try_preset: RawVirtoolsTexture | None = _g_BallanceTexturePresets.get(texname, None) if try_preset is None: # fallback to non-ballance one try_preset = _g_NonBallanceTexturePreset return try_preset def get_nonballance_texture_preset() -> RawVirtoolsTexture: return _g_NonBallanceTexturePreset #endregion def register() -> None: bpy.utils.register_class(BBP_PG_virtools_texture) # add into image metadata bpy.types.Image.virtools_texture = bpy.props.PointerProperty(type = BBP_PG_virtools_texture) def unregister() -> None: # del from image metadata del bpy.types.Image.virtools_texture bpy.utils.unregister_class(BBP_PG_virtools_texture)