From f24324a9034e0f6a4c51b52eff2bafa176798eae Mon Sep 17 00:00:00 2001 From: Lubos Lenco Date: Thu, 10 Aug 2017 14:10:37 +0200 Subject: [PATCH] Fix DCE --- Sources/armory/trait/ArcBall.hx | 1 - Sources/armory/trait/Character.hx | 1 - Sources/armory/trait/FirstPersonController.hx | 1 - Sources/armory/trait/MirrorTexture.hx | 1 - Sources/armory/trait/NavAgent.hx | 1 - Sources/armory/trait/NavCrowd.hx | 1 - Sources/armory/trait/NavMesh.hx | 1 - Sources/armory/trait/PhysicsDrag.hx | 1 - Sources/armory/trait/SceneInstance.hx | 1 - .../armory/trait/SidescrollerController.hx | 1 - Sources/armory/trait/ThirdPersonController.hx | 1 - Sources/armory/trait/VRNavigation.hx | 1 - Sources/armory/trait/VehicleBody.hx | 1 - Sources/armory/trait/WalkNavigation.hx | 1 - .../armory/trait/internal/CameraController.hx | 1 - Sources/armory/trait/internal/CanvasScript.hx | 1 - Sources/armory/trait/internal/DebugConsole.hx | 1 - Sources/armory/trait/internal/JSScript.hx | 1 - Sources/armory/trait/internal/JSScriptAPI.hx | 1 - Sources/armory/trait/internal/LoadBar.hx | 1 - Sources/armory/trait/internal/MovieTexture.hx | 1 - Sources/armory/trait/internal/Navigation.hx | 1 - Sources/armory/trait/internal/PathTracer.hx | 1 - .../trait/internal/PhysicsConstraint.hx | 1 - Sources/armory/trait/internal/PhysicsHook.hx | 1 - Sources/armory/trait/internal/PhysicsWorld.hx | 1 - Sources/armory/trait/internal/RigidBody.hx | 1 - Sources/armory/trait/internal/SoftBody.hx | 1 - Sources/armory/trait/internal/SpaceArmory.hx | 1 - blender/arm/exporter.py | 6 ++++ blender/arm/make.py | 8 +++--- blender/arm/props.py | 3 +- blender/arm/props_ui.py | 4 ++- blender/arm/write_data.py | 28 ++++++++++--------- 34 files changed, 30 insertions(+), 48 deletions(-) diff --git a/Sources/armory/trait/ArcBall.hx b/Sources/armory/trait/ArcBall.hx index dc30275d..2e735766 100644 --- a/Sources/armory/trait/ArcBall.hx +++ b/Sources/armory/trait/ArcBall.hx @@ -6,7 +6,6 @@ import iron.system.Input; import iron.math.Vec4; import iron.math.Quat; -@:keep class ArcBall extends Trait { public function new() { diff --git a/Sources/armory/trait/Character.hx b/Sources/armory/trait/Character.hx index 11a70a98..6746c727 100644 --- a/Sources/armory/trait/Character.hx +++ b/Sources/armory/trait/Character.hx @@ -6,7 +6,6 @@ import iron.system.Input; import iron.math.Vec4; import iron.math.Quat; -@:keep class Character extends Trait { var speed = 0.0; diff --git a/Sources/armory/trait/FirstPersonController.hx b/Sources/armory/trait/FirstPersonController.hx index a87c8963..072084d4 100755 --- a/Sources/armory/trait/FirstPersonController.hx +++ b/Sources/armory/trait/FirstPersonController.hx @@ -6,7 +6,6 @@ import iron.object.Object; import armory.trait.internal.PhysicsWorld; import armory.trait.internal.CameraController; -@:keep class FirstPersonController extends CameraController { #if (!arm_physics) diff --git a/Sources/armory/trait/MirrorTexture.hx b/Sources/armory/trait/MirrorTexture.hx index f0982a22..0bee3f7d 100755 --- a/Sources/armory/trait/MirrorTexture.hx +++ b/Sources/armory/trait/MirrorTexture.hx @@ -3,7 +3,6 @@ package armory.trait; import iron.Trait; import iron.object.MeshObject; -@:keep class MirrorTexture extends Trait { var cameraName:String; diff --git a/Sources/armory/trait/NavAgent.hx b/Sources/armory/trait/NavAgent.hx index 8c37f68f..42abd342 100644 --- a/Sources/armory/trait/NavAgent.hx +++ b/Sources/armory/trait/NavAgent.hx @@ -5,7 +5,6 @@ import iron.math.Vec4; import iron.math.Quat; import iron.system.Tween; -@:keep class NavAgent extends Trait { var path:Array = null; diff --git a/Sources/armory/trait/NavCrowd.hx b/Sources/armory/trait/NavCrowd.hx index 610206e3..b074971e 100755 --- a/Sources/armory/trait/NavCrowd.hx +++ b/Sources/armory/trait/NavCrowd.hx @@ -2,7 +2,6 @@ package armory.trait; import iron.Trait; -@:keep class NavCrowd extends Trait { public function new() { diff --git a/Sources/armory/trait/NavMesh.hx b/Sources/armory/trait/NavMesh.hx index eef31cc4..58f87235 100755 --- a/Sources/armory/trait/NavMesh.hx +++ b/Sources/armory/trait/NavMesh.hx @@ -9,7 +9,6 @@ import iron.Trait; import iron.data.Data; import iron.math.Vec4; -@:keep class NavMesh extends Trait { #if (!arm_navigation) diff --git a/Sources/armory/trait/PhysicsDrag.hx b/Sources/armory/trait/PhysicsDrag.hx index 2e106b67..69058484 100755 --- a/Sources/armory/trait/PhysicsDrag.hx +++ b/Sources/armory/trait/PhysicsDrag.hx @@ -10,7 +10,6 @@ import armory.trait.internal.PhysicsWorld; import haxebullet.Bullet; #end -@:keep class PhysicsDrag extends Trait { #if (!arm_physics) diff --git a/Sources/armory/trait/SceneInstance.hx b/Sources/armory/trait/SceneInstance.hx index b6ecf16b..1f8e2948 100755 --- a/Sources/armory/trait/SceneInstance.hx +++ b/Sources/armory/trait/SceneInstance.hx @@ -2,7 +2,6 @@ package armory.trait; import iron.Trait; -@:keep class SceneInstance extends Trait { function safeFilename(s:String) { diff --git a/Sources/armory/trait/SidescrollerController.hx b/Sources/armory/trait/SidescrollerController.hx index c1f0feed..ed25d4fa 100644 --- a/Sources/armory/trait/SidescrollerController.hx +++ b/Sources/armory/trait/SidescrollerController.hx @@ -3,7 +3,6 @@ package armory.trait; import iron.math.Vec4; import armory.trait.internal.CameraController; -@:keep class SidescrollerController extends CameraController { #if (!arm_physics) diff --git a/Sources/armory/trait/ThirdPersonController.hx b/Sources/armory/trait/ThirdPersonController.hx index d7171ae4..03215cf9 100755 --- a/Sources/armory/trait/ThirdPersonController.hx +++ b/Sources/armory/trait/ThirdPersonController.hx @@ -5,7 +5,6 @@ import iron.system.Input; import armory.trait.internal.PhysicsWorld; import armory.trait.internal.CameraController; -@:keep class ThirdPersonController extends CameraController { #if (!arm_physics) diff --git a/Sources/armory/trait/VRNavigation.hx b/Sources/armory/trait/VRNavigation.hx index b25502f0..55177822 100755 --- a/Sources/armory/trait/VRNavigation.hx +++ b/Sources/armory/trait/VRNavigation.hx @@ -6,7 +6,6 @@ import iron.system.Time; import iron.object.CameraObject; import iron.math.Vec4; -@:keep class VRNavigation extends Trait { #if arm_vr diff --git a/Sources/armory/trait/VehicleBody.hx b/Sources/armory/trait/VehicleBody.hx index 2c113460..a740118c 100755 --- a/Sources/armory/trait/VehicleBody.hx +++ b/Sources/armory/trait/VehicleBody.hx @@ -10,7 +10,6 @@ import armory.trait.internal.PhysicsWorld; import haxebullet.Bullet; #end -@:keep class VehicleBody extends Trait { #if (!arm_physics) diff --git a/Sources/armory/trait/WalkNavigation.hx b/Sources/armory/trait/WalkNavigation.hx index cfdf57a8..183622ef 100755 --- a/Sources/armory/trait/WalkNavigation.hx +++ b/Sources/armory/trait/WalkNavigation.hx @@ -6,7 +6,6 @@ import iron.system.Time; import iron.object.CameraObject; import iron.math.Vec4; -@:keep class WalkNavigation extends Trait { static inline var speed = 5.0; diff --git a/Sources/armory/trait/internal/CameraController.hx b/Sources/armory/trait/internal/CameraController.hx index 04f311de..972e0c9d 100755 --- a/Sources/armory/trait/internal/CameraController.hx +++ b/Sources/armory/trait/internal/CameraController.hx @@ -5,7 +5,6 @@ import iron.system.Input; import iron.object.Transform; import iron.object.CameraObject; -@:keep class CameraController extends Trait { #if (!arm_physics) diff --git a/Sources/armory/trait/internal/CanvasScript.hx b/Sources/armory/trait/internal/CanvasScript.hx index 8839987f..dad5021b 100644 --- a/Sources/armory/trait/internal/CanvasScript.hx +++ b/Sources/armory/trait/internal/CanvasScript.hx @@ -6,7 +6,6 @@ import zui.Zui; import zui.Canvas; #end -@:keep class CanvasScript extends Trait { #if arm_ui diff --git a/Sources/armory/trait/internal/DebugConsole.hx b/Sources/armory/trait/internal/DebugConsole.hx index a671ded7..0f8e510d 100755 --- a/Sources/armory/trait/internal/DebugConsole.hx +++ b/Sources/armory/trait/internal/DebugConsole.hx @@ -10,7 +10,6 @@ import zui.Zui; import zui.Id; #end -@:keep class DebugConsole extends Trait { #if (!arm_profile) diff --git a/Sources/armory/trait/internal/JSScript.hx b/Sources/armory/trait/internal/JSScript.hx index 8b3be074..2f2ac49e 100644 --- a/Sources/armory/trait/internal/JSScript.hx +++ b/Sources/armory/trait/internal/JSScript.hx @@ -2,7 +2,6 @@ package armory.trait.internal; import iron.Trait; -@:keep class JSScript extends Trait { static var api:JSScriptAPI = null; diff --git a/Sources/armory/trait/internal/JSScriptAPI.hx b/Sources/armory/trait/internal/JSScriptAPI.hx index eb86453c..b334a227 100644 --- a/Sources/armory/trait/internal/JSScriptAPI.hx +++ b/Sources/armory/trait/internal/JSScriptAPI.hx @@ -2,7 +2,6 @@ package armory.trait.internal; #if cpp -@:keep class JSScriptAPI { } #else diff --git a/Sources/armory/trait/internal/LoadBar.hx b/Sources/armory/trait/internal/LoadBar.hx index 98176384..5adec17d 100644 --- a/Sources/armory/trait/internal/LoadBar.hx +++ b/Sources/armory/trait/internal/LoadBar.hx @@ -1,6 +1,5 @@ package armory.trait.internal; -@:keep class LoadBar { public static function render(g:kha.graphics2.Graphics) { diff --git a/Sources/armory/trait/internal/MovieTexture.hx b/Sources/armory/trait/internal/MovieTexture.hx index 2047292d..70262b42 100644 --- a/Sources/armory/trait/internal/MovieTexture.hx +++ b/Sources/armory/trait/internal/MovieTexture.hx @@ -5,7 +5,6 @@ import kha.Video; import iron.Trait; import iron.object.MeshObject; -@:keep class MovieTexture extends Trait { var video:Video; diff --git a/Sources/armory/trait/internal/Navigation.hx b/Sources/armory/trait/internal/Navigation.hx index 25fdcdda..76d944c1 100644 --- a/Sources/armory/trait/internal/Navigation.hx +++ b/Sources/armory/trait/internal/Navigation.hx @@ -5,7 +5,6 @@ import haxerecast.Recast; import armory.trait.NavMesh; #end -@:keep class Navigation extends iron.Trait { #if (!arm_navigation) diff --git a/Sources/armory/trait/internal/PathTracer.hx b/Sources/armory/trait/internal/PathTracer.hx index a80c55ca..c54402d4 100755 --- a/Sources/armory/trait/internal/PathTracer.hx +++ b/Sources/armory/trait/internal/PathTracer.hx @@ -9,7 +9,6 @@ import iron.data.Data; import iron.data.MaterialData; import iron.data.MaterialData.MaterialContext; -@:keep class PathTracer extends Trait { var context:MaterialContext; diff --git a/Sources/armory/trait/internal/PhysicsConstraint.hx b/Sources/armory/trait/internal/PhysicsConstraint.hx index 8a56f9fd..b26388a7 100644 --- a/Sources/armory/trait/internal/PhysicsConstraint.hx +++ b/Sources/armory/trait/internal/PhysicsConstraint.hx @@ -12,7 +12,6 @@ import armory.trait.internal.PhysicsWorld; import haxebullet.Bullet; #end -@:keep class PhysicsConstraint extends Trait { #if (!arm_physics) public function new() { super(); } diff --git a/Sources/armory/trait/internal/PhysicsHook.hx b/Sources/armory/trait/internal/PhysicsHook.hx index 23f19bdc..04198721 100644 --- a/Sources/armory/trait/internal/PhysicsHook.hx +++ b/Sources/armory/trait/internal/PhysicsHook.hx @@ -12,7 +12,6 @@ import armory.trait.internal.PhysicsWorld; import haxebullet.Bullet; #end -@:keep class PhysicsHook extends Trait { #if (!arm_physics) public function new() { super(); } diff --git a/Sources/armory/trait/internal/PhysicsWorld.hx b/Sources/armory/trait/internal/PhysicsWorld.hx index fa2b5d1c..84afc808 100644 --- a/Sources/armory/trait/internal/PhysicsWorld.hx +++ b/Sources/armory/trait/internal/PhysicsWorld.hx @@ -22,7 +22,6 @@ class ContactPair { } } -@:keep class PhysicsWorld extends Trait { #if (!arm_physics) diff --git a/Sources/armory/trait/internal/RigidBody.hx b/Sources/armory/trait/internal/RigidBody.hx index 0bc8e714..563f3af7 100644 --- a/Sources/armory/trait/internal/RigidBody.hx +++ b/Sources/armory/trait/internal/RigidBody.hx @@ -8,7 +8,6 @@ import iron.math.Vec4; import iron.object.Transform; import iron.object.MeshObject; -@:keep class RigidBody extends Trait { #if (!arm_physics) diff --git a/Sources/armory/trait/internal/SoftBody.hx b/Sources/armory/trait/internal/SoftBody.hx index 70c8d912..e29b73c4 100644 --- a/Sources/armory/trait/internal/SoftBody.hx +++ b/Sources/armory/trait/internal/SoftBody.hx @@ -12,7 +12,6 @@ import armory.trait.internal.PhysicsWorld; import haxebullet.Bullet; #end -@:keep class SoftBody extends Trait { #if (!arm_physics_soft) public function new() { super(); } diff --git a/Sources/armory/trait/internal/SpaceArmory.hx b/Sources/armory/trait/internal/SpaceArmory.hx index 160bf0ee..cd7ecbf3 100755 --- a/Sources/armory/trait/internal/SpaceArmory.hx +++ b/Sources/armory/trait/internal/SpaceArmory.hx @@ -6,7 +6,6 @@ import iron.object.Transform; import iron.system.Input; import iron.math.RayCaster; -@:keep class SpaceArmory extends Trait { var gizmo:Object; diff --git a/blender/arm/exporter.py b/blender/arm/exporter.py index 5a57396e..259f7064 100755 --- a/blender/arm/exporter.py +++ b/blender/arm/exporter.py @@ -2595,6 +2595,7 @@ class ArmoryExporter: x['type'] = 'Script' x['class_name'] = 'armory.trait.internal.PhysicsWorld' self.output['traits'].append(x) + ArmoryExporter.import_traits.append(x['class_name']) if bpy.data.worlds['Arm'].arm_navigation != 'Disabled' and ArmoryExporter.export_navigation: if not 'traits' in self.output: self.output['traits'] = [] @@ -2602,6 +2603,7 @@ class ArmoryExporter: x['type'] = 'Script' x['class_name'] = 'armory.trait.internal.Navigation' self.output['traits'].append(x) + ArmoryExporter.import_traits.append(x['class_name']) # Write embedded data references if len(assets.embedded_data) > 0: @@ -2695,6 +2697,7 @@ class ArmoryExporter: ArmoryExporter.compress_enabled = False if not hasattr(ArmoryExporter, 'in_viewport'): ArmoryExporter.in_viewport = False + ArmoryExporter.import_traits = [] # Referenced traits ArmoryExporter.option_mesh_only = False ArmoryExporter.option_mesh_per_file = True ArmoryExporter.option_optimize_mesh = bpy.data.worlds['Arm'].arm_optimize_mesh @@ -2992,6 +2995,9 @@ class ArmoryExporter: co['use_offset'] = constr.use_offset co['influence'] = constr.influence o['constraints'].append(co) + + for x in o['traits']: + ArmoryExporter.import_traits.append(x['class_name']) def add_hook_trait(self, o, bobject, target_name, group_name): hook_trait = {} diff --git a/blender/arm/make.py b/blender/arm/make.py index 5b3d248c..92396a82 100755 --- a/blender/arm/make.py +++ b/blender/arm/make.py @@ -90,7 +90,7 @@ def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False physics_found = False navigation_found = False ui_found = False - ArmoryExporter.compress_enabled = is_publish + ArmoryExporter.compress_enabled = is_publish and wrd.arm_asset_compression ArmoryExporter.in_viewport = in_viewport for scene in bpy.data.scenes: if scene.game_export: @@ -141,13 +141,13 @@ def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False # Write khafile.js enable_dce = is_publish and wrd.arm_dce - write_data.write_khafilejs(is_play, export_physics, export_navigation, export_ui, is_publish, enable_dce, in_viewport) + import_logic = not is_publish and arm.utils.logic_editor_space() != None + write_data.write_khafilejs(is_play, export_physics, export_navigation, export_ui, is_publish, enable_dce, in_viewport, ArmoryExporter.import_traits, import_logic) # Write Main.hx - depends on write_khafilejs for writing number of assets resx, resy = arm.utils.get_render_resolution(arm.utils.get_active_scene()) # Import all logic nodes for patching if logic is being edited - import_logic = arm.utils.logic_editor_space() != None - write_data.write_main(resx, resy, is_play, in_viewport, is_publish, import_logic) + write_data.write_main(resx, resy, is_play, in_viewport, is_publish) if resx != state.last_resx or resy != state.last_resy: wrd.arm_recompile = True state.last_resx = resx diff --git a/blender/arm/props.py b/blender/arm/props.py index 42f7e958..e7a71507 100755 --- a/blender/arm/props.py +++ b/blender/arm/props.py @@ -18,7 +18,7 @@ except ImportError: pass # Armory version -arm_version = '17.07' +arm_version = '17.08' def update_preset(self, context): props_renderer.set_preset(self, context, self.rp_preset) @@ -212,6 +212,7 @@ def init_properties(): bpy.types.World.arm_loadbar = BoolProperty(name="Load Bar", description="Show asset loading progress on published builds", default=True) bpy.types.World.arm_vsync = BoolProperty(name="VSync", description="Vertical Synchronization", default=True) bpy.types.World.arm_dce = BoolProperty(name="DCE", description="Enable dead code elimination for publish builds", default=True) + bpy.types.World.arm_asset_compression = BoolProperty(name="Asset Compression", description="Enable scene data compression", default=False) bpy.types.World.arm_winmode = EnumProperty( items = [('Window', 'Window', 'Window'), ('BorderlessWindow', 'Borderless', 'BorderlessWindow'), diff --git a/blender/arm/props_ui.py b/blender/arm/props_ui.py index 83fe7641..61f7196f 100644 --- a/blender/arm/props_ui.py +++ b/blender/arm/props_ui.py @@ -462,7 +462,9 @@ class ArmoryProjectPanel(bpy.types.Panel): row.operator("arm.publish_project") layout.prop(wrd, 'arm_project_target') layout.prop(wrd, make_utils.target_to_gapi()) - layout.prop(wrd, 'arm_dce') + row = layout.row(align=True) + row.prop(wrd, 'arm_dce') + row.prop(wrd, 'arm_asset_compression') layout.label("Libraries") rows = 2 diff --git a/blender/arm/write_data.py b/blender/arm/write_data.py index f1551f62..f6668a93 100755 --- a/blender/arm/write_data.py +++ b/blender/arm/write_data.py @@ -23,7 +23,7 @@ def add_assets(path): return 'project.addAssets("' + path + '");\n' # Write khafile.js -def write_khafilejs(is_play, export_physics, export_navigation, export_ui, is_publish, enable_dce, in_viewport): +def write_khafilejs(is_play, export_physics, export_navigation, export_ui, is_publish, enable_dce, in_viewport, import_traits, import_logicnodes): global check_dot_path sdk_path = arm.utils.get_sdk_path() @@ -87,7 +87,16 @@ project.addSources('Sources'); f.write(add_assets(recastjs_path)) if enable_dce: - f.write("project.addParameter('-dce full');") + f.write("project.addParameter('-dce full');\n") + + import_traits.append('armory.trait.internal.JSScriptAPI') + import_traits = list(set(import_traits)) + for i in range(0, len(import_traits)): + f.write("project.addParameter('" + import_traits[i] + "');\n") + f.write("""project.addParameter("--macro keep('""" + import_traits[i] + """')");\n""") + + if import_logicnodes: # Live patching for logic nodes + f.write("""project.addParameter("--macro include('armory.logicnode')");\n""") if state.is_render: assets.add_khafile_def('arm_render') @@ -151,7 +160,7 @@ project.addSources('Sources'); f.write("\n\nresolve(project);\n") # Write Main.hx -def write_main(resx, resy, is_play, in_viewport, is_publish, import_logicnodes): +def write_main(resx, resy, is_play, in_viewport, is_publish): wrd = bpy.data.worlds['Arm'] scene_name = arm.utils.get_project_scene_name() scene_ext = '.zip' if (bpy.data.scenes[scene_name].data_compressed and is_publish) else '' @@ -182,17 +191,10 @@ class Main { start(); }); } - #end - public static function main() { - iron.system.CompileTime.importPackage('armory.trait'); - iron.system.CompileTime.importPackage('armory.renderpath'); -""") - if import_logicnodes: - f.write(""" - iron.system.CompileTime.importPackage('armory.logicnode'); -""") + #end""") + f.write(""" - iron.system.CompileTime.importPackage('""" + arm.utils.safestr(wrd.arm_project_package) + """'); + public static function main() { state = 1; #if (js && arm_physics) state++; loadLib("ammo.js"); #end #if (js && arm_navigation) state++; loadLib("recast.js"); #end