diff --git a/Sources/arm/App.hx b/Sources/arm/App.hx index 91a90a7f..2e6167f9 100644 --- a/Sources/arm/App.hx +++ b/Sources/arm/App.hx @@ -3,6 +3,7 @@ package arm; import zui.*; import zui.Zui.State; import zui.Canvas; +import arm.ui.*; class App extends iron.Trait { @@ -93,7 +94,7 @@ class App extends iron.Trait { root.addTrait(new UIView2D()); root.addTrait(new arm.trait.FlyCamera()); root.addTrait(new arm.trait.OrbitCamera()); - root.addTrait(new arm.trait.ArcBallCamera()); + root.addTrait(new arm.trait.RotateCamera()); iron.App.notifyOnRender2D(@:privateAccess UITrait.inst.renderCursor); diff --git a/Sources/arm/Config.hx b/Sources/arm/Config.hx index 99b887d4..6ce7a8ed 100644 --- a/Sources/arm/Config.hx +++ b/Sources/arm/Config.hx @@ -1,5 +1,7 @@ package arm; +import arm.ui.*; + class Config { public static function applyConfig() { diff --git a/Sources/arm/Exporter.hx b/Sources/arm/Exporter.hx index 882052ad..bee72a67 100644 --- a/Sources/arm/Exporter.hx +++ b/Sources/arm/Exporter.hx @@ -1,5 +1,7 @@ package arm; +import arm.ui.*; + class Exporter { public static function exportTextures(path:String) { diff --git a/Sources/arm/Importer.hx b/Sources/arm/Importer.hx index 40fa4934..e0472629 100644 --- a/Sources/arm/Importer.hx +++ b/Sources/arm/Importer.hx @@ -5,6 +5,9 @@ import zui.Nodes; import zui.*; import iron.data.SceneFormat; import iron.data.MeshData; +import arm.creator.*; +import arm.util.*; +import arm.ui.*; class Importer { @@ -675,8 +678,8 @@ class Importer { UITrait.inst.ddirty = 4; UITrait.inst.hwnd.redraws = 2; - arm.UIView2D.inst.uvmapCached = false; - arm.UIView2D.inst.trianglemapCached = false; + UIView2D.inst.uvmapCached = false; + UIView2D.inst.trianglemapCached = false; }); } diff --git a/Sources/arm/LayerSlot.hx b/Sources/arm/LayerSlot.hx index e55f2ebe..2cc854f0 100644 --- a/Sources/arm/LayerSlot.hx +++ b/Sources/arm/LayerSlot.hx @@ -1,6 +1,7 @@ package arm; import iron.RenderPath; +import arm.ui.*; class LayerSlot { public static var counter = 0; diff --git a/Sources/arm/Layers.hx b/Sources/arm/Layers.hx index 07259c8d..af6314cd 100644 --- a/Sources/arm/Layers.hx +++ b/Sources/arm/Layers.hx @@ -1,6 +1,7 @@ package arm; import iron.RenderPath; +import arm.ui.*; class Layers { diff --git a/Sources/arm/MaterialBuilder.hx b/Sources/arm/MaterialBuilder.hx index d89ce5a0..68bc55ed 100644 --- a/Sources/arm/MaterialBuilder.hx +++ b/Sources/arm/MaterialBuilder.hx @@ -9,6 +9,7 @@ import iron.data.ShaderData; import iron.data.ShaderData.ShaderContext; import iron.data.MaterialData; import iron.data.SceneFormat; +import arm.ui.*; class MaterialBuilder { @@ -485,7 +486,7 @@ class MaterialBuilder { frag.add_function(armory.system.CyclesFunctions.str_packFloat); frag.add_function(armory.system.CyclesFunctions.str_packFloat2); - if (arm.UITrait.inst.brushType == 4) { // Show color map + if (UITrait.inst.brushType == 4) { // Show color map frag.add_uniform('sampler2D texcolorid', '_texcolorid'); frag.write('fragColor[0] = vec4(n.xy, packFloat(0.0, 1.0), 1.0);'); // met/rough frag.write('vec3 idcol = pow(texture(texcolorid, texCoord).rgb, vec3(2.2, 2.2, 2.2));'); diff --git a/Sources/arm/Project.hx b/Sources/arm/Project.hx index 2c166d0e..8d83b4a0 100644 --- a/Sources/arm/Project.hx +++ b/Sources/arm/Project.hx @@ -3,6 +3,8 @@ package arm; import iron.data.SceneFormat; import iron.data.MeshData; import arm.ProjectFormat; +import arm.util.*; +import arm.ui.*; class Project { public static function projectOpen() { diff --git a/Sources/arm/Uniforms.hx b/Sources/arm/Uniforms.hx index 21eff2e8..0fc8afed 100644 --- a/Sources/arm/Uniforms.hx +++ b/Sources/arm/Uniforms.hx @@ -2,6 +2,7 @@ package arm; import iron.data.MaterialData; import iron.object.Object; +import arm.ui.*; class Uniforms { public static function init() { diff --git a/Sources/arm/brushnode/BrushOutputNode.hx b/Sources/arm/brushnode/BrushOutputNode.hx index 8b2e915d..5395075c 100644 --- a/Sources/arm/brushnode/BrushOutputNode.hx +++ b/Sources/arm/brushnode/BrushOutputNode.hx @@ -2,53 +2,54 @@ package arm.brushnode; import armory.logicnode.LogicNode; import armory.logicnode.LogicTree; +import arm.ui.*; @:keep class BrushOutputNode extends LogicNode { public function new(tree:LogicTree) { super(tree); - arm.UITrait.inst.notifyOnBrush(run); + UITrait.inst.notifyOnBrush(run); } override function run(from:Int) { - arm.UITrait.inst.paintVec = inputs[0].get(); - arm.UITrait.inst.brushNodesRadius = inputs[1].get(); - arm.UITrait.inst.brushNodesOpacity = inputs[2].get(); - arm.UITrait.inst.brushNodesStrength = inputs[3].get(); - arm.UITrait.inst.brushNodesScale = inputs[4].get(); + UITrait.inst.paintVec = inputs[0].get(); + UITrait.inst.brushNodesRadius = inputs[1].get(); + UITrait.inst.brushNodesOpacity = inputs[2].get(); + UITrait.inst.brushNodesStrength = inputs[3].get(); + UITrait.inst.brushNodesScale = inputs[4].get(); // First time init - if (arm.UITrait.inst.lastPaintX < 0 || arm.UITrait.inst.lastPaintY < 0) { - arm.UITrait.inst.lastPaintVecX = arm.UITrait.inst.paintVec.x; - arm.UITrait.inst.lastPaintVecY = arm.UITrait.inst.paintVec.y; + if (UITrait.inst.lastPaintX < 0 || UITrait.inst.lastPaintY < 0) { + UITrait.inst.lastPaintVecX = UITrait.inst.paintVec.x; + UITrait.inst.lastPaintVecY = UITrait.inst.paintVec.y; } // Paint bounds - if (arm.UITrait.inst.paintVec.x < 1 && arm.UITrait.inst.paintVec.x > 0 && - arm.UITrait.inst.paintVec.y < 1 && arm.UITrait.inst.paintVec.y > 0 && - !arm.UITrait.inst.ui.isHovered && !arm.UITrait.inst.ui.isScrolling) { // Header combos are in use + if (UITrait.inst.paintVec.x < 1 && UITrait.inst.paintVec.x > 0 && + UITrait.inst.paintVec.y < 1 && UITrait.inst.paintVec.y > 0 && + !UITrait.inst.ui.isHovered && !UITrait.inst.ui.isScrolling) { // Header combos are in use // Set color pick var down = iron.system.Input.getMouse().down() || iron.system.Input.getPen().down(); - if (arm.UITrait.inst.brushType == 4 && arm.UITrait.inst.assets.length > 0 && down) { - arm.UITrait.inst.colorIdPicked = true; + if (UITrait.inst.brushType == 4 && UITrait.inst.assets.length > 0 && down) { + UITrait.inst.colorIdPicked = true; } // Prevent painting the same spot - save perf & reduce projection paint jittering caused by _sub offset - if (down && arm.UITrait.inst.paintVec.x == arm.UITrait.inst.lastPaintX && arm.UITrait.inst.paintVec.y == arm.UITrait.inst.lastPaintY) { - arm.UITrait.inst.painted++; + if (down && UITrait.inst.paintVec.x == UITrait.inst.lastPaintX && UITrait.inst.paintVec.y == UITrait.inst.lastPaintY) { + UITrait.inst.painted++; } else { - arm.UITrait.inst.painted = 0; + UITrait.inst.painted = 0; } - arm.UITrait.inst.lastPaintX = arm.UITrait.inst.paintVec.x; - arm.UITrait.inst.lastPaintY = arm.UITrait.inst.paintVec.y; + UITrait.inst.lastPaintX = UITrait.inst.paintVec.x; + UITrait.inst.lastPaintY = UITrait.inst.paintVec.y; var decal = UITrait.inst.brushType == 5; var paintFrames = decal ? 1 : 8; - if (arm.UITrait.inst.painted <= paintFrames) { - arm.UITrait.inst.pdirty = 1; - arm.UITrait.inst.rdirty = 2; + if (UITrait.inst.painted <= paintFrames) { + UITrait.inst.pdirty = 1; + UITrait.inst.rdirty = 2; } } diff --git a/Sources/arm/brushnode/TimeNode.hx b/Sources/arm/brushnode/TimeNode.hx index 2ac394a8..ffed7e19 100644 --- a/Sources/arm/brushnode/TimeNode.hx +++ b/Sources/arm/brushnode/TimeNode.hx @@ -2,6 +2,7 @@ package arm.brushnode; import armory.logicnode.LogicNode; import armory.logicnode.LogicTree; +import arm.ui.*; @:keep class TimeNode extends LogicNode { @@ -13,6 +14,6 @@ class TimeNode extends LogicNode { override function get(from:Int):Dynamic { if (from == 0) return iron.system.Time.time(); else if (from == 1) return iron.system.Time.delta; - else return arm.UITrait.inst.brushTime; + else return UITrait.inst.brushTime; } } diff --git a/Sources/arm/NodeCreator.hx b/Sources/arm/creator/NodeCreator.hx similarity index 99% rename from Sources/arm/NodeCreator.hx rename to Sources/arm/creator/NodeCreator.hx index 74e46756..435831e6 100644 --- a/Sources/arm/NodeCreator.hx +++ b/Sources/arm/creator/NodeCreator.hx @@ -1,9 +1,10 @@ -package arm; +package arm.creator; import zui.*; import zui.Nodes; +import arm.ui.*; -@:access(arm.UINodes) +@:access(arm.ui.UINodes) class NodeCreator { public static var numNodes = [12, 1, 9, 5, 4, 10]; diff --git a/Sources/arm/NodeCreatorBrush.hx b/Sources/arm/creator/NodeCreatorBrush.hx similarity index 99% rename from Sources/arm/NodeCreatorBrush.hx rename to Sources/arm/creator/NodeCreatorBrush.hx index d3764bd8..5448ed06 100644 --- a/Sources/arm/NodeCreatorBrush.hx +++ b/Sources/arm/creator/NodeCreatorBrush.hx @@ -1,7 +1,8 @@ -package arm; +package arm.creator; import zui.*; import zui.Nodes; +import arm.ui.*; class NodeCreatorBrush { diff --git a/Sources/arm/NodeCreatorLogic.hx b/Sources/arm/creator/NodeCreatorLogic.hx similarity index 98% rename from Sources/arm/NodeCreatorLogic.hx rename to Sources/arm/creator/NodeCreatorLogic.hx index e94beadc..120bc85a 100644 --- a/Sources/arm/NodeCreatorLogic.hx +++ b/Sources/arm/creator/NodeCreatorLogic.hx @@ -1,6 +1,7 @@ -package arm; +package arm.creator; import armory.system.CyclesFormat; +import arm.ui.*; typedef TNodeList = { var categories: Array; @@ -31,7 +32,7 @@ typedef TCatButton = { var data: Array; } -@:access(arm.UINodes) +@:access(arm.ui.UINodes) class NodeCreatorLogic { public static var list:TNodeList; diff --git a/Sources/arm/renderpath/RenderPathDeferred.hx b/Sources/arm/renderpath/RenderPathDeferred.hx index 2067cc89..6e569344 100644 --- a/Sources/arm/renderpath/RenderPathDeferred.hx +++ b/Sources/arm/renderpath/RenderPathDeferred.hx @@ -2,6 +2,7 @@ package arm.renderpath; import iron.RenderPath; import armory.renderpath.Inc; +import arm.ui.*; class RenderPathDeferred { @@ -150,7 +151,7 @@ class RenderPathDeferred { var ssaa4 = armory.data.Config.raw.rp_supersample == 4 ? true : false; - if (!arm.UITrait.inst.dirty()) { + if (!UITrait.inst.dirty()) { path.setTarget(""); path.bindTarget(taaFrame % 2 == 0 ? "taa" : "taa2", "tex"); ssaa4 ? @@ -159,11 +160,11 @@ class RenderPathDeferred { return; } - var tid = arm.UITrait.inst.selectedLayer.id; + var tid = UITrait.inst.selectedLayer.id; - if (arm.UITrait.inst.pushUndo && arm.UITrait.inst.C.undo_steps > 0) { - var i = arm.UITrait.inst.undoI; - if (arm.UITrait.inst.paintHeight) { + if (UITrait.inst.pushUndo && UITrait.inst.C.undo_steps > 0) { + var i = UITrait.inst.undoI; + if (UITrait.inst.paintHeight) { path.setTarget("texpaint_undo" + i, ["texpaint_nor_undo" + i, "texpaint_pack_undo" + i, "texpaint_opt_undo" + i]); } else { @@ -173,37 +174,37 @@ class RenderPathDeferred { path.bindTarget("texpaint" + tid, "tex0"); path.bindTarget("texpaint_nor" + tid, "tex1"); path.bindTarget("texpaint_pack" + tid, "tex2"); - if (arm.UITrait.inst.paintHeight) { + if (UITrait.inst.paintHeight) { path.bindTarget("texpaint_opt" + tid, "tex3"); path.drawShader("shader_datas/copy_mrt4_pass/copy_mrt4_pass"); } else { path.drawShader("shader_datas/copy_mrt3_pass/copy_mrt3_pass"); } - arm.UITrait.inst.undoLayers[arm.UITrait.inst.undoI].targetObject = arm.UITrait.inst.paintObject; - arm.UITrait.inst.undoLayers[arm.UITrait.inst.undoI].targetLayer = arm.UITrait.inst.selectedLayer; - arm.UITrait.inst.undoI = (arm.UITrait.inst.undoI + 1) % arm.UITrait.inst.C.undo_steps; - if (arm.UITrait.inst.undos < arm.UITrait.inst.C.undo_steps) arm.UITrait.inst.undos++; - arm.UITrait.inst.redos = 0; - arm.UITrait.inst.pushUndo = false; + UITrait.inst.undoLayers[UITrait.inst.undoI].targetObject = UITrait.inst.paintObject; + UITrait.inst.undoLayers[UITrait.inst.undoI].targetLayer = UITrait.inst.selectedLayer; + UITrait.inst.undoI = (UITrait.inst.undoI + 1) % UITrait.inst.C.undo_steps; + if (UITrait.inst.undos < UITrait.inst.C.undo_steps) UITrait.inst.undos++; + UITrait.inst.redos = 0; + UITrait.inst.pushUndo = false; } - if (arm.UITrait.inst.depthDirty()) { + if (UITrait.inst.depthDirty()) { path.setTarget("texpaint" + tid); path.clearTarget(null, 1.0); path.drawMeshes("depth"); } - if (arm.UITrait.inst.paintDirty()) { - if (arm.UITrait.inst.brushType == 4) { // Pick Color Id + if (UITrait.inst.paintDirty()) { + if (UITrait.inst.brushType == 4) { // Pick Color Id path.setTarget("texpaint_colorid"); path.clearTarget(0xff000000); path.bindTarget("gbuffer2", "gbuffer2"); path.drawMeshes("paint"); - arm.UITrait.inst.headerHandle.redraws = 2; + UITrait.inst.headerHandle.redraws = 2; } else { - if (arm.UITrait.inst.brushType == 3) { // Bake AO + if (UITrait.inst.brushType == 3) { // Bake AO if (initVoxels) { initVoxels = false; var t = new RenderTargetRaw(); @@ -232,17 +233,17 @@ class RenderPathDeferred { #end // - if (arm.UITrait.inst.paintHeight) { + if (UITrait.inst.paintHeight) { path.setTarget("texpaint" + tid, ["texpaint_nor" + tid, "texpaint_pack" + tid, "texpaint_opt" + tid]); } else { path.setTarget("texpaint" + tid, ["texpaint_nor" + tid, "texpaint_pack" + tid]); } path.bindTarget("_paintdb", "paintdb"); - if (arm.UITrait.inst.brushType == 3) { // Bake AO + if (UITrait.inst.brushType == 3) { // Bake AO path.bindTarget("voxels", "voxels"); } - if (arm.UITrait.inst.colorIdPicked) { + if (UITrait.inst.colorIdPicked) { path.bindTarget("texpaint_colorid", "texpaint_colorid"); } @@ -280,19 +281,19 @@ class RenderPathDeferred { #end // Paint - tid = arm.UITrait.inst.layers[0].id; + tid = UITrait.inst.layers[0].id; path.bindTarget("texpaint" + tid, "texpaint"); path.bindTarget("texpaint_nor" + tid, "texpaint_nor"); path.bindTarget("texpaint_pack" + tid, "texpaint_pack"); - if (arm.UITrait.inst.paintHeight) { + if (UITrait.inst.paintHeight) { path.bindTarget("texpaint_opt" + tid, "texpaint_opt"); } - for (i in 1...arm.UITrait.inst.layers.length) { - tid = arm.UITrait.inst.layers[i].id; + for (i in 1...UITrait.inst.layers.length) { + tid = UITrait.inst.layers[i].id; path.bindTarget("texpaint" + tid, "texpaint" + tid); path.bindTarget("texpaint_nor" + tid, "texpaint_nor" + tid); path.bindTarget("texpaint_pack" + tid, "texpaint_pack" + tid); - if (arm.UITrait.inst.paintHeight) path.bindTarget("texpaint_opt" + tid, "texpaint_opt" + tid); + if (UITrait.inst.paintHeight) path.bindTarget("texpaint_opt" + tid, "texpaint_opt" + tid); } // @@ -625,9 +626,9 @@ class RenderPathDeferred { #end taaFrame++; - arm.UITrait.inst.ddirty--; - arm.UITrait.inst.pdirty--; - arm.UITrait.inst.rdirty--; + UITrait.inst.ddirty--; + UITrait.inst.pdirty--; + UITrait.inst.rdirty--; } #end diff --git a/Sources/arm/renderpath/RenderPathPreview.hx b/Sources/arm/renderpath/RenderPathPreview.hx index 6ebbbea0..5358b42a 100644 --- a/Sources/arm/renderpath/RenderPathPreview.hx +++ b/Sources/arm/renderpath/RenderPathPreview.hx @@ -1,5 +1,7 @@ package arm.renderpath; +import arm.ui.*; + class RenderPathPreview { @:access(iron.RenderPath) @@ -50,9 +52,9 @@ class RenderPathPreview { var framebuffer = "texpreview"; #if arm_editor - var selectedMat = arm.UITrait.inst.htab.position == 0 ? arm.UITrait.inst.selectedMaterial2 : arm.UITrait.inst.selectedMaterial; + var selectedMat = UITrait.inst.htab.position == 0 ? UITrait.inst.selectedMaterial2 : UITrait.inst.selectedMaterial; #else - var selectedMat = arm.UITrait.inst.selectedMaterial; + var selectedMat = UITrait.inst.selectedMaterial; #end iron.RenderPath.active.renderTargets.get("texpreview").image = selectedMat.image; @@ -138,7 +140,7 @@ class RenderPathPreview { var framebuffer = "texpreview"; - iron.RenderPath.active.renderTargets.get("texpreview").image = arm.UITrait.inst.decalImage; + iron.RenderPath.active.renderTargets.get("texpreview").image = UITrait.inst.decalImage; path.setTarget("buf"); path.bindTarget("tex", "tex"); diff --git a/Sources/arm/trait/FlyCamera.hx b/Sources/arm/trait/FlyCamera.hx index 9f2cb3aa..0ddb6b1a 100644 --- a/Sources/arm/trait/FlyCamera.hx +++ b/Sources/arm/trait/FlyCamera.hx @@ -3,7 +3,7 @@ package arm.trait; import iron.system.Input; import iron.system.Time; import iron.math.Vec4; -import arm.UITrait; +import arm.ui.*; class FlyCamera extends iron.Trait { diff --git a/Sources/arm/trait/OrbitCamera.hx b/Sources/arm/trait/OrbitCamera.hx index ac600269..7638e3dc 100644 --- a/Sources/arm/trait/OrbitCamera.hx +++ b/Sources/arm/trait/OrbitCamera.hx @@ -1,7 +1,7 @@ package arm.trait; import iron.system.Input; -import arm.UITrait; +import arm.ui.*; class OrbitCamera extends iron.Trait { diff --git a/Sources/arm/trait/ArcBallCamera.hx b/Sources/arm/trait/RotateCamera.hx similarity index 93% rename from Sources/arm/trait/ArcBallCamera.hx rename to Sources/arm/trait/RotateCamera.hx index 82bc0ea1..ad6c9938 100644 --- a/Sources/arm/trait/ArcBallCamera.hx +++ b/Sources/arm/trait/RotateCamera.hx @@ -1,11 +1,11 @@ package arm.trait; import iron.system.Input; -import arm.UITrait; +import arm.ui.*; -class ArcBallCamera extends iron.Trait { +class RotateCamera extends iron.Trait { - public static var inst:ArcBallCamera; + public static var inst:RotateCamera; var redraws = 0; public function new() { diff --git a/Sources/arm/UINodes.hx b/Sources/arm/ui/UINodes.hx similarity index 99% rename from Sources/arm/UINodes.hx rename to Sources/arm/ui/UINodes.hx index 0ab8ffb9..52173e50 100644 --- a/Sources/arm/UINodes.hx +++ b/Sources/arm/ui/UINodes.hx @@ -1,4 +1,4 @@ -package arm; +package arm.ui; import zui.*; import zui.Nodes; @@ -10,6 +10,8 @@ import armory.system.Cycles; import armory.system.CyclesFormat; import armory.system.CyclesShader; import armory.system.CyclesShader.CyclesShaderContext; +import arm.creator.*; +import arm.util.*; @:access(zui.Zui) class UINodes extends iron.Trait { diff --git a/Sources/arm/UITrait.hx b/Sources/arm/ui/UITrait.hx similarity index 99% rename from Sources/arm/UITrait.hx rename to Sources/arm/ui/UITrait.hx index 16e32c84..ed786167 100644 --- a/Sources/arm/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -1,4 +1,4 @@ -package arm; +package arm.ui; import zui.*; import zui.Zui.State; @@ -13,6 +13,7 @@ import iron.math.Math; import iron.RenderPath; import arm.ProjectFormat; import arm.ProjectFormat.TAPConfig; +import arm.util.*; @:access(zui.Zui) @:access(iron.data.Data) @@ -166,6 +167,7 @@ class UITrait extends iron.Trait { public var resHandle = new Zui.Handle({position: 1}); // 2048 public var objectsHandle = new Zui.Handle({selected: true}); public var maskHandle = new Zui.Handle({position: 0}); + public var uvmapHandle = new Zui.Handle({position: 0}); public var mergedObject:MeshObject = null; // For object mask var newConfirm = false; public var newObject = 0; @@ -330,12 +332,12 @@ class UITrait extends iron.Trait { var m = iron.system.Input.getMouse(); if (m.down()) { // - arm.UITrait.inst.lastPaintVecX = arm.UITrait.inst.paintVec.x; // - arm.UITrait.inst.lastPaintVecY = arm.UITrait.inst.paintVec.y;// + UITrait.inst.lastPaintVecX = UITrait.inst.paintVec.x; // + UITrait.inst.lastPaintVecY = UITrait.inst.paintVec.y;// }// else { - arm.UITrait.inst.lastPaintVecX = m.x / iron.App.w(); - arm.UITrait.inst.lastPaintVecY = m.y / iron.App.h(); + UITrait.inst.lastPaintVecX = m.x / iron.App.w(); + UITrait.inst.lastPaintVecY = m.y / iron.App.h(); } });// @@ -1613,7 +1615,10 @@ class UITrait extends iron.Trait { mergedObject.visible = true; } } - ui.combo(Id.handle({position: 0}), ["Combined"], "UV Map", true); + var uvMapType = ui.combo(uvmapHandle, ["Combined", "Object"], "UV Map", true); + if (uvmapHandle.changed) { + + } } // ui.text("Transform"); diff --git a/Sources/arm/UIView2D.hx b/Sources/arm/ui/UIView2D.hx similarity index 99% rename from Sources/arm/UIView2D.hx rename to Sources/arm/ui/UIView2D.hx index 855eaadc..2c820eec 100644 --- a/Sources/arm/UIView2D.hx +++ b/Sources/arm/ui/UIView2D.hx @@ -1,4 +1,4 @@ -package arm; +package arm.ui; import zui.*; diff --git a/Sources/arm/MeshUtil.hx b/Sources/arm/util/MeshUtil.hx similarity index 96% rename from Sources/arm/MeshUtil.hx rename to Sources/arm/util/MeshUtil.hx index 0a35ea2c..f3fe8c0a 100644 --- a/Sources/arm/MeshUtil.hx +++ b/Sources/arm/util/MeshUtil.hx @@ -1,122 +1,123 @@ -package arm; - -import iron.data.SceneFormat; -import iron.data.MeshData; -import iron.object.MeshObject; - -class MeshUtil { - - public static function mergeMesh() { - var vlen = 0; - var ilen = 0; - var maxScale = 0.0; - var paintObjects = UITrait.inst.paintObjects; - for (i in 0...paintObjects.length) { - vlen += paintObjects[i].data.raw.vertex_arrays[0].values.length; - ilen += paintObjects[i].data.raw.index_arrays[0].values.length; - if (paintObjects[i].data.scalePos > maxScale) maxScale = paintObjects[i].data.scalePos; - } - vlen = Std.int(vlen / 4); - var va0 = new kha.arrays.Int16Array(vlen * 4); - var va1 = new kha.arrays.Int16Array(vlen * 2); - var va2 = new kha.arrays.Int16Array(vlen * 2); - var ia = new kha.arrays.Uint32Array(ilen); - - var voff = 0; - var ioff = 0; - for (i in 0...paintObjects.length) { - var vas = paintObjects[i].data.raw.vertex_arrays; - var ias = paintObjects[i].data.raw.index_arrays; - var scale = paintObjects[i].data.scalePos; - - for (j in 0...vas[0].values.length) va0[j + voff * 4] = vas[0].values[j]; - for (j in 0...Std.int(va0.length / 4)) { - va0[j * 4 + voff * 4] = Std.int((va0[j * 4 + voff * 4] * scale) / maxScale); - va0[j * 4 + 1 + voff * 4] = Std.int((va0[j * 4 + 1 + voff * 4] * scale) / maxScale); - va0[j * 4 + 2 + voff * 4] = Std.int((va0[j * 4 + 2 + voff * 4] * scale) / maxScale); - } - for (j in 0...vas[1].values.length) va1[j + voff * 2] = vas[1].values[j]; - for (j in 0...vas[2].values.length) va2[j + voff * 2] = vas[2].values[j]; - for (j in 0...ias[0].values.length) ia[j + ioff] = ias[0].values[j] + voff; - - voff += Std.int(vas[0].values.length / 4); - ioff += Std.int(ias[0].values.length); - } - - var raw:TMeshData = { - name: UITrait.inst.paintObject.name, - vertex_arrays: [ - { values: va0, attrib: "pos" }, - { values: va1, attrib: "nor" }, - { values: va2, attrib: "tex" } - ], - index_arrays: [ - { values: ia, material: 0 } - ], - scale_pos: maxScale, - scale_tex: 1.0 - }; - - new MeshData(raw, function(md:MeshData) { - UITrait.inst.mergedObject = new MeshObject(md, UITrait.inst.paintObject.materials); - UITrait.inst.mergedObject.name = UITrait.inst.paintObject.name; - UITrait.inst.mergedObject.force_context = "paint"; - UITrait.inst.mainObject().addChild(UITrait.inst.mergedObject); - }); - } - - public static function switchUpAxis(axisUp:Int) { - for (p in UITrait.inst.paintObjects) { - var g = p.data.geom; - - // position, normals - - var vertices = g.vertexBuffer.lockInt16(); // posnortex - var verticesDepth = g.vertexBufferMap.get("pos").lockInt16(); - if (!g.vertexBufferMap.exists("posnor")) g.get([{name: "pos", data: 'short4norm'}, {name: "nor", data: 'short2norm'}]); - var verticesVox = g.vertexBufferMap.get("posnor").lockInt16(); - if (axisUp == 1) { // Y - for (i in 0...Std.int(vertices.length / 8)) { - // Swap Y/Z - var f = vertices[i * 8 + 1]; - vertices[i * 8 + 1] = vertices[i * 8 + 2]; - vertices[i * 8 + 2] = -f; - - f = vertices[i * 8 + 5]; - vertices[i * 8 + 5] = vertices[i * 8 + 3]; - vertices[i * 8 + 3] = -f; - - f = verticesDepth[i * 4 + 1]; - verticesDepth[i * 4 + 1] = verticesDepth[i * 4 + 2]; - verticesDepth[i * 4 + 2] = -f; - - f = verticesVox[i * 6 + 1]; - verticesVox[i * 6 + 1] = verticesVox[i * 6 + 2]; - verticesVox[i * 6 + 2] = -f; - } - } - else { // Z - for (i in 0...Std.int(vertices.length / 8)) { - var f = vertices[i * 8 + 1]; - vertices[i * 8 + 1] = -vertices[i * 8 + 2]; - vertices[i * 8 + 2] = f; - - f = vertices[i * 8 + 5]; - vertices[i * 8 + 5] = -vertices[i * 8 + 3]; - vertices[i * 8 + 3] = f; - - f = verticesDepth[i * 4 + 1]; - verticesDepth[i * 4 + 1] = -verticesDepth[i * 4 + 2]; - verticesDepth[i * 4 + 2] = f; - - f = verticesVox[i * 6 + 1]; - verticesVox[i * 6 + 1] = -verticesVox[i * 6 + 2]; - verticesVox[i * 6 + 2] = f; - } - } - g.vertexBuffer.unlock(); - g.vertexBufferMap.get("pos").unlock(); - g.vertexBufferMap.get("posnor").unlock(); - } - } -} +package arm.util; + +import iron.data.SceneFormat; +import iron.data.MeshData; +import iron.object.MeshObject; +import arm.ui.*; + +class MeshUtil { + + public static function mergeMesh() { + var vlen = 0; + var ilen = 0; + var maxScale = 0.0; + var paintObjects = UITrait.inst.paintObjects; + for (i in 0...paintObjects.length) { + vlen += paintObjects[i].data.raw.vertex_arrays[0].values.length; + ilen += paintObjects[i].data.raw.index_arrays[0].values.length; + if (paintObjects[i].data.scalePos > maxScale) maxScale = paintObjects[i].data.scalePos; + } + vlen = Std.int(vlen / 4); + var va0 = new kha.arrays.Int16Array(vlen * 4); + var va1 = new kha.arrays.Int16Array(vlen * 2); + var va2 = new kha.arrays.Int16Array(vlen * 2); + var ia = new kha.arrays.Uint32Array(ilen); + + var voff = 0; + var ioff = 0; + for (i in 0...paintObjects.length) { + var vas = paintObjects[i].data.raw.vertex_arrays; + var ias = paintObjects[i].data.raw.index_arrays; + var scale = paintObjects[i].data.scalePos; + + for (j in 0...vas[0].values.length) va0[j + voff * 4] = vas[0].values[j]; + for (j in 0...Std.int(va0.length / 4)) { + va0[j * 4 + voff * 4] = Std.int((va0[j * 4 + voff * 4] * scale) / maxScale); + va0[j * 4 + 1 + voff * 4] = Std.int((va0[j * 4 + 1 + voff * 4] * scale) / maxScale); + va0[j * 4 + 2 + voff * 4] = Std.int((va0[j * 4 + 2 + voff * 4] * scale) / maxScale); + } + for (j in 0...vas[1].values.length) va1[j + voff * 2] = vas[1].values[j]; + for (j in 0...vas[2].values.length) va2[j + voff * 2] = vas[2].values[j]; + for (j in 0...ias[0].values.length) ia[j + ioff] = ias[0].values[j] + voff; + + voff += Std.int(vas[0].values.length / 4); + ioff += Std.int(ias[0].values.length); + } + + var raw:TMeshData = { + name: UITrait.inst.paintObject.name, + vertex_arrays: [ + { values: va0, attrib: "pos" }, + { values: va1, attrib: "nor" }, + { values: va2, attrib: "tex" } + ], + index_arrays: [ + { values: ia, material: 0 } + ], + scale_pos: maxScale, + scale_tex: 1.0 + }; + + new MeshData(raw, function(md:MeshData) { + UITrait.inst.mergedObject = new MeshObject(md, UITrait.inst.paintObject.materials); + UITrait.inst.mergedObject.name = UITrait.inst.paintObject.name; + UITrait.inst.mergedObject.force_context = "paint"; + UITrait.inst.mainObject().addChild(UITrait.inst.mergedObject); + }); + } + + public static function switchUpAxis(axisUp:Int) { + for (p in UITrait.inst.paintObjects) { + var g = p.data.geom; + + // position, normals + + var vertices = g.vertexBuffer.lockInt16(); // posnortex + var verticesDepth = g.vertexBufferMap.get("pos").lockInt16(); + if (!g.vertexBufferMap.exists("posnor")) g.get([{name: "pos", data: 'short4norm'}, {name: "nor", data: 'short2norm'}]); + var verticesVox = g.vertexBufferMap.get("posnor").lockInt16(); + if (axisUp == 1) { // Y + for (i in 0...Std.int(vertices.length / 8)) { + // Swap Y/Z + var f = vertices[i * 8 + 1]; + vertices[i * 8 + 1] = vertices[i * 8 + 2]; + vertices[i * 8 + 2] = -f; + + f = vertices[i * 8 + 5]; + vertices[i * 8 + 5] = vertices[i * 8 + 3]; + vertices[i * 8 + 3] = -f; + + f = verticesDepth[i * 4 + 1]; + verticesDepth[i * 4 + 1] = verticesDepth[i * 4 + 2]; + verticesDepth[i * 4 + 2] = -f; + + f = verticesVox[i * 6 + 1]; + verticesVox[i * 6 + 1] = verticesVox[i * 6 + 2]; + verticesVox[i * 6 + 2] = -f; + } + } + else { // Z + for (i in 0...Std.int(vertices.length / 8)) { + var f = vertices[i * 8 + 1]; + vertices[i * 8 + 1] = -vertices[i * 8 + 2]; + vertices[i * 8 + 2] = f; + + f = vertices[i * 8 + 5]; + vertices[i * 8 + 5] = -vertices[i * 8 + 3]; + vertices[i * 8 + 3] = f; + + f = verticesDepth[i * 4 + 1]; + verticesDepth[i * 4 + 1] = -verticesDepth[i * 4 + 2]; + verticesDepth[i * 4 + 2] = f; + + f = verticesVox[i * 6 + 1]; + verticesVox[i * 6 + 1] = -verticesVox[i * 6 + 2]; + verticesVox[i * 6 + 2] = f; + } + } + g.vertexBuffer.unlock(); + g.vertexBufferMap.get("pos").unlock(); + g.vertexBufferMap.get("posnor").unlock(); + } + } +} diff --git a/Sources/arm/RenderUtil.hx b/Sources/arm/util/RenderUtil.hx similarity index 97% rename from Sources/arm/RenderUtil.hx rename to Sources/arm/util/RenderUtil.hx index 2b69d916..b95043fb 100644 --- a/Sources/arm/RenderUtil.hx +++ b/Sources/arm/util/RenderUtil.hx @@ -1,128 +1,129 @@ -package arm; - -import iron.object.MeshObject; -import iron.math.Mat4; - -class RenderUtil { - public static function makeDecalPreview() { - if (UITrait.inst.decalImage == null) { - UITrait.inst.decalImage = kha.Image.createRenderTarget(512, 512); - } - UITrait.inst.decalPreview = true; - - var painto = UITrait.inst.paintObject; - for (p in UITrait.inst.paintObjects) p.visible = false; - - var plane:MeshObject = cast iron.Scene.active.getChild("Plane"); - plane.transform.rot.fromEuler(-Math.PI / 2, 0, 0); - plane.transform.buildMatrix(); - plane.visible = true; - UITrait.inst.paintObject = plane; - - UITrait.inst.savedCamera.setFrom(iron.Scene.active.camera.transform.local); - var m = Mat4.identity(); - m.translate(0, 0, 1); - iron.Scene.active.camera.transform.setMatrix(m); - var savedFov = iron.Scene.active.camera.data.raw.fov; - iron.Scene.active.camera.data.raw.fov = 0.92; - var light = iron.Scene.active.lights[0]; - light.visible = false; - // light.data.raw.cast_shadow = false; - - // No jitter - // @:privateAccess iron.Scene.active.camera.frame = 0; - // No resize - @:privateAccess iron.RenderPath.active.lastW = 512; - @:privateAccess iron.RenderPath.active.lastH = 512; - iron.Scene.active.camera.buildProjection(); - iron.Scene.active.camera.buildMatrix(); - - UINodes.inst.parseMeshPreviewMaterial(); - iron.RenderPath.active.commands = arm.renderpath.RenderPathPreview.commandsDecal; - iron.RenderPath.active.renderFrame(iron.RenderPath.active.frameG); - iron.RenderPath.active.commands = arm.renderpath.RenderPathDeferred.commands; - - UITrait.inst.decalPreview = false; - @:privateAccess iron.RenderPath.active.lastW = iron.App.w(); - @:privateAccess iron.RenderPath.active.lastH = iron.App.h(); - - // Restore - plane.visible = false; - for (p in UITrait.inst.paintObjects) p.visible = true; - UITrait.inst.paintObject = painto; - - iron.Scene.active.camera.transform.setMatrix(UITrait.inst.savedCamera); - iron.Scene.active.camera.data.raw.fov = savedFov; - iron.Scene.active.camera.buildProjection(); - iron.Scene.active.camera.buildMatrix(); - var light = iron.Scene.active.lights[0]; - light.visible = true; - // light.data.raw.cast_shadow = true; - UINodes.inst.parseMeshMaterial(); - UITrait.inst.ddirty = 2; - } - - public static function makeMaterialPreview() { - UITrait.inst.materialPreview = true; - - var painto = UITrait.inst.paintObject; - for (p in UITrait.inst.paintObjects) p.visible = false; - - var sphere:MeshObject = cast iron.Scene.active.getChild("Sphere"); - sphere.visible = true; - UITrait.inst.paintObject = sphere; - - #if arm_editor - sphere.materials[0] = UITrait.inst.htab.position == 0 ? UITrait.inst.selectedMaterial2.data : UITrait.inst.materials[0].data; - var gizmo_vis = UITrait.inst.gizmo.visible; - var grid_vis = UITrait.inst.grid.visible; - UITrait.inst.gizmo.visible = false; - UITrait.inst.grid.visible = false; - #end - - UITrait.inst.savedCamera.setFrom(iron.Scene.active.camera.transform.local); - var m = new Mat4(0.9146286343879498, -0.0032648027153306235, 0.404281837254303, 0.4659988049397712, 0.404295023959927, 0.007367569133732468, -0.9145989516155143, -1.0687517188018691, 0.000007410128652369705, 0.9999675337275382, 0.008058532943908717, 0.015935682577325486, 0, 0, 0, 1); - iron.Scene.active.camera.transform.setMatrix(m); - var savedFov = iron.Scene.active.camera.data.raw.fov; - iron.Scene.active.camera.data.raw.fov = 0.92; - // var light = iron.Scene.active.lights[0]; - // light.data.raw.cast_shadow = false; - iron.Scene.active.world.envmap = UITrait.inst.previewEnvmap; - - // No jitter - // @:privateAccess iron.Scene.active.camera.frame = 0; - // No resize - @:privateAccess iron.RenderPath.active.lastW = 100; - @:privateAccess iron.RenderPath.active.lastH = 100; - iron.Scene.active.camera.buildProjection(); - iron.Scene.active.camera.buildMatrix(); - - UINodes.inst.parseMeshPreviewMaterial(); - iron.RenderPath.active.commands = arm.renderpath.RenderPathPreview.commandsPreview; - iron.RenderPath.active.renderFrame(iron.RenderPath.active.frameG); - iron.RenderPath.active.commands = arm.renderpath.RenderPathDeferred.commands; - - UITrait.inst.materialPreview = false; - @:privateAccess iron.RenderPath.active.lastW = iron.App.w(); - @:privateAccess iron.RenderPath.active.lastH = iron.App.h(); - - // Restore - sphere.visible = false; - for (p in UITrait.inst.paintObjects) p.visible = true; - UITrait.inst.paintObject = painto; - - #if arm_editor - UITrait.inst.gizmo.visible = gizmo_vis; - UITrait.inst.grid.visible = grid_vis; - #end - - iron.Scene.active.camera.transform.setMatrix(UITrait.inst.savedCamera); - iron.Scene.active.camera.data.raw.fov = savedFov; - iron.Scene.active.camera.buildProjection(); - iron.Scene.active.camera.buildMatrix(); - // var light = iron.Scene.active.lights[0]; - // light.data.raw.cast_shadow = true; - iron.Scene.active.world.envmap = UITrait.inst.showEnvmap ? UITrait.inst.savedEnvmap : UITrait.inst.emptyEnvmap; - UINodes.inst.parseMeshMaterial(); - } -} +package arm.util; + +import iron.object.MeshObject; +import iron.math.Mat4; +import arm.ui.*; + +class RenderUtil { + public static function makeDecalPreview() { + if (UITrait.inst.decalImage == null) { + UITrait.inst.decalImage = kha.Image.createRenderTarget(512, 512); + } + UITrait.inst.decalPreview = true; + + var painto = UITrait.inst.paintObject; + for (p in UITrait.inst.paintObjects) p.visible = false; + + var plane:MeshObject = cast iron.Scene.active.getChild("Plane"); + plane.transform.rot.fromEuler(-Math.PI / 2, 0, 0); + plane.transform.buildMatrix(); + plane.visible = true; + UITrait.inst.paintObject = plane; + + UITrait.inst.savedCamera.setFrom(iron.Scene.active.camera.transform.local); + var m = Mat4.identity(); + m.translate(0, 0, 1); + iron.Scene.active.camera.transform.setMatrix(m); + var savedFov = iron.Scene.active.camera.data.raw.fov; + iron.Scene.active.camera.data.raw.fov = 0.92; + var light = iron.Scene.active.lights[0]; + light.visible = false; + // light.data.raw.cast_shadow = false; + + // No jitter + // @:privateAccess iron.Scene.active.camera.frame = 0; + // No resize + @:privateAccess iron.RenderPath.active.lastW = 512; + @:privateAccess iron.RenderPath.active.lastH = 512; + iron.Scene.active.camera.buildProjection(); + iron.Scene.active.camera.buildMatrix(); + + UINodes.inst.parseMeshPreviewMaterial(); + iron.RenderPath.active.commands = arm.renderpath.RenderPathPreview.commandsDecal; + iron.RenderPath.active.renderFrame(iron.RenderPath.active.frameG); + iron.RenderPath.active.commands = arm.renderpath.RenderPathDeferred.commands; + + UITrait.inst.decalPreview = false; + @:privateAccess iron.RenderPath.active.lastW = iron.App.w(); + @:privateAccess iron.RenderPath.active.lastH = iron.App.h(); + + // Restore + plane.visible = false; + for (p in UITrait.inst.paintObjects) p.visible = true; + UITrait.inst.paintObject = painto; + + iron.Scene.active.camera.transform.setMatrix(UITrait.inst.savedCamera); + iron.Scene.active.camera.data.raw.fov = savedFov; + iron.Scene.active.camera.buildProjection(); + iron.Scene.active.camera.buildMatrix(); + var light = iron.Scene.active.lights[0]; + light.visible = true; + // light.data.raw.cast_shadow = true; + UINodes.inst.parseMeshMaterial(); + UITrait.inst.ddirty = 2; + } + + public static function makeMaterialPreview() { + UITrait.inst.materialPreview = true; + + var painto = UITrait.inst.paintObject; + for (p in UITrait.inst.paintObjects) p.visible = false; + + var sphere:MeshObject = cast iron.Scene.active.getChild("Sphere"); + sphere.visible = true; + UITrait.inst.paintObject = sphere; + + #if arm_editor + sphere.materials[0] = UITrait.inst.htab.position == 0 ? UITrait.inst.selectedMaterial2.data : UITrait.inst.materials[0].data; + var gizmo_vis = UITrait.inst.gizmo.visible; + var grid_vis = UITrait.inst.grid.visible; + UITrait.inst.gizmo.visible = false; + UITrait.inst.grid.visible = false; + #end + + UITrait.inst.savedCamera.setFrom(iron.Scene.active.camera.transform.local); + var m = new Mat4(0.9146286343879498, -0.0032648027153306235, 0.404281837254303, 0.4659988049397712, 0.404295023959927, 0.007367569133732468, -0.9145989516155143, -1.0687517188018691, 0.000007410128652369705, 0.9999675337275382, 0.008058532943908717, 0.015935682577325486, 0, 0, 0, 1); + iron.Scene.active.camera.transform.setMatrix(m); + var savedFov = iron.Scene.active.camera.data.raw.fov; + iron.Scene.active.camera.data.raw.fov = 0.92; + // var light = iron.Scene.active.lights[0]; + // light.data.raw.cast_shadow = false; + iron.Scene.active.world.envmap = UITrait.inst.previewEnvmap; + + // No jitter + // @:privateAccess iron.Scene.active.camera.frame = 0; + // No resize + @:privateAccess iron.RenderPath.active.lastW = 100; + @:privateAccess iron.RenderPath.active.lastH = 100; + iron.Scene.active.camera.buildProjection(); + iron.Scene.active.camera.buildMatrix(); + + UINodes.inst.parseMeshPreviewMaterial(); + iron.RenderPath.active.commands = arm.renderpath.RenderPathPreview.commandsPreview; + iron.RenderPath.active.renderFrame(iron.RenderPath.active.frameG); + iron.RenderPath.active.commands = arm.renderpath.RenderPathDeferred.commands; + + UITrait.inst.materialPreview = false; + @:privateAccess iron.RenderPath.active.lastW = iron.App.w(); + @:privateAccess iron.RenderPath.active.lastH = iron.App.h(); + + // Restore + sphere.visible = false; + for (p in UITrait.inst.paintObjects) p.visible = true; + UITrait.inst.paintObject = painto; + + #if arm_editor + UITrait.inst.gizmo.visible = gizmo_vis; + UITrait.inst.grid.visible = grid_vis; + #end + + iron.Scene.active.camera.transform.setMatrix(UITrait.inst.savedCamera); + iron.Scene.active.camera.data.raw.fov = savedFov; + iron.Scene.active.camera.buildProjection(); + iron.Scene.active.camera.buildMatrix(); + // var light = iron.Scene.active.lights[0]; + // light.data.raw.cast_shadow = true; + iron.Scene.active.world.envmap = UITrait.inst.showEnvmap ? UITrait.inst.savedEnvmap : UITrait.inst.emptyEnvmap; + UINodes.inst.parseMeshMaterial(); + } +} diff --git a/Sources/arm/ViewportUtil.hx b/Sources/arm/util/ViewportUtil.hx similarity index 96% rename from Sources/arm/ViewportUtil.hx rename to Sources/arm/util/ViewportUtil.hx index 6deca6f3..52f2fc84 100644 --- a/Sources/arm/ViewportUtil.hx +++ b/Sources/arm/util/ViewportUtil.hx @@ -1,52 +1,53 @@ -package arm; - -import iron.math.Mat4; -import iron.math.Vec4; -import iron.math.Quat; - -class ViewportUtil { - public static function scaleToBounds() { - var po = UITrait.inst.mergedObject == null ? UITrait.inst.mainObject() : UITrait.inst.mergedObject; - var md = po.data; - md.geom.calculateAABB(); - var r = Math.sqrt(md.geom.aabb.x * md.geom.aabb.x + md.geom.aabb.y * md.geom.aabb.y + md.geom.aabb.z * md.geom.aabb.z); - po = UITrait.inst.mainObject(); - po.transform.dim.x = md.geom.aabb.x; - po.transform.dim.y = md.geom.aabb.y; - po.transform.dim.z = md.geom.aabb.z; - po.transform.scale.set(2 / r, 2 / r, 2 / r); - po.transform.buildMatrix(); - } - - public static function resetViewport() { - var scene = iron.Scene.active; - var cam = scene.camera; - for (o in scene.raw.objects) { - if (o.type == 'camera_object') { - cam.transform.local.setF32(o.transform.values); - cam.transform.decompose(); - if (UITrait.inst.fovHandle != null) UITrait.inst.fovHandle.value = 0.92; - UITrait.inst.camHandle.position = 0; - cam.data.raw.ortho = null; - // if (UITrait.inst.originalShadowBias > 0) { - // iron.Scene.active.lights[0].data.raw.shadows_bias = UITrait.inst.originalShadowBias; - // } - cam.buildProjection(); - UITrait.inst.selectedObject.transform.reset(); - UITrait.inst.ddirty = 2; - break; - } - } - } - - public static function setView(x:Float, y:Float, z:Float, rx:Float, ry:Float, rz:Float) { - UITrait.inst.selectedObject.transform.reset(); - var scene = iron.Scene.active; - var cam = scene.camera; - cam.transform.loc.set(x, y, z); - cam.transform.rot.fromEuler(rx, ry, rz); - cam.transform.buildMatrix(); - cam.buildProjection(); - UITrait.inst.ddirty = 2; - } -} +package arm.util; + +import iron.math.Mat4; +import iron.math.Vec4; +import iron.math.Quat; +import arm.ui.*; + +class ViewportUtil { + public static function scaleToBounds() { + var po = UITrait.inst.mergedObject == null ? UITrait.inst.mainObject() : UITrait.inst.mergedObject; + var md = po.data; + md.geom.calculateAABB(); + var r = Math.sqrt(md.geom.aabb.x * md.geom.aabb.x + md.geom.aabb.y * md.geom.aabb.y + md.geom.aabb.z * md.geom.aabb.z); + po = UITrait.inst.mainObject(); + po.transform.dim.x = md.geom.aabb.x; + po.transform.dim.y = md.geom.aabb.y; + po.transform.dim.z = md.geom.aabb.z; + po.transform.scale.set(2 / r, 2 / r, 2 / r); + po.transform.buildMatrix(); + } + + public static function resetViewport() { + var scene = iron.Scene.active; + var cam = scene.camera; + for (o in scene.raw.objects) { + if (o.type == 'camera_object') { + cam.transform.local.setF32(o.transform.values); + cam.transform.decompose(); + if (UITrait.inst.fovHandle != null) UITrait.inst.fovHandle.value = 0.92; + UITrait.inst.camHandle.position = 0; + cam.data.raw.ortho = null; + // if (UITrait.inst.originalShadowBias > 0) { + // iron.Scene.active.lights[0].data.raw.shadows_bias = UITrait.inst.originalShadowBias; + // } + cam.buildProjection(); + UITrait.inst.selectedObject.transform.reset(); + UITrait.inst.ddirty = 2; + break; + } + } + } + + public static function setView(x:Float, y:Float, z:Float, rx:Float, ry:Float, rz:Float) { + UITrait.inst.selectedObject.transform.reset(); + var scene = iron.Scene.active; + var cam = scene.camera; + cam.transform.loc.set(x, y, z); + cam.transform.rot.fromEuler(rx, ry, rz); + cam.transform.buildMatrix(); + cam.buildProjection(); + UITrait.inst.ddirty = 2; + } +}