From f39ab2a922f6d1181b24deeb9556508ad8de10d2 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Wed, 22 Feb 2017 16:55:51 +0100 Subject: [PATCH] Temp ext fix --- blender/material/texture.py | 7 +++- blender/props.py | 4 +- blender/props_ui.py | 73 ++++++++++++++++++++++--------------- 3 files changed, 52 insertions(+), 32 deletions(-) diff --git a/blender/material/texture.py b/blender/material/texture.py index 30482fe8..1dc87ad7 100644 --- a/blender/material/texture.py +++ b/blender/material/texture.py @@ -67,7 +67,12 @@ def make_texture(image_node, tex_name): assets.add(converted_path) else: # Link image path to assets - assets.add(armutils.safe_assetpath(image.filepath)) + # TODO: Khamake converts .PNG to .jpg? Convert ext to lowercase on windows + if armutils.get_os() == 'win': + s = image.filepath.rsplit('.', 1) + assets.add(armutils.safe_assetpath(s[0] + '.' + s[1].lower())) + else: + assets.add(armutils.safe_assetpath(image.filepath)) # if image_format != 'RGBA32': diff --git a/blender/props.py b/blender/props.py index c8491b73..82b4fb68 100755 --- a/blender/props.py +++ b/blender/props.py @@ -227,7 +227,7 @@ def init_properties(): bpy.types.Mesh.mesh_cached_verts = bpy.props.IntProperty(name="Last Verts", description="Number of vertices in last export", default=0) bpy.types.Mesh.mesh_cached_edges = bpy.props.IntProperty(name="Last Edges", description="Number of edges in last export", default=0) bpy.types.Mesh.mesh_aabb = bpy.props.FloatVectorProperty(name="AABB", size=3, default=[0,0,0]) - bpy.types.Mesh.dynamic_usage = bpy.props.BoolProperty(name="Dynamic Data Usage", description="Mesh data can change at runtime", default=False) + bpy.types.Mesh.dynamic_usage = bpy.props.BoolProperty(name="Dynamic Usage", description="Mesh data can change at runtime", default=False) bpy.types.Mesh.data_compressed = bpy.props.BoolProperty(name="Compress Data", description="Pack data into zip file", default=False) bpy.types.Curve.mesh_cached = bpy.props.BoolProperty(name="Mesh Cached", description="No need to reexport curve data", default=False) bpy.types.Curve.data_compressed = bpy.props.BoolProperty(name="Compress Data", description="Pack data into zip file", default=False) @@ -482,7 +482,7 @@ def init_properties(): bpy.types.Lamp.lamp_clip_start = bpy.props.FloatProperty(name="Clip Start", default=0.1) bpy.types.Lamp.lamp_clip_end = bpy.props.FloatProperty(name="Clip End", default=50.0) bpy.types.Lamp.lamp_fov = bpy.props.FloatProperty(name="Field of View", default=0.84) - bpy.types.Lamp.lamp_shadows_bias = bpy.props.FloatProperty(name="Shadows Bias", description="Depth offset for shadow acne", default=0.0002) + bpy.types.Lamp.lamp_shadows_bias = bpy.props.FloatProperty(name="Bias", description="Depth offset for shadow acne", default=0.0002) bpy.types.Lamp.lamp_omni_shadows = bpy.props.BoolProperty(name="Omnidirectional Shadows", description="Fakes omnidirectional shadows by creating 6 directional lights - will result in preformance loss - usable for deferred renderers only", default=False) if not 'Arm' in bpy.data.worlds: diff --git a/blender/props_ui.py b/blender/props_ui.py index a8e7df51..acd2b256 100644 --- a/blender/props_ui.py +++ b/blender/props_ui.py @@ -44,8 +44,9 @@ class ObjectPropsPanel(bpy.types.Panel): layout.prop(obj, 'game_visible') else: layout.prop(obj, 'hide_render') - layout.prop(obj, 'spawn') - layout.prop(obj, 'mobile') + row = layout.row(align=True) + row.prop(obj, 'spawn') + row.prop(obj, 'mobile') if obj.type == 'MESH': layout.prop(obj, 'instanced_children') if obj.instanced_children: @@ -106,8 +107,9 @@ class ObjectPropsPanel(bpy.types.Panel): row.prop(animitem, "start_prop") row.prop(animitem, "end_prop") layout.prop(animitem, "speed_prop") - layout.prop(animitem, "loop_prop") - layout.prop(animitem, "reflect_prop") + row = layout.row(align=True) + row.prop(animitem, "loop_prop") + row.prop(animitem, "reflect_prop") class ModifiersPropsPanel(bpy.types.Panel): bl_label = "Armory Props" @@ -166,19 +168,23 @@ class DataPropsPanel(bpy.types.Panel): layout.prop(obj.data, 'is_mirror') if obj.data.is_mirror == True: layout.label('Resolution') - layout.prop(obj.data, 'mirror_resolution_x') - layout.prop(obj.data, 'mirror_resolution_y') + row = layout.row(align=True) + row.prop(obj.data, 'mirror_resolution_x') + row.prop(obj.data, 'mirror_resolution_y') layout.prop(obj.data, 'frustum_culling') layout.prop_search(obj.data, "renderpath_path", bpy.data, "node_groups") elif obj.type == 'MESH' or obj.type == 'FONT' or obj.type == 'META': - layout.prop(obj.data, 'dynamic_usage') - layout.prop(obj.data, 'data_compressed') + row = layout.row(align=True) + row.prop(obj.data, 'dynamic_usage') + row.prop(obj.data, 'data_compressed') layout.operator("arm.invalidate_cache") elif obj.type == 'LAMP': - layout.prop(obj.data, 'lamp_clip_start') - layout.prop(obj.data, 'lamp_clip_end') - layout.prop(obj.data, 'lamp_fov') - layout.prop(obj.data, 'lamp_shadows_bias') + row = layout.row(align=True) + row.prop(obj.data, 'lamp_clip_start') + row.prop(obj.data, 'lamp_clip_end') + row = layout.row(align=False) + row.prop(obj.data, 'lamp_fov') + row.prop(obj.data, 'lamp_shadows_bias') if obj.data.type == 'POINT': layout.prop(obj.data, 'lamp_omni_shadows') if obj.data.lamp_omni_shadows: @@ -274,12 +280,13 @@ class MaterialPropsPanel(bpy.types.Panel): if mat == None: return - layout.prop(mat, 'cast_shadow') - layout.prop(mat, 'receive_shadow') - layout.prop(mat, 'overlay') + row = layout.row(align=True) + row.prop(mat, 'cast_shadow') + row.prop(mat, 'receive_shadow') layout.prop(bpy.data.worlds['Arm'], 'arm_material_advanced') if bpy.data.worlds['Arm'].arm_material_advanced: + layout.prop(mat, 'overlay') layout.prop(mat, 'override_cull') if mat.override_cull: layout.prop(mat, 'override_cull_mode') @@ -300,12 +307,14 @@ class MaterialPropsPanel(bpy.types.Panel): layout.label('Height map') layout.prop(mat, 'height_tess') if mat.height_tess: - layout.prop(mat, 'height_tess_inner') - layout.prop(mat, 'height_tess_outer') + row = layout.row(align=True) + row.prop(mat, 'height_tess_inner') + row.prop(mat, 'height_tess_outer') layout.prop(mat, 'height_tess_shadows') if mat.height_tess_shadows: - layout.prop(mat, 'height_tess_shadows_inner') - layout.prop(mat, 'height_tess_shadows_outer') + row = layout.row(align=True) + row.prop(mat, 'height_tess_shadows_inner') + row.prop(mat, 'height_tess_shadows_outer') layout.prop(mat, 'transluc_shadows') layout.operator("arm.invalidate_material_cache") @@ -321,9 +330,10 @@ class WorldPropsPanel(bpy.types.Panel): # wrd = bpy.context.world wrd = bpy.data.worlds['Arm'] - layout.prop(wrd, 'generate_irradiance') + row = layout.row(align=True) + row.prop(wrd, 'generate_irradiance') if wrd.generate_irradiance: - layout.prop(wrd, 'generate_radiance') + row.prop(wrd, 'generate_radiance') if wrd.generate_radiance: layout.prop(wrd, 'generate_radiance_size') @@ -379,16 +389,19 @@ class ArmoryPlayerPanel(bpy.types.Panel): layout.prop(wrd, make_utils.runtime_to_gapi()) layout.prop(wrd, 'arm_play_console') if armutils.with_krom(): - layout.prop(wrd, 'arm_play_live_patch') + row = layout.row(align=True) + row.prop(wrd, 'arm_play_live_patch') if wrd.arm_play_live_patch: - layout.prop(wrd, 'arm_play_auto_build') + row.prop(wrd, 'arm_play_auto_build') layout.operator("arm.render", icon="RENDER_STILL") - layout.prop(wrd, 'arm_cache_shaders') - layout.prop(wrd, 'arm_cache_compiler') + row = layout.row(align=True) + row.prop(wrd, 'arm_cache_shaders') + row.prop(wrd, 'arm_cache_compiler') + row = layout.row(align=True) + row.prop(wrd, 'arm_minimize') + row.prop(wrd, 'arm_optimize_mesh') layout.prop(wrd, 'arm_gpu_processing') - layout.prop(wrd, 'arm_minimize') - layout.prop(wrd, 'arm_optimize_mesh') layout.prop(wrd, 'arm_sampled_animation') layout.prop(wrd, 'arm_deinterleaved_buffers') layout.label('Libraries') @@ -428,8 +441,10 @@ class ArmoryProjectPanel(bpy.types.Panel): layout.prop(wrd, 'arm_spawn_all_layers') layout.label('Armory v' + wrd.arm_version) layout.operator('arm.check_updates') - layout.operator('arm.open_manual') - layout.operator('arm.report_issue') + row = layout.row(align=True) + row.alignment = 'EXPAND' + row.operator('arm.open_manual') + row.operator('arm.report_issue') class ArmoryPlayButton(bpy.types.Operator): '''Launch player in new window'''