forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			287 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			287 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Custom bpy property creators for logic nodes. Please be aware that
 | 
						|
the code in this file is usually run once at registration and not for
 | 
						|
each individual node instance when it is created.
 | 
						|
 | 
						|
The functions for creating typed properties wrap the private __haxe_prop
 | 
						|
function to allow for IDE autocompletion.
 | 
						|
 | 
						|
Some default parameters in the signature of functions in this module are
 | 
						|
mutable (common Python pitfall, be aware of this!), but because they
 | 
						|
don't get accessed later it doesn't matter here and we keep it this way
 | 
						|
for parity with the Blender API.
 | 
						|
"""
 | 
						|
from typing import Any, Callable, List, Sequence, Set, Union
 | 
						|
 | 
						|
import sys
 | 
						|
import bpy
 | 
						|
from bpy.props import *
 | 
						|
 | 
						|
__all__ = [
 | 
						|
    'HaxeBoolProperty',
 | 
						|
    'HaxeBoolVectorProperty',
 | 
						|
    'HaxeCollectionProperty',
 | 
						|
    'HaxeEnumProperty',
 | 
						|
    'HaxeFloatProperty',
 | 
						|
    'HaxeFloatVectorProperty',
 | 
						|
    'HaxeIntProperty',
 | 
						|
    'HaxeIntVectorProperty',
 | 
						|
    'HaxePointerProperty',
 | 
						|
    'HaxeStringProperty',
 | 
						|
    'RemoveHaxeProperty'
 | 
						|
]
 | 
						|
 | 
						|
 | 
						|
def __haxe_prop(prop_type: Callable, prop_name: str, *args, **kwargs) -> Any:
 | 
						|
    """Declares a logic node property as a property that will be
 | 
						|
    used ingame for a logic node."""
 | 
						|
    update_callback: Callable = kwargs.get('update', None)
 | 
						|
    if update_callback is None:
 | 
						|
        def wrapper(self: bpy.types.Node, context: bpy.types.Context):
 | 
						|
            self.on_prop_update(context, prop_name)
 | 
						|
        kwargs['update'] = wrapper
 | 
						|
    else:
 | 
						|
        def wrapper(self: bpy.types.Node, context: bpy.types.Context):
 | 
						|
            update_callback(self, context)
 | 
						|
            self.on_prop_update(context, prop_name)
 | 
						|
        kwargs['update'] = wrapper
 | 
						|
 | 
						|
    # Tags are not allowed on classes other than bpy.types.ID or
 | 
						|
    # bpy.types.Bone, remove them here to prevent registration errors
 | 
						|
    if 'tags' in kwargs:
 | 
						|
        del kwargs['tags']
 | 
						|
    
 | 
						|
    # Remove override parameter for Blender versions that don't support it
 | 
						|
    if bpy.app.version < (2, 90, 0) and 'override' in kwargs:
 | 
						|
        del kwargs['override']
 | 
						|
 | 
						|
    return prop_type(*args, **kwargs)
 | 
						|
 | 
						|
 | 
						|
def HaxeBoolProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,  # force passing further arguments as keywords, see PEP 3102
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default=False,
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        subtype: str = 'NONE',
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> 'bpy.types.BoolProperty':
 | 
						|
    """Declares a new BoolProperty that has a Haxe counterpart with the
 | 
						|
    given prop_name (Python and Haxe names must be identical for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(BoolProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxeBoolVectorProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default: list = (False, False, False),
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        subtype: str = 'NONE',
 | 
						|
        size: int = 3,
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> List['bpy.types.BoolProperty']:
 | 
						|
    """Declares a new BoolVectorProperty that has a Haxe counterpart
 | 
						|
    with the given prop_name (Python and Haxe names must be identical
 | 
						|
    for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(BoolVectorProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxeCollectionProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        type=None,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set()
 | 
						|
) -> 'bpy.types.CollectionProperty':
 | 
						|
    """Declares a new CollectionProperty that has a Haxe counterpart
 | 
						|
    with the given prop_name (Python and Haxe names must be identical
 | 
						|
    for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(CollectionProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxeEnumProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        items: Sequence,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default: Union[str, Set[str]] = None,
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> 'bpy.types.EnumProperty':
 | 
						|
    """Declares a new EnumProperty that has a Haxe counterpart with the
 | 
						|
    given prop_name (Python and Haxe names must be identical for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(EnumProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxeFloatProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default=0.0,
 | 
						|
        min: float = -3.402823e+38,
 | 
						|
        max: float = 3.402823e+38,
 | 
						|
        soft_min: float = -3.402823e+38,
 | 
						|
        soft_max: float = 3.402823e+38,
 | 
						|
        step: int = 3,
 | 
						|
        precision: int = 2,
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        subtype: str = 'NONE',
 | 
						|
        unit: str = 'NONE',
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> 'bpy.types.FloatProperty':
 | 
						|
    """Declares a new FloatProperty that has a Haxe counterpart with the
 | 
						|
    given prop_name (Python and Haxe names must be identical for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(FloatProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxeFloatVectorProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default: list = (0.0, 0.0, 0.0),
 | 
						|
        min: float = sys.float_info.min,
 | 
						|
        max: float = sys.float_info.max,
 | 
						|
        soft_min: float = sys.float_info.min,
 | 
						|
        soft_max: float = sys.float_info.max,
 | 
						|
        step: int = 3,
 | 
						|
        precision: int = 2,
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        subtype: str = 'NONE',
 | 
						|
        unit: str = 'NONE',
 | 
						|
        size: int = 3,
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> List['bpy.types.FloatProperty']:
 | 
						|
    """Declares a new FloatVectorProperty that has a Haxe counterpart
 | 
						|
    with the given prop_name (Python and Haxe names must be identical
 | 
						|
    for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(FloatVectorProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxeIntProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default=0,
 | 
						|
        min: int = -2**31,
 | 
						|
        max: int = 2**31 - 1,
 | 
						|
        soft_min: int = -2**31,
 | 
						|
        soft_max: int = 2**31 - 1,
 | 
						|
        step: int = 1,
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        subtype: str = 'NONE',
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> 'bpy.types.IntProperty':
 | 
						|
    """Declares a new IntProperty that has a Haxe counterpart with the
 | 
						|
    given prop_name (Python and Haxe names must be identical for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(IntProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxeIntVectorProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default: list = (0, 0, 0),
 | 
						|
        min: int = -2**31,
 | 
						|
        max: int = 2**31 - 1,
 | 
						|
        soft_min: int = -2**31,
 | 
						|
        soft_max: int = 2**31 - 1,
 | 
						|
        step: int = 1,
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        subtype: str = 'NONE',
 | 
						|
        size: int = 3,
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> List['bpy.types.IntProperty']:
 | 
						|
    """Declares a new IntVectorProperty that has a Haxe counterpart with
 | 
						|
    the given prop_name (Python and Haxe names must be identical for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(IntVectorProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def HaxePointerProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        type=None,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        poll=None,
 | 
						|
        update=None
 | 
						|
) -> 'bpy.types.PointerProperty':
 | 
						|
    """Declares a new PointerProperty that has a Haxe counterpart with
 | 
						|
    the given prop_name (Python and Haxe names must be identical for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(PointerProperty, **locals())
 | 
						|
 | 
						|
 | 
						|
def RemoveHaxeProperty(cls, attr: str):
 | 
						|
    RemoveProperty(cls, attr)
 | 
						|
 | 
						|
 | 
						|
def HaxeStringProperty(
 | 
						|
        prop_name: str,
 | 
						|
        *,
 | 
						|
        name: str = "",
 | 
						|
        description: str = "",
 | 
						|
        default: str = "",
 | 
						|
        maxlen: int = 0,
 | 
						|
        options: set = {'ANIMATABLE'},
 | 
						|
        override: set = set(),
 | 
						|
        tags: set = set(),
 | 
						|
        subtype: str = 'NONE',
 | 
						|
        update=None,
 | 
						|
        get=None,
 | 
						|
        set=None
 | 
						|
) -> 'bpy.types.StringProperty':
 | 
						|
    """Declares a new StringProperty that has a Haxe counterpart with
 | 
						|
    the given prop_name (Python and Haxe names must be identical for now).
 | 
						|
    """
 | 
						|
    return __haxe_prop(StringProperty, **locals())
 |