283 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			8.2 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, Sequence, 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']
 | |
| 
 | |
|     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())
 |