Added a panel with settings: - Building APK After Publish - to start the build after the project has been successfully published (False by default). Disabled if SDK path is not specified; - Emulator - list of installed emulators in Android Studio (AVD Manager). At the start of Blender, the list is always empty, to fill and update it, you must click the Refresh button. To start the emulator, if you wish, you need to press the "Start" button (the list of emulators is obtained with the emulator -list-avds command, the launch is performed with the emulator -avd [name] command). The "Start" button is disabled if the name of the emulator is not selected from the list; - Run Emulator After Building APK - launch the emulator after successfully building the APK file. Disabled if no APK build is installed or no emulator name selected. To perform these operations, you need to specify the ANDROID_SDK_ROOT environment variable, if it is not specified in the OS, then the "Android SDK Path" setting is read and set as the environment variable os.environ ['ANDROID_SDK_ROOT'] to perform operations. If no value is specified, then the user receives a corresponding message to the console. If the specified value is incorrect, then the user will receive messages from the corresponding programs.
351 lines
30 KiB
Python
Executable file
351 lines
30 KiB
Python
Executable file
import bpy
|
|
from bpy.props import *
|
|
|
|
import arm.assets as assets
|
|
import arm.make
|
|
import arm.nodes_logic
|
|
import arm.proxy
|
|
import arm.utils
|
|
|
|
# Armory version
|
|
arm_version = '2020.10'
|
|
arm_commit = '$Id$'
|
|
|
|
def init_properties():
|
|
global arm_version
|
|
bpy.types.World.arm_recompile = BoolProperty(name="Recompile", description="Recompile sources on next play", default=True)
|
|
bpy.types.World.arm_version = StringProperty(name="Version", description="Armory SDK version", default="")
|
|
bpy.types.World.arm_commit = StringProperty(name="Version Commit", description="Armory SDK version", default="")
|
|
bpy.types.World.arm_project_name = StringProperty(name="Name", description="Exported project name", default="", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_package = StringProperty(name="Package", description="Package name for scripts", default="arm", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_version = StringProperty(name="Version", description="Exported project version", default="1.0", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_bundle = StringProperty(name="Bundle", description="Exported project bundle", default="", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_android_sdk_compile = IntProperty(name="Compile Version SDK", description="Compile Android SDK Version", default=29, min=26, max=30, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_android_sdk_min = IntProperty(name="Minimal Version SDK", description="Minimal Version Android SDK", default=14, min=14, max=30, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_android_sdk_target = IntProperty(name="Target Version SDK", description="Target Version Android SDK", default=29, min=26, max=30, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_android_build_apk = BoolProperty(name="Building APK After Publishing", description="Starting APK build after publishing", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_android_run_avd = BoolProperty(name="Run Emulator After Building APK", description="Starting android emulator after APK build", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_android_list_avd = EnumProperty(
|
|
items=[(' ', ' ', ' ')],
|
|
name="Emulator", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_icon = StringProperty(name="Icon (PNG)", description="Exported project icon, must be a PNG image", default="", subtype="FILE_PATH", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_project_root = StringProperty(name="Root", description="Set root folder for linked assets", default="", subtype="DIR_PATH", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_physics = EnumProperty(
|
|
items=[('Disabled', 'Disabled', 'Disabled'),
|
|
('Auto', 'Auto', 'Auto'),
|
|
('Enabled', 'Enabled', 'Enabled')],
|
|
name="Physics", default='Auto', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_physics_engine = EnumProperty(
|
|
items=[('Bullet', 'Bullet', 'Bullet'),
|
|
('Oimo', 'Oimo', 'Oimo')],
|
|
name="Physics Engine", default='Bullet', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_navigation = EnumProperty(
|
|
items=[('Disabled', 'Disabled', 'Disabled'),
|
|
('Auto', 'Auto', 'Auto'),
|
|
('Enabled', 'Enabled', 'Enabled')],
|
|
name="Navigation", default='Auto', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_navigation_engine = EnumProperty(
|
|
items=[('Recast', 'Recast', 'Recast')],
|
|
name="Navigation Engine", default='Recast')
|
|
bpy.types.World.arm_ui = EnumProperty(
|
|
items=[('Disabled', 'Disabled', 'Disabled'),
|
|
('Enabled', 'Enabled', 'Enabled'),
|
|
('Auto', 'Auto', 'Auto')],
|
|
name="Zui", default='Auto', description="Include UI library", update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_audio = EnumProperty(
|
|
items=[('Disabled', 'Disabled', 'Disabled'),
|
|
('Enabled', 'Enabled', 'Enabled')],
|
|
name="Audio", default='Enabled', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_khafile = PointerProperty(name="Khafile", description="Source appended to khafile.js", update=assets.invalidate_compiler_cache, type=bpy.types.Text)
|
|
bpy.types.World.arm_texture_quality = FloatProperty(name="Texture Quality", default=1.0, min=0.0, max=1.0, subtype='FACTOR', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_sound_quality = FloatProperty(name="Sound Quality", default=0.9, min=0.0, max=1.0, subtype='FACTOR', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_minimize = BoolProperty(name="Minimize Data", description="Export scene data in binary", default=True, update=assets.invalidate_compiled_data)
|
|
bpy.types.World.arm_minify_js = BoolProperty(name="Minify JS", description="Minimize JavaScript output when publishing", default=True)
|
|
bpy.types.World.arm_optimize_data = BoolProperty(name="Optimize Data", description="Export more efficient geometry and shader data, prolongs build times", default=True, update=assets.invalidate_compiled_data)
|
|
bpy.types.World.arm_deinterleaved_buffers = BoolProperty(name="Deinterleaved Buffers", description="Use deinterleaved vertex buffers", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_export_tangents = BoolProperty(name="Export Tangents", description="Precompute tangents for normal mapping, otherwise computed in shader", default=True, update=assets.invalidate_compiled_data)
|
|
bpy.types.World.arm_batch_meshes = BoolProperty(name="Batch Meshes", description="Group meshes by materials to speed up rendering", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_batch_materials = BoolProperty(name="Batch Materials", description="Marge similar materials into single pipeline state", default=False, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_stream_scene = BoolProperty(name="Stream Scene", description="Stream scene content", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_lod_gen_levels = IntProperty(name="Levels", description="Number of levels to generate", default=3, min=1)
|
|
bpy.types.World.arm_lod_gen_ratio = FloatProperty(name="Decimate Ratio", description="Decimate ratio", default=0.8)
|
|
bpy.types.World.arm_cache_build = BoolProperty(name="Cache Build", description="Cache build files to speed up compilation", default=True)
|
|
bpy.types.World.arm_live_patch = BoolProperty(name="Live Patch", description="Live patching for Krom", default=False)
|
|
bpy.types.World.arm_play_camera = EnumProperty(
|
|
items=[('Scene', 'Scene', 'Scene'),
|
|
('Viewport', 'Viewport', 'Viewport')],
|
|
name="Camera", description="Viewport camera", default='Scene', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_play_scene = PointerProperty(name="Scene", description="Scene to launch", update=assets.invalidate_compiler_cache, type=bpy.types.Scene)
|
|
# Debug Console
|
|
bpy.types.World.arm_debug_console = BoolProperty(name="Enable", description="Show inspector in player and enable debug draw.\nRequires that Zui is not disabled", default=arm.utils.get_debug_console_auto(), update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_debug_console_position = EnumProperty(
|
|
items=[('Left', 'Left', 'Left'),
|
|
('Center', 'Center', 'Center'),
|
|
('Right', 'Right', 'Right')],
|
|
name="Position", description="Position Debug Console", default='Right', update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_debug_console_scale = FloatProperty(name="Scale Console", description="Scale Debug Console", default=1.0, min=0.3, max=10.0, subtype='FACTOR', update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_debug_console_visible = BoolProperty(name="Visible", description="Setting the console visibility at application start", default=True, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_verbose_output = BoolProperty(name="Verbose Output", description="Print additional information to the console during compilation", default=False)
|
|
bpy.types.World.arm_runtime = EnumProperty(
|
|
items=[('Krom', 'Krom', 'Krom'),
|
|
('Browser', 'Browser', 'Browser')],
|
|
name="Runtime", description="Runtime to use when launching the game", default='Krom', update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_loadscreen = BoolProperty(name="Loading Screen", description="Show asset loading progress on published builds", default=True)
|
|
bpy.types.World.arm_vsync = BoolProperty(name="VSync", description="Vertical Synchronization", default=True, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_dce = BoolProperty(name="DCE", description="Enable dead code elimination for publish builds", default=True, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_asset_compression = BoolProperty(name="Asset Compression", description="Enable scene data compression with LZ4 when publishing. Warning: This will slow down export!", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_single_data_file = BoolProperty(name="Single Data File", description="Pack exported meshes and materials into single file", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_write_config = BoolProperty(name="Write Config", description="Allow this project to be configured at runtime via a JSON file", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_compiler_inline = BoolProperty(name="Compiler Inline", description="Favor speed over size", default=True, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_winmode = EnumProperty(
|
|
items = [('Window', 'Window', 'Window'),
|
|
('Fullscreen', 'Fullscreen', 'Fullscreen')],
|
|
name="Mode", default='Window', description='Window mode to start in', update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_winorient = EnumProperty(
|
|
items = [('Multi', 'Multi', 'Multi'),
|
|
('Portrait', 'Portrait', 'Portrait'),
|
|
('Landscape', 'Landscape', 'Landscape')],
|
|
name="Orientation", default='Landscape', description='Set screen orientation on mobile devices')
|
|
bpy.types.World.arm_winresize = BoolProperty(name="Resizable", description="Allow window resize", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_winmaximize = BoolProperty(name="Maximizable", description="Allow window maximize", default=False, update=assets.invalidate_compiler_cache)
|
|
bpy.types.World.arm_winminimize = BoolProperty(name="Minimizable", description="Allow window minimize", default=True, update=assets.invalidate_compiler_cache)
|
|
# For object
|
|
bpy.types.Object.arm_instanced = EnumProperty(
|
|
items = [('Off', 'Off', 'Off'),
|
|
('Loc', 'Loc', 'Loc'),
|
|
('Loc + Rot', 'Loc + Rot', 'Loc + Rot'),
|
|
('Loc + Scale', 'Loc + Scale', 'Loc + Scale'),
|
|
('Loc + Rot + Scale', 'Loc + Rot + Scale', 'Loc + Rot + Scale')],
|
|
name="Instanced Children", default='Off', description='Use instacing to draw children', update=assets.invalidate_instance_cache)
|
|
bpy.types.Object.arm_export = BoolProperty(name="Export", description="Export object data", default=True)
|
|
bpy.types.Object.arm_spawn = BoolProperty(name="Spawn", description="Auto-add this object when creating scene", default=True)
|
|
bpy.types.Object.arm_mobile = BoolProperty(name="Mobile", description="Object moves during gameplay", default=False)
|
|
bpy.types.Object.arm_visible = BoolProperty(name="Visible", description="Render this object", default=True)
|
|
bpy.types.Object.arm_soft_body_margin = FloatProperty(name="Soft Body Margin", description="Collision margin", default=0.04)
|
|
bpy.types.Object.arm_rb_linear_factor = FloatVectorProperty(name="Linear Factor", size=3, description="Set to 0 to lock axis", default=[1,1,1])
|
|
bpy.types.Object.arm_rb_angular_factor = FloatVectorProperty(name="Angular Factor", size=3, description="Set to 0 to lock axis", default=[1,1,1])
|
|
bpy.types.Object.arm_rb_trigger = BoolProperty(name="Trigger", description="Disable contact response", default=False)
|
|
bpy.types.Object.arm_rb_force_deactivation = BoolProperty(name="Force Deactivation", description="Force deactivation on all rigid bodies for performance", default=True)
|
|
bpy.types.Object.arm_rb_deactivation_time = FloatProperty(name="Deactivation Time", description="Delay putting rigid body into sleep", default=0.0)
|
|
bpy.types.Object.arm_rb_ccd = BoolProperty(name="Continuous Collision Detection", description="Improve collision for fast moving objects", default=False)
|
|
bpy.types.Object.arm_animation_enabled = BoolProperty(name="Animation", description="Enable skinning & timeline animation", default=True)
|
|
bpy.types.Object.arm_tilesheet = StringProperty(name="Tilesheet", description="Set tilesheet animation", default='')
|
|
bpy.types.Object.arm_tilesheet_action = StringProperty(name="Tilesheet Action", description="Set startup action", default='')
|
|
bpy.types.Object.arm_proxy_sync_loc = BoolProperty(name="Location", description="Keep location synchronized with proxy object", default=True, update=arm.proxy.proxy_sync_loc)
|
|
bpy.types.Object.arm_proxy_sync_rot = BoolProperty(name="Rotation", description="Keep rotation synchronized with proxy object", default=True, update=arm.proxy.proxy_sync_rot)
|
|
bpy.types.Object.arm_proxy_sync_scale = BoolProperty(name="Scale", description="Keep scale synchronized with proxy object", default=True, update=arm.proxy.proxy_sync_scale)
|
|
bpy.types.Object.arm_proxy_sync_materials = BoolProperty(name="Materials", description="Keep materials synchronized with proxy object", default=True, update=arm.proxy.proxy_sync_materials)
|
|
bpy.types.Object.arm_proxy_sync_modifiers = BoolProperty(name="Modifiers", description="Keep modifiers synchronized with proxy object", default=True, update=arm.proxy.proxy_sync_modifiers)
|
|
bpy.types.Object.arm_proxy_sync_traits = BoolProperty(name="Traits", description="Keep traits synchronized with proxy object", default=True, update=arm.proxy.proxy_sync_traits)
|
|
bpy.types.Object.arm_proxy_sync_trait_props = BoolProperty(name="Trait Property Values", description="Keep trait property values synchronized with proxy object", default=False, update=arm.proxy.proxy_sync_traits)
|
|
# For speakers
|
|
bpy.types.Speaker.arm_play_on_start = BoolProperty(name="Play on Start", description="Play this sound automatically", default=False)
|
|
bpy.types.Speaker.arm_loop = BoolProperty(name="Loop", description="Loop this sound", default=False)
|
|
bpy.types.Speaker.arm_stream = BoolProperty(name="Stream", description="Stream this sound", default=False)
|
|
# For mesh
|
|
bpy.types.Mesh.arm_cached = BoolProperty(name="Mesh Cached", description="No need to reexport mesh data", default=False)
|
|
bpy.types.Mesh.arm_aabb = FloatVectorProperty(name="AABB", size=3, default=[0,0,0])
|
|
bpy.types.Mesh.arm_dynamic_usage = BoolProperty(name="Dynamic Usage", description="Mesh data can change at runtime", default=False)
|
|
bpy.types.Curve.arm_cached = BoolProperty(name="Mesh Cached", description="No need to reexport curve data", default=False)
|
|
bpy.types.Curve.arm_aabb = FloatVectorProperty(name="AABB", size=3, default=[0,0,0])
|
|
bpy.types.Curve.arm_dynamic_usage = BoolProperty(name="Dynamic Data Usage", description="Curve data can change at runtime", default=False)
|
|
bpy.types.MetaBall.arm_cached = BoolProperty(name="Mesh Cached", description="No need to reexport metaball data", default=False)
|
|
bpy.types.MetaBall.arm_aabb = FloatVectorProperty(name="AABB", size=3, default=[0,0,0])
|
|
bpy.types.MetaBall.arm_dynamic_usage = BoolProperty(name="Dynamic Data Usage", description="Metaball data can change at runtime", default=False)
|
|
# For armature
|
|
bpy.types.Armature.arm_cached = BoolProperty(name="Armature Cached", description="No need to reexport armature data", default=False)
|
|
bpy.types.Armature.arm_autobake = BoolProperty(name="Auto Bake", description="Bake constraints automatically", default=True)
|
|
# For camera
|
|
bpy.types.Camera.arm_frustum_culling = BoolProperty(name="Frustum Culling", description="Perform frustum culling for this camera", default=True)
|
|
|
|
# Render path generator
|
|
bpy.types.World.rp_preset = EnumProperty(
|
|
items=[('Desktop', 'Desktop', 'Desktop'),
|
|
('Mobile', 'Mobile', 'Mobile'),
|
|
('Max', 'Max', 'Max'),
|
|
('2D/Baked', '2D/Baked', '2D/Baked'),
|
|
],
|
|
name="Preset", description="Render path preset", default='Desktop')
|
|
bpy.types.World.arm_envtex_name = StringProperty(name="Environment Texture", default='')
|
|
bpy.types.World.arm_envtex_irr_name = StringProperty(name="Environment Irradiance", default='')
|
|
bpy.types.World.arm_envtex_num_mips = IntProperty(name="Number of mips", default=0)
|
|
bpy.types.World.arm_envtex_color = FloatVectorProperty(name="Environment Color", size=4, default=[0,0,0,1])
|
|
bpy.types.World.arm_envtex_strength = FloatProperty(name="Environment Strength", default=1.0)
|
|
bpy.types.World.arm_envtex_sun_direction = FloatVectorProperty(name="Sun Direction", size=3, default=[0,0,0])
|
|
bpy.types.World.arm_envtex_turbidity = FloatProperty(name="Turbidity", default=1.0)
|
|
bpy.types.World.arm_envtex_ground_albedo = FloatProperty(name="Ground Albedo", default=0.0)
|
|
bpy.types.Material.arm_cast_shadow = BoolProperty(name="Cast Shadow", default=True)
|
|
bpy.types.Material.arm_receive_shadow = BoolProperty(name="Receive Shadow", description="Requires forward render path", default=True)
|
|
bpy.types.Material.arm_overlay = BoolProperty(name="Overlay", default=False)
|
|
bpy.types.Material.arm_decal = BoolProperty(name="Decal", default=False)
|
|
bpy.types.Material.arm_two_sided = BoolProperty(name="Two-Sided", description="Flip normal when drawing back-face", default=False)
|
|
bpy.types.Material.arm_cull_mode = EnumProperty(
|
|
items=[('none', 'Both', 'None'),
|
|
('clockwise', 'Front', 'Clockwise'),
|
|
('counter_clockwise', 'Back', 'Counter-Clockwise')],
|
|
name="Cull Mode", default='clockwise', description="Draw geometry faces")
|
|
bpy.types.Material.arm_discard = BoolProperty(name="Alpha Test", default=False, description="Do not render fragments below specified opacity threshold")
|
|
bpy.types.Material.arm_discard_opacity = FloatProperty(name="Mesh Opacity", default=0.2, min=0, max=1)
|
|
bpy.types.Material.arm_discard_opacity_shadows = FloatProperty(name="Shadows Opacity", default=0.1, min=0, max=1)
|
|
bpy.types.Material.arm_custom_material = StringProperty(name="Custom Material", description="Write custom material", default='')
|
|
bpy.types.Material.arm_billboard = EnumProperty(
|
|
items=[('off', 'Off', 'Off'),
|
|
('spherical', 'Spherical', 'Spherical'),
|
|
('cylindrical', 'Cylindrical', 'Cylindrical')],
|
|
name="Billboard", default='off', description="Track camera", update=assets.invalidate_shader_cache)
|
|
bpy.types.Material.arm_tilesheet_flag = BoolProperty(name="Tilesheet Flag", description="This material is used for tilesheet", default=False)
|
|
bpy.types.Material.arm_particle_flag = BoolProperty(name="Particle Flag", description="This material is used for particles", default=False)
|
|
bpy.types.Material.arm_particle_fade = BoolProperty(name="Particle Fade", description="Fade particles in and out", default=False)
|
|
bpy.types.Material.arm_blending = BoolProperty(name="Blending", description="Enable additive blending", default=False)
|
|
bpy.types.Material.arm_blending_source = EnumProperty(
|
|
items=[('blend_one', 'One', 'One'),
|
|
('blend_zero', 'Zero', 'Zero'),
|
|
('source_alpha', 'Source Alpha', 'Source Alpha'),
|
|
('destination_alpha', 'Destination Alpha', 'Destination Alpha'),
|
|
('inverse_source_alpha', 'Inverse Source Alpha', 'Inverse Source Alpha'),
|
|
('inverse_destination_alpha', 'Inverse Destination Alpha', 'Inverse Destination Alpha'),
|
|
('source_color', 'Source Color', 'Source Color'),
|
|
('destination_color', 'Destination Color', 'Destination Color'),
|
|
('inverse_source_color', 'Inverse Source Color', 'Inverse Source Color'),
|
|
('inverse_destination_color', 'Inverse Destination Color', 'Inverse Destination Color')],
|
|
name='Source', default='blend_one', description='Blending factor', update=assets.invalidate_shader_cache)
|
|
bpy.types.Material.arm_blending_destination = EnumProperty(
|
|
items=[('blend_one', 'One', 'One'),
|
|
('blend_zero', 'Zero', 'Zero'),
|
|
('source_alpha', 'Source Alpha', 'Source Alpha'),
|
|
('destination_alpha', 'Destination Alpha', 'Destination Alpha'),
|
|
('inverse_source_alpha', 'Inverse Source Alpha', 'Inverse Source Alpha'),
|
|
('inverse_destination_alpha', 'Inverse Destination Alpha', 'Inverse Destination Alpha'),
|
|
('source_color', 'Source Color', 'Source Color'),
|
|
('destination_color', 'Destination Color', 'Destination Color'),
|
|
('inverse_source_color', 'Inverse Source Color', 'Inverse Source Color'),
|
|
('inverse_destination_color', 'Inverse Destination Color', 'Inverse Destination Color')],
|
|
name='Destination', default='blend_one', description='Blending factor', update=assets.invalidate_shader_cache)
|
|
bpy.types.Material.arm_blending_operation = EnumProperty(
|
|
items=[('add', 'Add', 'Add'),
|
|
('subtract', 'Subtract', 'Subtract'),
|
|
('reverse_subtract', 'Reverse Subtract', 'Reverse Subtract'),
|
|
('min', 'Min', 'Min'),
|
|
('max', 'Max', 'Max')],
|
|
name='Operation', default='add', description='Blending operation', update=assets.invalidate_shader_cache)
|
|
bpy.types.Material.arm_blending_source_alpha = EnumProperty(
|
|
items=[('blend_one', 'One', 'One'),
|
|
('blend_zero', 'Zero', 'Zero'),
|
|
('source_alpha', 'Source Alpha', 'Source Alpha'),
|
|
('destination_alpha', 'Destination Alpha', 'Destination Alpha'),
|
|
('inverse_source_alpha', 'Inverse Source Alpha', 'Inverse Source Alpha'),
|
|
('inverse_destination_alpha', 'Inverse Destination Alpha', 'Inverse Destination Alpha'),
|
|
('source_color', 'Source Color', 'Source Color'),
|
|
('destination_color', 'Destination Color', 'Destination Color'),
|
|
('inverse_source_color', 'Inverse Source Color', 'Inverse Source Color'),
|
|
('inverse_destination_color', 'Inverse Destination Color', 'Inverse Destination Color')],
|
|
name='Source', default='blend_one', description='Blending factor', update=assets.invalidate_shader_cache)
|
|
bpy.types.Material.arm_blending_destination_alpha = EnumProperty(
|
|
items=[('blend_one', 'One', 'One'),
|
|
('blend_zero', 'Zero', 'Zero'),
|
|
('source_alpha', 'Source Alpha', 'Source Alpha'),
|
|
('destination_alpha', 'Destination Alpha', 'Destination Alpha'),
|
|
('inverse_source_alpha', 'Inverse Source Alpha', 'Inverse Source Alpha'),
|
|
('inverse_destination_alpha', 'Inverse Destination Alpha', 'Inverse Destination Alpha'),
|
|
('source_color', 'Source Color', 'Source Color'),
|
|
('destination_color', 'Destination Color', 'Destination Color'),
|
|
('inverse_source_color', 'Inverse Source Color', 'Inverse Source Color'),
|
|
('inverse_destination_color', 'Inverse Destination Color', 'Inverse Destination Color')],
|
|
name='Destination', default='blend_one', description='Blending factor', update=assets.invalidate_shader_cache)
|
|
bpy.types.Material.arm_blending_operation_alpha = EnumProperty(
|
|
items=[('add', 'Add', 'Add'),
|
|
('subtract', 'Subtract', 'Subtract'),
|
|
('reverse_subtract', 'Reverse Subtract', 'Reverse Subtract'),
|
|
('min', 'Min', 'Min'),
|
|
('max', 'Max', 'Max')],
|
|
name='Operation', default='add', description='Blending operation', update=assets.invalidate_shader_cache)
|
|
# For scene
|
|
bpy.types.Scene.arm_export = BoolProperty(name="Export", description="Export scene data", default=True)
|
|
bpy.types.Scene.arm_terrain_textures = StringProperty(name="Textures", description="Set root folder for terrain assets", default="//Bundled/", subtype="DIR_PATH")
|
|
bpy.types.Scene.arm_terrain_sectors = IntVectorProperty(name="Sectors", description="Number of sectors to generate", default=[1,1], size=2)
|
|
bpy.types.Scene.arm_terrain_sector_size = FloatProperty(name="Sector Size", description="Dimensions for single sector", default=16)
|
|
bpy.types.Scene.arm_terrain_height_scale = FloatProperty(name="Height Scale", description="Scale height from the 0-1 range", default=5)
|
|
bpy.types.Scene.arm_terrain_object = PointerProperty(name="Object", type=bpy.types.Object, description="Terrain root object")
|
|
# For light
|
|
bpy.types.Light.arm_clip_start = FloatProperty(name="Clip Start", default=0.1)
|
|
bpy.types.Light.arm_clip_end = FloatProperty(name="Clip End", default=50.0)
|
|
bpy.types.Light.arm_fov = FloatProperty(name="Field of View", default=0.84)
|
|
bpy.types.Light.arm_shadows_bias = FloatProperty(name="Bias", description="Depth offset to fight shadow acne", default=1.0)
|
|
bpy.types.World.arm_light_ies_texture = StringProperty(name="IES Texture", default="")
|
|
bpy.types.World.arm_light_clouds_texture = StringProperty(name="Clouds Texture", default="")
|
|
|
|
bpy.types.World.arm_rpcache_list = CollectionProperty(type=bpy.types.PropertyGroup)
|
|
bpy.types.World.arm_scripts_list = CollectionProperty(type=bpy.types.PropertyGroup)
|
|
bpy.types.World.arm_bundled_scripts_list = CollectionProperty(type=bpy.types.PropertyGroup)
|
|
bpy.types.World.arm_canvas_list = CollectionProperty(type=bpy.types.PropertyGroup)
|
|
bpy.types.World.arm_wasm_list = CollectionProperty(type=bpy.types.PropertyGroup)
|
|
bpy.types.World.world_defs = StringProperty(name="World Shader Defs", default='')
|
|
bpy.types.World.compo_defs = StringProperty(name="Compositor Shader Defs", default='')
|
|
|
|
bpy.types.World.arm_use_clouds = BoolProperty(name="Clouds", default=False, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_clouds_lower = FloatProperty(name="Lower", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_clouds_upper = FloatProperty(name="Upper", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_clouds_wind = FloatVectorProperty(name="Wind", default=[1.0, 0.0], size=2, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_clouds_secondary = FloatProperty(name="Secondary", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_clouds_precipitation = FloatProperty(name="Precipitation", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
|
|
bpy.types.World.arm_clouds_steps = IntProperty(name="Steps", default=24, min=1, max=240, update=assets.invalidate_shader_cache)
|
|
|
|
bpy.types.Material.export_uvs = BoolProperty(name="Export UVs", default=False)
|
|
bpy.types.Material.export_vcols = BoolProperty(name="Export VCols", default=False)
|
|
bpy.types.Material.export_tangents = BoolProperty(name="Export Tangents", default=False)
|
|
bpy.types.Material.arm_skip_context = StringProperty(name="Skip Context", default='')
|
|
bpy.types.Material.arm_material_id = IntProperty(name="ID", default=0)
|
|
bpy.types.NodeSocket.is_uniform = BoolProperty(name="Is Uniform", description="Mark node sockets to be processed as material uniforms", default=False)
|
|
bpy.types.NodeTree.arm_cached = BoolProperty(name="Node Tree Cached", description="No need to reexport node tree", default=False)
|
|
bpy.types.Material.signature = StringProperty(name="Signature", description="Unique string generated from material nodes", default="")
|
|
bpy.types.Material.arm_cached = BoolProperty(name="Material Cached", description="No need to reexport material data", default=False)
|
|
bpy.types.Node.arm_material_param = BoolProperty(name="Parameter", description="Control this node from script", default=False)
|
|
bpy.types.Node.arm_logic_id = StringProperty(name="ID", description="Nodes with equal identifier will share data", default='')
|
|
bpy.types.Node.arm_watch = BoolProperty(name="Watch", description="Watch value of this node in debug console", default=False)
|
|
bpy.types.Node.arm_version = IntProperty(name="Node Version", description="The version of an instanced node", default=0)
|
|
# Particles
|
|
bpy.types.ParticleSettings.arm_count_mult = FloatProperty(name="Multiply Count", description="Multiply particle count when rendering in Armory", default=1.0)
|
|
bpy.types.ParticleSettings.arm_loop = BoolProperty(name="Loop", description="Loop this particle system", default=False)
|
|
|
|
create_wrd()
|
|
|
|
def create_wrd():
|
|
if not 'Arm' in bpy.data.worlds:
|
|
wrd = bpy.data.worlds.new('Arm')
|
|
wrd.use_fake_user = True # Store data world object, add fake user to keep it alive
|
|
wrd.arm_version = arm_version
|
|
wrd.arm_commit = arm_commit
|
|
|
|
def init_properties_on_load():
|
|
if not 'Arm' in bpy.data.worlds:
|
|
init_properties()
|
|
# New project?
|
|
if bpy.data.filepath == '':
|
|
wrd = bpy.data.worlds['Arm']
|
|
wrd.arm_debug_console = arm.utils.get_debug_console_auto()
|
|
arm.utils.fetch_script_names()
|
|
|
|
def update_armory_world():
|
|
global arm_version
|
|
wrd = bpy.data.worlds['Arm']
|
|
# Outdated project
|
|
if bpy.data.filepath != '' and (wrd.arm_version != arm_version or wrd.arm_commit != arm_commit): # Call on project load only
|
|
# This allows for seamless migration from ealier versions of Armory
|
|
for rp in wrd.arm_rplist: # TODO: deprecated
|
|
if rp.rp_gi != 'Off':
|
|
rp.rp_gi = 'Off'
|
|
rp.rp_voxelao = True
|
|
# Replace deprecated nodes
|
|
arm.nodes_logic.replaceAll()
|
|
|
|
print('Project updated to sdk v' + arm_version + ' (' + arm_commit + ')')
|
|
wrd.arm_version = arm_version
|
|
wrd.arm_commit = arm_commit
|
|
arm.make.clean()
|
|
|
|
def register():
|
|
init_properties()
|
|
arm.utils.fetch_bundled_script_names()
|
|
|
|
def unregister():
|
|
pass
|