diff --git a/Sources/arm/App.hx b/Sources/arm/App.hx index 1e9c7f4b..b7f6d7f6 100644 --- a/Sources/arm/App.hx +++ b/Sources/arm/App.hx @@ -234,7 +234,7 @@ class App { cam.data.raw.ortho[3] = 2 * (iron.App.h() / iron.App.w()); } cam.buildProjection(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; var lay = C.ui_layout; @@ -268,7 +268,7 @@ class App { UITrait.inst.menuHandle.redraws = 2; UITrait.inst.workspaceHandle.redraws = 2; UINodes.inst.hwnd.redraws = 2; - if (UITrait.inst.ddirty < 0) UITrait.inst.ddirty = 0; // Tag cached viewport texture redraw + if (Context.ddirty < 0) Context.ddirty = 0; // Tag cached viewport texture redraw } static function update() { @@ -296,8 +296,8 @@ class App { // Create image texture if (inNodes) { var index = 0; - for (i in 0...UITrait.inst.assets.length) { - if (UITrait.inst.assets[i] == dragAsset) { + for (i in 0...Project.assets.length) { + if (Project.assets[i] == dragAsset) { index = i; break; } @@ -306,14 +306,14 @@ class App { } // Create mask else if (inViewport || inLayers || in2dView) { - UITrait.inst.createImageMask(dragAsset); + Layers.createImageMask(dragAsset); } dragAsset = null; } if (dragMaterial != null) { // Material dragged onto viewport or layers tab if (inViewport || inLayers || in2dView) { - UITrait.inst.createFillLayer(); + Layers.createFillLayer(); } dragMaterial = null; } @@ -336,8 +336,8 @@ class App { if (showFiles || showBox) UIBox.update(); - var decal = UITrait.inst.selectedTool == ToolDecal || UITrait.inst.selectedTool == ToolText; - var isPicker = UITrait.inst.selectedTool == ToolPicker; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; + var isPicker = Context.tool == ToolPicker; #if krom_windows Zui.alwaysRedrawWindow = showMenu || @@ -349,7 +349,7 @@ class App { !UITrait.inst.brush3d || UITrait.inst.frame < 3; #end - if (Zui.alwaysRedrawWindow && UITrait.inst.ddirty < 0) UITrait.inst.ddirty = 0; + if (Zui.alwaysRedrawWindow && Context.ddirty < 0) Context.ddirty = 0; } static function render(g:kha.graphics2.Graphics) { @@ -379,17 +379,17 @@ class App { } public static function getEnumTexts():Array { - return UITrait.inst.assetNames.length > 0 ? UITrait.inst.assetNames : [""]; + return Project.assetNames.length > 0 ? Project.assetNames : [""]; } public static function mapEnum(s:String):String { - for (a in UITrait.inst.assets) if (a.name == s) return a.file; + for (a in Project.assets) if (a.name == s) return a.file; return ""; } public static function getAssetIndex(f:String):Int { - for (i in 0...UITrait.inst.assets.length) { - if (UITrait.inst.assets[i].file == f) { + for (i in 0...Project.assets.length) { + if (Project.assets[i].file == f) { return i; } } diff --git a/Sources/arm/Config.hx b/Sources/arm/Config.hx index cc9a204f..5fbbdfef 100644 --- a/Sources/arm/Config.hx +++ b/Sources/arm/Config.hx @@ -112,7 +112,7 @@ class Config { Inc.applyConfig(); if (current != null) current.begin(false); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } public static inline function getSuperSampleQuality(f:Float):Int { diff --git a/Sources/arm/Context.hx b/Sources/arm/Context.hx index 5d74218a..30633b2f 100644 --- a/Sources/arm/Context.hx +++ b/Sources/arm/Context.hx @@ -1,7 +1,179 @@ package arm; -class Context { +import zui.Canvas; +import iron.object.Object; +import iron.object.MeshObject; +import iron.data.Data; +import arm.data.MaterialSlot; +import arm.data.LayerSlot; +import arm.data.BrushSlot; +import arm.util.UVUtil; +import arm.util.RenderUtil; +import arm.ui.UITrait; +import arm.ui.UINodes; +import arm.ui.UIFiles; +import arm.io.Importer; +import arm.nodes.MaterialParser; +import arm.Tool; - // public static var selectedMaterial:MaterialSlot; - // public static var selectedLayer:LayerSlot; +class Context { + public static var material:MaterialSlot; + public static var materialScene:MaterialSlot; + public static var layer:LayerSlot; + public static var layerIsMask = false; // Mask selected for active layer + public static var brush:BrushSlot; + public static var texture:TAsset = null; + public static var object:Object; + public static var paintObject:MeshObject; + public static var paintObjects:Array = null; + public static var mergedObject:MeshObject = null; // For object mask + public static var tool = 0; + + public static var ddirty = 0; // depth + public static var pdirty = 0; // paint + public static var rdirty = 0; // render + public static var brushBlendDirty = true; + public static var layerPreviewDirty = true; + public static var layersPreviewDirty = false; + + public static function selectMaterialScene(i:Int) { + if (Project.materialsScene.length <= i || object == paintObject) return; + materialScene = Project.materialsScene[i]; + if (Std.is(object, MeshObject)) { + cast(object, MeshObject).materials[0] = materialScene.data; + } + UINodes.inst.updateCanvasMap(); + MaterialParser.parsePaintMaterial(); + UITrait.inst.hwnd.redraws = 2; + } + + public static function selectMaterial(i:Int) { + if (Project.materials.length <= i) return; + setMaterial(Project.materials[i]); + } + + public static function setMaterial(m:MaterialSlot) { + material = m; + UINodes.inst.updateCanvasMap(); + MaterialParser.parsePaintMaterial(); + UITrait.inst.hwnd1.redraws = 2; + UITrait.inst.headerHandle.redraws = 2; + + var current = @:privateAccess kha.graphics4.Graphics2.current; + if (current != null) current.end(); + var decal = tool == ToolDecal || tool == ToolText; + if (decal) RenderUtil.makeDecalPreview(); + if (current != null) current.begin(false); + } + + public static function selectBrush(i:Int) { + if (Project.brushes.length <= i) return; + brush = Project.brushes[i]; + UINodes.inst.updateCanvasBrushMap(); + MaterialParser.parseBrush(); + UITrait.inst.hwnd1.redraws = 2; + } + + public static function setLayer(l:LayerSlot, isMask = false) { + layer = l; + layerIsMask = isMask; + UITrait.inst.headerHandle.redraws = 2; + + var current = @:privateAccess kha.graphics4.Graphics2.current; + if (current != null) current.end(); + + Layers.setObjectMask(); + MaterialParser.parseMeshMaterial(); + MaterialParser.parsePaintMaterial(); + + if (current != null) current.begin(false); + + UITrait.inst.hwnd.redraws = 2; + } + + public static function selectTool(i:Int) { + tool = i; + MaterialParser.parsePaintMaterial(); + MaterialParser.parseMeshMaterial(); + UITrait.inst.headerHandle.redraws = 2; + UITrait.inst.toolbarHandle.redraws = 2; + + var decal = tool == ToolDecal || tool == ToolText; + if (decal) { + var current = @:privateAccess kha.graphics4.Graphics2.current; + if (current != null) current.end(); + + if (tool == ToolDecal) { + RenderUtil.makeDecalMaskPreview(); + } + else if (tool == ToolText) { + RenderUtil.makeTextPreview(); + } + + RenderUtil.makeDecalPreview(); + ddirty = 2; + + if (current != null) current.begin(false); + } + + if (tool == ToolParticle) { + Tool.initParticle(); + MaterialParser.parseParticleMaterial(); + } + } + + public static function selectObject(o:Object) { + object = o; + + if (UITrait.inst.worktab.position == SpaceScene) { + if (Std.is(o, MeshObject)) { + for (i in 0...Project.materialsScene.length) { + if (Project.materialsScene[i].data == cast(o, MeshObject).materials[0]) { + // selectMaterial(i); // loop + materialScene = Project.materialsScene[i]; + UITrait.inst.hwnd.redraws = 2; + break; + } + } + } + } + } + + public static function selectPaintObject(o:MeshObject) { + UITrait.inst.headerHandle.redraws = 2; + for (p in paintObjects) p.skip_context = "paint"; + paintObject = o; + + var mask = layer.objectMask; + if (UITrait.inst.layerFilter > 0) mask = UITrait.inst.layerFilter; + + if (mergedObject == null || mask > 0) { + paintObject.skip_context = ""; + } + UVUtil.uvmapCached = false; + UVUtil.trianglemapCached = false; + } + + public static function mainObject():MeshObject { + for (po in paintObjects) if (po.children.length > 0) return po; + return paintObjects[0]; + } + + public static function removeMaterialCache() { + Data.cachedMaterials.remove("SceneMaterial2"); + Data.cachedShaders.remove("Material2_data"); + Data.cachedSceneRaws.remove("Material2_data"); + // Data.cachedBlobs.remove("Material2_data.arm"); + } + + public static function importMesh() { + App.showFiles = true; + App.whandle.redraws = 2; + App.foldersOnly = false; + App.showFilename = false; + UIFiles.filters = "obj,fbx,blend,arm"; + App.filesDone = function(path:String) { + Importer.importFile(path); + } + } } diff --git a/Sources/arm/History.hx b/Sources/arm/History.hx index 6504abb4..28aab21c 100644 --- a/Sources/arm/History.hx +++ b/Sources/arm/History.hx @@ -2,51 +2,57 @@ package arm; import arm.ui.UITrait; import arm.ui.UIView2D; +import arm.data.LayerSlot; class History { public static var stack:Array = ["New"]; + public static var undoI = 0; // Undo layer + public static var undos = 0; // Undos available + public static var redos = 0; // Redos available + public static var pushUndo = false; // Store undo on next paint + public static var undoLayers:Array = null; public static function doUndo() { - if (UITrait.inst.undos > 0) { - UITrait.inst.undoI = UITrait.inst.undoI - 1 < 0 ? App.C.undo_steps - 1 : UITrait.inst.undoI - 1; - var lay = UITrait.inst.undoLayers[UITrait.inst.undoI]; - var opos = UITrait.inst.paintObjects.indexOf(lay.targetObject); - var lpos = UITrait.inst.layers.indexOf(lay.targetLayer); + if (undos > 0) { + undoI = undoI - 1 < 0 ? App.C.undo_steps - 1 : undoI - 1; + var lay = undoLayers[undoI]; + var opos = Context.paintObjects.indexOf(lay.targetObject); + var lpos = Project.layers.indexOf(lay.targetLayer); if (opos >= 0 && lpos >= 0) { - UITrait.inst.selectPaintObject(UITrait.inst.paintObjects[opos]); - UITrait.inst.setLayer(UITrait.inst.layers[lpos], lay.targetIsMask); - lay.targetIsMask ? UITrait.inst.selectedLayer.swapMask(lay) : UITrait.inst.selectedLayer.swap(lay); - UITrait.inst.layerPreviewDirty = true; + Context.selectPaintObject(Context.paintObjects[opos]); + Context.setLayer(Project.layers[lpos], lay.targetIsMask); + lay.targetIsMask ? Context.layer.swapMask(lay) : Context.layer.swap(lay); + Context.layerPreviewDirty = true; } - UITrait.inst.undos--; - UITrait.inst.redos++; + undos--; + redos++; if (UIView2D.inst.show) UIView2D.inst.hwnd.redraws = 2; } } public static function doRedo() { - if (UITrait.inst.redos > 0) { - var lay = UITrait.inst.undoLayers[UITrait.inst.undoI]; - var opos = UITrait.inst.paintObjects.indexOf(lay.targetObject); - var lpos = UITrait.inst.layers.indexOf(lay.targetLayer); + if (redos > 0) { + var lay = undoLayers[undoI]; + var opos = Context.paintObjects.indexOf(lay.targetObject); + var lpos = Project.layers.indexOf(lay.targetLayer); if (opos >= 0 && lpos >= 0) { - UITrait.inst.selectPaintObject(UITrait.inst.paintObjects[opos]); - UITrait.inst.setLayer(UITrait.inst.layers[lpos], lay.targetIsMask); - lay.targetIsMask ? UITrait.inst.selectedLayer.swapMask(lay) : UITrait.inst.selectedLayer.swap(lay); - UITrait.inst.layerPreviewDirty = true; + Context.selectPaintObject(Context.paintObjects[opos]); + Context.setLayer(Project.layers[lpos], lay.targetIsMask); + lay.targetIsMask ? Context.layer.swapMask(lay) : Context.layer.swap(lay); + Context.layerPreviewDirty = true; } - UITrait.inst.undoI = (UITrait.inst.undoI + 1) % App.C.undo_steps; - UITrait.inst.undos++; - UITrait.inst.redos--; + undoI = (undoI + 1) % App.C.undo_steps; + undos++; + redos--; if (UIView2D.inst.show) UIView2D.inst.hwnd.redraws = 2; } } public static function reset() { stack = ["New"]; - UITrait.inst.undos = 0; - UITrait.inst.redos = 0; - UITrait.inst.undoI = 0; + undos = 0; + redos = 0; + undoI = 0; } } diff --git a/Sources/arm/Layers.hx b/Sources/arm/Layers.hx index b7c28510..350763b4 100644 --- a/Sources/arm/Layers.hx +++ b/Sources/arm/Layers.hx @@ -14,8 +14,10 @@ import kha.graphics4.CompareMode; import iron.RenderPath; import arm.ui.UITrait; import arm.data.ConstData; +import arm.data.LayerSlot; import arm.nodes.MaterialParser; import arm.render.RenderPathPaint; +import arm.util.MeshUtil; import arm.Tool; class Layers { @@ -52,7 +54,7 @@ class Layers { public static function initLayers(g:kha.graphics4.Graphics) { g.end(); - var layers = UITrait.inst.layers; + var layers = Project.layers; layers[0].texpaint.g4.begin(); layers[0].texpaint.g4.clear(kha.Color.fromFloats(0.5, 0.5, 0.5, 0.0)); // Base layers[0].texpaint.g4.end(); @@ -68,14 +70,14 @@ class Layers { g.begin(); iron.App.removeRender(initLayers); - UITrait.inst.layerPreviewDirty = true; - UITrait.inst.ddirty = 3; + Context.layerPreviewDirty = true; + Context.ddirty = 3; } public static function clearLastLayer(g:kha.graphics4.Graphics) { g.end(); - var layers = UITrait.inst.layers; + var layers = Project.layers; var i = layers.length - 1; layers[i].texpaint.g4.begin(); layers[i].texpaint.g4.clear(kha.Color.fromFloats(0.0, 0.0, 0.0, 0.0)); // Base @@ -98,11 +100,11 @@ class Layers { if (UITrait.inst.resHandle.position >= 4) { // Save memory for >=16k C.undo_steps = 1; if (UITrait.inst.undoHandle != null) UITrait.inst.undoHandle.value = C.undo_steps; - while (UITrait.inst.undoLayers.length > C.undo_steps) { var l = UITrait.inst.undoLayers.pop(); l.unload(); } + while (History.undoLayers.length > C.undo_steps) { var l = History.undoLayers.pop(); l.unload(); } } g.end(); - for (l in UITrait.inst.layers) l.resizeAndSetBits(); - for (l in UITrait.inst.undoLayers) l.resizeAndSetBits(); + for (l in Project.layers) l.resizeAndSetBits(); + for (l in History.undoLayers) l.resizeAndSetBits(); var rts = RenderPath.active.renderTargets; rts.get("texpaint_blend0").image.unload(); rts.get("texpaint_blend0").raw.width = Config.getTextureRes(); @@ -112,24 +114,24 @@ class Layers { rts.get("texpaint_blend1").raw.width = Config.getTextureRes(); rts.get("texpaint_blend1").raw.height = Config.getTextureRes(); rts.get("texpaint_blend1").image = Image.createRenderTarget(Config.getTextureRes(), Config.getTextureRes(), TextureFormat.L8); - UITrait.inst.brushBlendDirty = true; + Context.brushBlendDirty = true; g.begin(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; iron.App.removeRender(resizeLayers); } public static function setLayerBits(g:kha.graphics4.Graphics) { g.end(); - for (l in UITrait.inst.layers) l.resizeAndSetBits(); - for (l in UITrait.inst.undoLayers) l.resizeAndSetBits(); + for (l in Project.layers) l.resizeAndSetBits(); + for (l in History.undoLayers) l.resizeAndSetBits(); g.begin(); iron.App.removeRender(setLayerBits); } public static function deleteSelectedLayer() { - UITrait.inst.selectedLayer.unload(); - UITrait.inst.layers.remove(UITrait.inst.selectedLayer); - UITrait.inst.setLayer(UITrait.inst.layers[0]); + Context.layer.unload(); + Project.layers.remove(Context.layer); + Context.setLayer(Project.layers[0]); } public static function makePipe() { @@ -194,7 +196,7 @@ class Layers { } public static function makeTempImg() { - var l = UITrait.inst.layers[0]; + var l = Project.layers[0]; if (imga != null && imga.width != l.texpaint.width) { imga.unload(); imgb.unload(); @@ -211,7 +213,7 @@ class Layers { } public static function makeExportImg() { - var l = UITrait.inst.layers[0]; + var l = Project.layers[0]; if (expa != null && expa.width != l.texpaint.width) { expa.unload(); expb.unload(); @@ -233,12 +235,12 @@ class Layers { public static function mergeSelectedLayer(g:kha.graphics4.Graphics) { if (pipe == null) makePipe(); - var l0 = UITrait.inst.layers[0]; - var l1 = UITrait.inst.selectedLayer; + var l0 = Project.layers[0]; + var l1 = Context.layer; - for (i in 1...UITrait.inst.layers.length) { // Merge down - if (UITrait.inst.layers[i] == l1) { - l0 = UITrait.inst.layers[i - 1]; + for (i in 1...Project.layers.length) { // Merge down + if (Project.layers[i] == l1) { + l0 = Project.layers[i - 1]; break; } } @@ -285,22 +287,22 @@ class Layers { deleteSelectedLayer(); iron.App.removeRender(mergeSelectedLayer); - UITrait.inst.setLayer(l0); - UITrait.inst.layerPreviewDirty = true; + Context.setLayer(l0); + Context.layerPreviewDirty = true; } public static function isFillMaterial():Bool { - var m = UITrait.inst.selectedMaterial; - for (l in UITrait.inst.layers) if (l.material_mask == m) return true; + var m = Context.material; + for (l in Project.layers) if (l.material_mask == m) return true; return false; } public static function updateFillLayers(fills = 1) { - var m = UITrait.inst.selectedMaterial; - var layers = UITrait.inst.layers; - var selectedLayer = UITrait.inst.selectedLayer; - var isMask = UITrait.inst.selectedLayerIsMask; - var selectedTool = UITrait.inst.selectedTool; + var m = Context.material; + var layers = Project.layers; + var selectedLayer = Context.layer; + var isMask = Context.layerIsMask; + var selectedTool = Context.tool; var current:kha.graphics4.Graphics2 = null; var first = true; @@ -309,13 +311,13 @@ class Layers { if (first) { current = @:privateAccess kha.graphics4.Graphics2.current; if (current != null) current.end(); - UITrait.inst.pdirty = fills; - UITrait.inst.selectedLayerIsMask = false; - UITrait.inst.selectedTool = ToolFill; + Context.pdirty = fills; + Context.layerIsMask = false; + Context.tool = ToolFill; } - UITrait.inst.selectedLayer = l; - UITrait.inst.setObjectMask(); + Context.layer = l; + setObjectMask(); if (first) { first = false; @@ -329,14 +331,84 @@ class Layers { } if (!first) { - UITrait.inst.pdirty = 0; - UITrait.inst.ddirty = 2; - UITrait.inst.rdirty = 2; + Context.pdirty = 0; + Context.ddirty = 2; + Context.rdirty = 2; if (current != null) current.begin(false); - UITrait.inst.selectedLayer = selectedLayer; - UITrait.inst.selectedLayerIsMask = isMask; - UITrait.inst.setObjectMask(); - UITrait.inst.selectedTool = selectedTool; + Context.layer = selectedLayer; + Context.layerIsMask = isMask; + setObjectMask(); + Context.tool = selectedTool; + } + } + + public static function setObjectMask() { + var ar = ["None"]; + for (p in Context.paintObjects) ar.push(p.name); + + var mask = Context.layer.objectMask; + if (UITrait.inst.layerFilter > 0) mask = UITrait.inst.layerFilter; + if (mask > 0) { + if (Context.mergedObject != null) Context.mergedObject.visible = false; + var o = Context.paintObjects[0]; + for (p in Context.paintObjects) if (p.name == ar[mask]) { o = p; break; } + Context.selectPaintObject(o); + } + else { + if (Context.mergedObject == null) { + MeshUtil.mergeMesh(); + } + Context.selectPaintObject(Context.mainObject()); + Context.paintObject.skip_context = "paint"; + Context.mergedObject.visible = true; + } + } + + public static function newLayer():LayerSlot { + if (Project.layers.length > 255) return null; + var l = new LayerSlot(); + Project.layers.push(l); + Context.setLayer(l); + iron.App.notifyOnRender(Layers.clearLastLayer); + Context.layerPreviewDirty = true; + return l; + } + + public static function toFillLayer(l:LayerSlot) { + Context.setLayer(l); + l.material_mask = Context.material; + function makeFill(g:kha.graphics4.Graphics) { + g.end(); + Layers.updateFillLayers(4); + MaterialParser.parsePaintMaterial(); + Context.layerPreviewDirty = true; + UITrait.inst.hwnd.redraws = 2; + g.begin(); + iron.App.removeRender(makeFill); + } + iron.App.notifyOnRender(makeFill); + } + + public static function toPaintLayer(l:LayerSlot) { + Context.setLayer(l); + l.material_mask = null; + MaterialParser.parsePaintMaterial(); + Context.layerPreviewDirty = true; + UITrait.inst.hwnd.redraws = 2; + } + + public static function createFillLayer() { + var l = newLayer(); + l.objectMask = UITrait.inst.layerFilter; + toFillLayer(l); + } + + public static function createImageMask(asset:zui.Canvas.TAsset) { + var l = Context.layer; + if (l != Project.layers[0]) { + l.createMask(0x00000000, true, UITrait.inst.getImage(asset)); + Context.setLayer(l, true); + Context.layerPreviewDirty = true; } } } diff --git a/Sources/arm/Project.hx b/Sources/arm/Project.hx index adcf6595..62351f0c 100644 --- a/Sources/arm/Project.hx +++ b/Sources/arm/Project.hx @@ -2,6 +2,7 @@ package arm; import kha.Window; import zui.Nodes; +import zui.Canvas; import iron.data.SceneFormat; import iron.data.MeshData; import iron.data.Data; @@ -10,7 +11,6 @@ import arm.util.MeshUtil; import arm.util.RenderUtil; import arm.util.ViewportUtil; import arm.util.Path; -import arm.util.Lz4; import arm.ui.UITrait; import arm.ui.UINodes; import arm.ui.UIFiles; @@ -22,6 +22,17 @@ import arm.io.ImportArm; using StringTools; class Project { + + public static var raw:TProjectFormat; + public static var filepath = ""; + public static var assets:Array = []; + public static var assetNames:Array = []; + public static var assetId = 0; + public static var materials:Array = null; + public static var materialsScene:Array = null; + public static var brushes:Array = null; + public static var layers:Array = null; + public static function projectOpen() { App.showFiles = true; App.whandle.redraws = 2; @@ -44,7 +55,7 @@ class Project { } public static function projectSave() { - if (UITrait.inst.projectPath == "") { + if (filepath == "") { projectSaveAs(); return; } @@ -61,31 +72,31 @@ class Project { App.filesDone = function(path:String) { var f = App.filenameHandle.text; if (f == "") f = "untitled"; - UITrait.inst.projectPath = path + "/" + f; - if (!UITrait.inst.projectPath.endsWith(".arm")) UITrait.inst.projectPath += ".arm"; + filepath = path + "/" + f; + if (!filepath.endsWith(".arm")) filepath += ".arm"; projectSave(); }; } public static function projectNew(resetLayers = true) { Window.get(0).title = "ArmorPaint"; - UITrait.inst.projectPath = ""; - if (UITrait.inst.mergedObject != null) { - UITrait.inst.mergedObject.remove(); - Data.deleteMesh(UITrait.inst.mergedObject.data.handle); - UITrait.inst.mergedObject = null; + filepath = ""; + if (Context.mergedObject != null) { + Context.mergedObject.remove(); + Data.deleteMesh(Context.mergedObject.data.handle); + Context.mergedObject = null; } ViewportUtil.resetViewport(); - UITrait.inst.layerPreviewDirty = true; + Context.layerPreviewDirty = true; LayerSlot.counter = 0; - UITrait.inst.paintObject = UITrait.inst.mainObject(); + Context.paintObject = Context.mainObject(); - UITrait.inst.selectPaintObject(UITrait.inst.mainObject()); - for (i in 1...UITrait.inst.paintObjects.length) { - var p = UITrait.inst.paintObjects[i]; - if (p == UITrait.inst.paintObject) continue; + Context.selectPaintObject(Context.mainObject()); + for (i in 1...Context.paintObjects.length) { + var p = Context.paintObjects[i]; + if (p == Context.paintObject) continue; Data.deleteMesh(p.data.handle); p.remove(); } @@ -98,7 +109,7 @@ class Project { m.remove(); } } - var handle = UITrait.inst.paintObject.data.handle; + var handle = Context.paintObject.data.handle; if (handle != "SceneSphere" && handle != "ScenePlane") { Data.deleteMesh(handle); } @@ -136,30 +147,30 @@ class Project { if (current != null) current.end(); UITrait.inst.pickerMaskHandle.position = 0; - UITrait.inst.paintObject.setData(md); - UITrait.inst.paintObject.transform.scale.set(1, 1, 1); - UITrait.inst.paintObject.transform.buildMatrix(); - UITrait.inst.paintObject.name = n; - UITrait.inst.paintObjects = [UITrait.inst.paintObject]; + Context.paintObject.setData(md); + Context.paintObject.transform.scale.set(1, 1, 1); + Context.paintObject.transform.buildMatrix(); + Context.paintObject.name = n; + Context.paintObjects = [Context.paintObject]; Data.getMaterial("Scene", "Material", function(m:iron.data.MaterialData) { - UITrait.inst.materials = [new MaterialSlot(m)]; + materials = [new MaterialSlot(m)]; }); - UITrait.inst.selectedMaterial = UITrait.inst.materials[0]; + Context.material = materials[0]; UINodes.inst.canvasMap = new Map(); UINodes.inst.canvasBrushMap = new Map(); - UITrait.inst.brushes = [new BrushSlot()]; - UITrait.inst.selectedBrush = UITrait.inst.brushes[0]; + brushes = [new BrushSlot()]; + Context.brush = brushes[0]; History.reset(); UINodes.inst.updateCanvasMap(); MaterialParser.parsePaintMaterial(); RenderUtil.makeMaterialPreview(); - for (a in UITrait.inst.assets) Data.deleteImage(a.file); - UITrait.inst.assets = []; - UITrait.inst.assetNames = []; - UITrait.inst.assetId = 0; - UITrait.inst.ddirty = 4; + for (a in assets) Data.deleteImage(a.file); + assets = []; + assetNames = []; + assetId = 0; + Context.ddirty = 4; UITrait.inst.hwnd.redraws = 2; UITrait.inst.hwnd1.redraws = 2; UITrait.inst.hwnd2.redraws = 2; @@ -167,10 +178,10 @@ class Project { if (resetLayers) { // for (l in layers) l.unload(); var layer = new LayerSlot(); - UITrait.inst.layers = [layer]; - UITrait.inst.setLayer(layer); + layers = [layer]; + Context.setLayer(layer); if (UITrait.inst.projectType == 1) { - layer.material_mask = UITrait.inst.materials[0]; + layer.material_mask = materials[0]; Layers.updateFillLayers(4); } else { diff --git a/Sources/arm/data/LayerSlot.hx b/Sources/arm/data/LayerSlot.hx index 04a09c9e..946c7c64 100644 --- a/Sources/arm/data/LayerSlot.hx +++ b/Sources/arm/data/LayerSlot.hx @@ -180,7 +180,7 @@ class LayerSlot { g.begin(); iron.App.removeRender(clearMask); - UITrait.inst.layerPreviewDirty = true; + Context.layerPreviewDirty = true; createMaskColor = 0; createMaskImage = null; } @@ -222,7 +222,7 @@ class LayerSlot { } public function duplicate() { - var layers = UITrait.inst.layers; + var layers = Project.layers; var i = 0; while (i++ < layers.length) if (layers[i] == this) break; i++; diff --git a/Sources/arm/io/ExportArm.hx b/Sources/arm/io/ExportArm.hx index d96d421b..3c911071 100644 --- a/Sources/arm/io/ExportArm.hx +++ b/Sources/arm/io/ExportArm.hx @@ -14,7 +14,7 @@ using StringTools; class ExportArm { public static function run(path:String) { - var raw:TSceneFormat = { mesh_datas: [ UITrait.inst.paintObject.data.raw ] }; + var raw:TSceneFormat = { mesh_datas: [ Context.paintObject.data.raw ] }; var b = ArmPack.encode(raw); if (!path.endsWith(".arm")) path += ".arm"; #if kha_krom @@ -26,29 +26,29 @@ class ExportArm { var mnodes:Array = []; var bnodes:Array = []; - for (m in UITrait.inst.materials) { + for (m in Project.materials) { var c:TNodeCanvas = Json.parse(Json.stringify(UINodes.inst.canvasMap.get(m))); for (n in c.nodes) { if (n.type == "TEX_IMAGE") { // Convert image path from absolute to relative - var sameDrive = UITrait.inst.projectPath.charAt(0) == n.buttons[0].data.charAt(0); + var sameDrive = Project.filepath.charAt(0) == n.buttons[0].data.charAt(0); if (sameDrive) { - n.buttons[0].data = Path.toRelative(UITrait.inst.projectPath, n.buttons[0].data); + n.buttons[0].data = Path.toRelative(Project.filepath, n.buttons[0].data); } } } mnodes.push(c); } - for (b in UITrait.inst.brushes) bnodes.push(UINodes.inst.canvasBrushMap.get(b)); + for (b in Project.brushes) bnodes.push(UINodes.inst.canvasBrushMap.get(b)); var md:Array = []; - for (p in UITrait.inst.paintObjects) md.push(p.data.raw); + for (p in Context.paintObjects) md.push(p.data.raw); var asset_files:Array = []; - for (a in UITrait.inst.assets) { + for (a in Project.assets) { // Convert image path from absolute to relative - var sameDrive = UITrait.inst.projectPath.charAt(0) == a.file.charAt(0); + var sameDrive = Project.filepath.charAt(0) == a.file.charAt(0); if (sameDrive) { - asset_files.push(Path.toRelative(UITrait.inst.projectPath, a.file)); + asset_files.push(Path.toRelative(Project.filepath, a.file)); } else { asset_files.push(a.file); @@ -56,7 +56,7 @@ class ExportArm { } var ld:Array = []; - for (l in UITrait.inst.layers) { + for (l in Project.layers) { ld.push({ res: l.texpaint.width, texpaint: Lz4.encode(l.texpaint.getPixels()), @@ -64,12 +64,12 @@ class ExportArm { texpaint_pack: Lz4.encode(l.texpaint_pack.getPixels()), texpaint_mask: l.texpaint_mask != null ? Lz4.encode(l.texpaint_mask.getPixels()) : null, opacity_mask: l.maskOpacity, - material_mask: l.material_mask != null ? UITrait.inst.materials.indexOf(l.material_mask) : -1, + material_mask: l.material_mask != null ? Project.materials.indexOf(l.material_mask) : -1, object_mask: l.objectMask }); } - UITrait.inst.project = { + Project.raw = { version: App.version, material_nodes: mnodes, brush_nodes: bnodes, @@ -78,10 +78,10 @@ class ExportArm { assets: asset_files }; - var bytes = ArmPack.encode(UITrait.inst.project); + var bytes = ArmPack.encode(Project.raw); #if kha_krom - Krom.fileSaveBytes(UITrait.inst.projectPath, bytes.getData()); + Krom.fileSaveBytes(Project.filepath, bytes.getData()); #end } } diff --git a/Sources/arm/io/ExportObj.hx b/Sources/arm/io/ExportObj.hx index b7929ac0..4779e4a5 100644 --- a/Sources/arm/io/ExportObj.hx +++ b/Sources/arm/io/ExportObj.hx @@ -9,7 +9,7 @@ class ExportObj { public static function run(path:String) { var s = ""; var off = 0; - for (p in UITrait.inst.paintObjects) { + for (p in Context.paintObjects) { var mesh = p.data.raw; var sc = p.data.scalePos; var posa = mesh.vertex_arrays[0].values; diff --git a/Sources/arm/io/Exporter.hx b/Sources/arm/io/Exporter.hx index 428f7be0..6ba678da 100644 --- a/Sources/arm/io/Exporter.hx +++ b/Sources/arm/io/Exporter.hx @@ -60,7 +60,7 @@ class Exporter { var texpaint:Image = null; var texpaint_nor:Image = null; var texpaint_pack:Image = null; - var layers = UITrait.inst.layers; + var layers = Project.layers; // Export visible layers if (UITrait.inst.layersExport == 0 && layers.length > 1) { @@ -149,12 +149,12 @@ class Exporter { } // Export selected layer else { - var selectedLayer = UITrait.inst.selectedLayer; + var selectedLayer = Context.layer; texpaint = selectedLayer.texpaint; texpaint_nor = selectedLayer.texpaint_nor; texpaint_pack = selectedLayer.texpaint_pack; if (selectedLayer.objectMask > 0) { // Append object mask name - f += "_" + UITrait.inst.paintObjects[selectedLayer.objectMask].name; + f += "_" + Context.paintObjects[selectedLayer.objectMask].name; } } diff --git a/Sources/arm/io/ImportArm.hx b/Sources/arm/io/ImportArm.hx index 96ee6444..b8b956bf 100644 --- a/Sources/arm/io/ImportArm.hx +++ b/Sources/arm/io/ImportArm.hx @@ -26,11 +26,11 @@ class ImportArm { public static function run(project:TProjectFormat) { new MeshData(project.mesh_datas[0], function(md:MeshData) { - UITrait.inst.paintObject.setData(md); - UITrait.inst.paintObject.transform.scale.set(1, 1, 1); - UITrait.inst.paintObject.transform.buildMatrix(); - UITrait.inst.paintObject.name = md.name; - UITrait.inst.paintObjects = [UITrait.inst.paintObject]; + Context.paintObject.setData(md); + Context.paintObject.transform.scale.set(1, 1, 1); + Context.paintObject.transform.buildMatrix(); + Context.paintObject.name = md.name; + Context.paintObjects = [Context.paintObject]; iron.App.notifyOnRender(Layers.initLayers); History.reset(); }); @@ -39,12 +39,12 @@ class ImportArm { public static function runProject(path:String) { Data.getBlob(path, function(b:Blob) { - UITrait.inst.layersPreviewDirty = true; + Context.layersPreviewDirty = true; LayerSlot.counter = 0; var resetLayers = false; Project.projectNew(resetLayers); - UITrait.inst.projectPath = path; - App.filenameHandle.text = new haxe.io.Path(UITrait.inst.projectPath).file; + Project.filepath = path; + App.filenameHandle.text = new haxe.io.Path(Project.filepath).file; Window.get(0).title = App.filenameHandle.text + " - ArmorPaint"; var project:TProjectFormat = ArmPack.decode(b.toBytes()); @@ -54,7 +54,7 @@ class ImportArm { return; } - UITrait.inst.project = project; + Project.raw = project; var base = Path.baseDir(path); for (file in project.assets) { @@ -85,7 +85,7 @@ class ImportArm { m0 = m; }); - UITrait.inst.materials = []; + Project.materials = []; for (n in project.material_nodes) { for (node in n.nodes) { if (node.type == "TEX_IMAGE") { // Convert image path from relative to absolute @@ -102,52 +102,52 @@ class ImportArm { } var mat = new MaterialSlot(m0); UINodes.inst.canvasMap.set(mat, n); - UITrait.inst.materials.push(mat); + Project.materials.push(mat); - UITrait.inst.selectedMaterial = mat; + Context.material = mat; UINodes.inst.updateCanvasMap(); MaterialParser.parsePaintMaterial(); RenderUtil.makeMaterialPreview(); } - UITrait.inst.brushes = []; + Project.brushes = []; for (n in project.brush_nodes) { var brush = new BrushSlot(); UINodes.inst.canvasBrushMap.set(brush, n); - UITrait.inst.brushes.push(brush); + Project.brushes.push(brush); } // Synchronous for now new MeshData(project.mesh_datas[0], function(md:MeshData) { - UITrait.inst.paintObject.setData(md); - UITrait.inst.paintObject.transform.scale.set(1, 1, 1); - UITrait.inst.paintObject.transform.buildMatrix(); - UITrait.inst.paintObject.name = md.name; - UITrait.inst.paintObjects = [UITrait.inst.paintObject]; + Context.paintObject.setData(md); + Context.paintObject.transform.scale.set(1, 1, 1); + Context.paintObject.transform.buildMatrix(); + Context.paintObject.name = md.name; + Context.paintObjects = [Context.paintObject]; }); for (i in 1...project.mesh_datas.length) { var raw = project.mesh_datas[i]; new MeshData(raw, function(md:MeshData) { - var object = iron.Scene.active.addMeshObject(md, UITrait.inst.paintObject.materials, UITrait.inst.paintObject); + var object = iron.Scene.active.addMeshObject(md, Context.paintObject.materials, Context.paintObject); object.name = md.name; object.skip_context = "paint"; - UITrait.inst.paintObjects.push(object); + Context.paintObjects.push(object); }); } // No mask by default - if (UITrait.inst.mergedObject == null) MeshUtil.mergeMesh(); - UITrait.inst.selectPaintObject(UITrait.inst.mainObject()); + if (Context.mergedObject == null) MeshUtil.mergeMesh(); + Context.selectPaintObject(Context.mainObject()); ViewportUtil.scaleToBounds(); - UITrait.inst.paintObject.skip_context = "paint"; - UITrait.inst.mergedObject.visible = true; + Context.paintObject.skip_context = "paint"; + Context.mergedObject.visible = true; UITrait.inst.resHandle.position = Config.getTextureResPos(project.layer_datas[0].res); - if (UITrait.inst.layers[0].texpaint.width != Config.getTextureRes()) { - for (l in UITrait.inst.layers) l.resizeAndSetBits(); - if (UITrait.inst.undoLayers != null) for (l in UITrait.inst.undoLayers) l.resizeAndSetBits(); + if (Project.layers[0].texpaint.width != Config.getTextureRes()) { + for (l in Project.layers) l.resizeAndSetBits(); + if (History.undoLayers != null) for (l in History.undoLayers) l.resizeAndSetBits(); var rts = RenderPath.active.renderTargets; rts.get("texpaint_blend0").image.unload(); rts.get("texpaint_blend0").raw.width = Config.getTextureRes(); @@ -157,15 +157,15 @@ class ImportArm { rts.get("texpaint_blend1").raw.width = Config.getTextureRes(); rts.get("texpaint_blend1").raw.height = Config.getTextureRes(); rts.get("texpaint_blend1").image = Image.createRenderTarget(Config.getTextureRes(), Config.getTextureRes(), kha.graphics4.TextureFormat.L8, kha.graphics4.DepthStencilFormat.NoDepthAndStencil); - UITrait.inst.brushBlendDirty = true; + Context.brushBlendDirty = true; } - // for (l in UITrait.inst.layers) l.unload(); - UITrait.inst.layers = []; + // for (l in Project.layers) l.unload(); + Project.layers = []; for (i in 0...project.layer_datas.length) { var ld = project.layer_datas[i]; var l = new LayerSlot(); - UITrait.inst.layers.push(l); + Project.layers.push(l); // TODO: create render target from bytes var texpaint = Image.fromBytes(Lz4.decode(ld.texpaint, ld.res * ld.res * 4), ld.res, ld.res); @@ -196,12 +196,12 @@ class ImportArm { } l.maskOpacity = ld.opacity_mask; - l.material_mask = ld.material_mask > -1 ? UITrait.inst.materials[ld.material_mask] : null; + l.material_mask = ld.material_mask > -1 ? Project.materials[ld.material_mask] : null; l.objectMask = ld.object_mask; } - UITrait.inst.setLayer(UITrait.inst.layers[0]); + Context.setLayer(Project.layers[0]); - UITrait.inst.ddirty = 4; + Context.ddirty = 4; UITrait.inst.hwnd.redraws = 2; UITrait.inst.hwnd1.redraws = 2; UITrait.inst.hwnd2.redraws = 2; @@ -260,9 +260,9 @@ class ImportArm { } var mat = new MaterialSlot(m0); UINodes.inst.canvasMap.set(mat, n); - UITrait.inst.materials.push(mat); + Project.materials.push(mat); - UITrait.inst.selectedMaterial = mat; + Context.material = mat; UINodes.inst.updateCanvasMap(); MaterialParser.parsePaintMaterial(); RenderUtil.makeMaterialPreview(); diff --git a/Sources/arm/io/ImportBlend.hx b/Sources/arm/io/ImportBlend.hx index ff0655bb..ccd22afe 100644 --- a/Sources/arm/io/ImportBlend.hx +++ b/Sources/arm/io/ImportBlend.hx @@ -191,8 +191,8 @@ class ImportBlend { for (mat in mats) { // Material slot - UITrait.inst.selectedMaterial = new MaterialSlot(); - UITrait.inst.materials.push(UITrait.inst.selectedMaterial); + Context.material = new MaterialSlot(); + Project.materials.push(Context.material); UINodes.inst.updateCanvasMap(); var nodes = UINodes.inst.nodes; var canvas = UINodes.inst.canvas; diff --git a/Sources/arm/io/ImportEnvmap.hx b/Sources/arm/io/ImportEnvmap.hx index b0539518..e4670f7b 100644 --- a/Sources/arm/io/ImportEnvmap.hx +++ b/Sources/arm/io/ImportEnvmap.hx @@ -78,7 +78,7 @@ class ImportEnvmap { var buf = new Float32Array(27); for (i in 0...ar.length) buf[i] = Std.parseFloat(ar[i]); Scene.active.world.probe.irradiance = buf; - UITrait.inst.ddirty = 2; + Context.ddirty = 2; Data.deleteBlob(tmp + "tmp_irr.c"); }); @@ -107,7 +107,7 @@ class ImportEnvmap { image.setMipmaps(mips); Scene.active.world.probe.radiance = image; Scene.active.world.probe.radianceMipmaps = mips; - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } }, true); // Readable mw = Std.int(mw / 2); diff --git a/Sources/arm/io/ImportFolder.hx b/Sources/arm/io/ImportFolder.hx index cb723771..c5cfd80e 100644 --- a/Sources/arm/io/ImportFolder.hx +++ b/Sources/arm/io/ImportFolder.hx @@ -90,15 +90,15 @@ class ImportFolder { // Create material var isScene = UITrait.inst.worktab.position == SpaceScene; if (isScene) { - UITrait.inst.removeMaterialCache(); + Context.removeMaterialCache(); Data.getMaterial("Scene", "Material2", function(md:MaterialData) { - UITrait.inst.selectedMaterialScene = new MaterialSlot(md); - UITrait.inst.materialsScene.push(UITrait.inst.selectedMaterialScene); + Context.materialScene = new MaterialSlot(md); + Project.materialsScene.push(Context.materialScene); }); } else { - UITrait.inst.selectedMaterial = new MaterialSlot(); - UITrait.inst.materials.push(UITrait.inst.selectedMaterial); + Context.material = new MaterialSlot(); + Project.materials.push(Context.material); } UINodes.inst.updateCanvasMap(); var nodes = UINodes.inst.nodes; diff --git a/Sources/arm/io/ImportTexture.hx b/Sources/arm/io/ImportTexture.hx index ecc633d1..b9c39a0b 100644 --- a/Sources/arm/io/ImportTexture.hx +++ b/Sources/arm/io/ImportTexture.hx @@ -15,16 +15,16 @@ class ImportTexture { return; } - for (a in UITrait.inst.assets) if (a.file == path) { UITrait.inst.showMessage(Strings.info0); return; } + for (a in Project.assets) if (a.file == path) { UITrait.inst.showMessage(Strings.info0); return; } Data.getImage(path, function(image:Image) { var ar = path.split("/"); ar = ar[ar.length - 1].split("\\"); var name = ar[ar.length - 1]; - var asset:TAsset = {name: name, file: path, id: UITrait.inst.assetId++}; - UITrait.inst.assets.push(asset); - if (UITrait.inst.selectedTexture == null) UITrait.inst.selectedTexture = asset; - UITrait.inst.assetNames.push(name); + var asset:TAsset = {name: name, file: path, id: Project.assetId++}; + Project.assets.push(asset); + if (Context.texture == null) Context.texture = asset; + Project.assetNames.push(name); Canvas.assetMap.set(asset.id, image); UITrait.inst.hwnd2.redraws = 2; diff --git a/Sources/arm/io/Importer.hx b/Sources/arm/io/Importer.hx index 7144ad99..1d0f9feb 100644 --- a/Sources/arm/io/Importer.hx +++ b/Sources/arm/io/Importer.hx @@ -35,7 +35,7 @@ class Importer { var x0 = UINodes.inst.wx; var x1 = UINodes.inst.wx + UINodes.inst.ww; if (UINodes.inst.show && dropX > x0 && dropX < x1) { - UINodes.inst.acceptDrag(UITrait.inst.assets.length - 1); + UINodes.inst.acceptDrag(Project.assets.length - 1); UINodes.inst.nodes.nodesDrag = false; UINodes.inst.hwnd.redraws = 2; } @@ -72,31 +72,31 @@ class Importer { else if (p.endsWith(".fbx")) ImportFbx.run(path); else if (p.endsWith(".blend")) ImportBlend.run(path); - if (UITrait.inst.mergedObject != null) { - UITrait.inst.mergedObject.remove(); - Data.deleteMesh(UITrait.inst.mergedObject.data.handle); - UITrait.inst.mergedObject = null; + if (Context.mergedObject != null) { + Context.mergedObject.remove(); + Data.deleteMesh(Context.mergedObject.data.handle); + Context.mergedObject = null; } - UITrait.inst.selectPaintObject(UITrait.inst.mainObject()); + Context.selectPaintObject(Context.mainObject()); - if (UITrait.inst.paintObjects.length > 1) { + if (Context.paintObjects.length > 1) { // Sort by name - UITrait.inst.paintObjects.sort(function(a, b):Int { + Context.paintObjects.sort(function(a, b):Int { if (a.name < b.name) return -1; else if (a.name > b.name) return 1; return 0; }); // No mask by default - if (UITrait.inst.mergedObject == null) MeshUtil.mergeMesh(); - UITrait.inst.paintObject.skip_context = "paint"; - UITrait.inst.mergedObject.visible = true; + if (Context.mergedObject == null) MeshUtil.mergeMesh(); + Context.paintObject.skip_context = "paint"; + Context.mergedObject.visible = true; } ViewportUtil.scaleToBounds(); - if (UITrait.inst.paintObject.name == "") UITrait.inst.paintObject.name = "Object"; + if (Context.paintObject.name == "") Context.paintObject.name = "Object"; UIView2D.inst.hwnd.redraws = 2; @@ -164,7 +164,7 @@ class Importer { // Append if (UITrait.inst.worktab.position == SpaceScene) { var mats = new haxe.ds.Vector(1); - mats[0] = UITrait.inst.selectedMaterialScene.data; + mats[0] = Context.materialScene.data; var object = Scene.active.addMeshObject(md, mats, Scene.active.getChild("Scene")); path = path.replace("\\", "/"); var ar = path.split("/"); @@ -182,43 +182,43 @@ class Importer { object.addTrait(new armory.trait.physics.RigidBody(0.0)); #end - UITrait.inst.selectObject(object); + Context.selectObject(object); } // Replace else { - UITrait.inst.paintObject = UITrait.inst.mainObject(); + Context.paintObject = Context.mainObject(); - UITrait.inst.selectPaintObject(UITrait.inst.mainObject()); - for (i in 0...UITrait.inst.paintObjects.length) { - var p = UITrait.inst.paintObjects[i]; - if (p == UITrait.inst.paintObject) continue; + Context.selectPaintObject(Context.mainObject()); + for (i in 0...Context.paintObjects.length) { + var p = Context.paintObjects[i]; + if (p == Context.paintObject) continue; Data.deleteMesh(p.data.handle); p.remove(); } - var handle = UITrait.inst.paintObject.data.handle; + var handle = Context.paintObject.data.handle; if (handle != "SceneSphere" && handle != "ScenePlane") { Data.deleteMesh(handle); } - while (UITrait.inst.layers.length > 1) { var l = UITrait.inst.layers.pop(); l.unload(); } - UITrait.inst.setLayer(UITrait.inst.layers[0]); + while (Project.layers.length > 1) { var l = Project.layers.pop(); l.unload(); } + Context.setLayer(Project.layers[0]); iron.App.notifyOnRender(Layers.initLayers); History.reset(); - UITrait.inst.paintObject.setData(md); - UITrait.inst.paintObject.name = mesh.name; + Context.paintObject.setData(md); + Context.paintObject.name = mesh.name; - var g = UITrait.inst.paintObject.data.geom; + var g = Context.paintObject.data.geom; var posbuf = g.vertexBufferMap.get("pos"); if (posbuf != null) { // Remove cache posbuf.delete(); g.vertexBufferMap.remove("pos"); } - UITrait.inst.paintObjects = [UITrait.inst.paintObject]; + Context.paintObjects = [Context.paintObject]; } - UITrait.inst.ddirty = 4; + Context.ddirty = 4; UITrait.inst.hwnd.redraws = 2; UITrait.inst.hwnd1.redraws = 2; UITrait.inst.hwnd2.redraws = 2; @@ -260,13 +260,13 @@ class Importer { new MeshData(raw, function(md:MeshData) { - var object = Scene.active.addMeshObject(md, UITrait.inst.paintObject.materials, UITrait.inst.paintObject); + var object = Scene.active.addMeshObject(md, Context.paintObject.materials, Context.paintObject); object.name = mesh.name; object.skip_context = "paint"; - UITrait.inst.paintObjects.push(object); + Context.paintObjects.push(object); - UITrait.inst.ddirty = 4; + Context.ddirty = 4; UITrait.inst.hwnd.redraws = 2; UVUtil.uvmapCached = false; UVUtil.trianglemapCached = false; diff --git a/Sources/arm/nodes/MaterialBuilder.hx b/Sources/arm/nodes/MaterialBuilder.hx index 5bc66e63..81e2ce6c 100644 --- a/Sources/arm/nodes/MaterialBuilder.hx +++ b/Sources/arm/nodes/MaterialBuilder.hx @@ -13,8 +13,8 @@ class MaterialBuilder { public static var subsUsed = false; public static function make_paint(data:CyclesShaderData, matcon:TMaterialContext):CyclesShaderContext { - var layered = UITrait.inst.selectedLayer != UITrait.inst.layers[0]; - var eraser = UITrait.inst.selectedTool == ToolEraser; + var layered = Context.layer != Project.layers[0]; + var eraser = Context.tool == ToolEraser; var context_id = 'paint'; var con_paint:CyclesShaderContext = data.add_context({ name: context_id, @@ -30,7 +30,7 @@ class MaterialBuilder { con_paint.data.color_writes_blue = [true, true, true, true]; con_paint.data.color_writes_alpha = [true, true, true, true]; - if (UITrait.inst.selectedTool == ToolBake) { + if (Context.tool == ToolBake) { if (UITrait.inst.bakeType == 0) { // AO con_paint.data.color_writes_red[0] = false; con_paint.data.color_writes_green[0] = false; @@ -65,7 +65,7 @@ class MaterialBuilder { var frag = con_paint.make_frag(); frag.ins = vert.outs; - if (UITrait.inst.selectedTool == ToolColorId || UITrait.inst.selectedTool == ToolPicker) { + if (Context.tool == ToolColorId || Context.tool == ToolPicker) { // Mangle vertices to form full screen triangle vert.write('gl_Position = vec4(-1.0 + float((gl_VertexID & 1) << 2), -1.0 + float((gl_VertexID & 2) << 1), 0.0, 1.0);'); @@ -79,13 +79,13 @@ class MaterialBuilder { frag.write('vec2 texCoordInp = texelFetch(gbuffer2, ivec2(inp.x * gbufferSize.x, inp.y * gbufferSize.y), 0).ba;'); #end - if (UITrait.inst.selectedTool == ToolColorId) { + if (Context.tool == ToolColorId) { frag.add_out('vec4 fragColor'); frag.add_uniform('sampler2D texcolorid', '_texcolorid'); frag.write('vec3 idcol = textureLod(texcolorid, texCoordInp, 0.0).rgb;'); frag.write('fragColor = vec4(idcol, 1.0);'); } - else if (UITrait.inst.selectedTool == ToolPicker) { + else if (Context.tool == ToolPicker) { frag.add_out('vec4 fragColor[3]'); frag.add_uniform('sampler2D texpaint'); frag.add_uniform('sampler2D texpaint_nor'); @@ -101,8 +101,8 @@ class MaterialBuilder { return con_paint; } - var faceFill = UITrait.inst.selectedTool == ToolFill && UITrait.inst.fillTypeHandle.position == 1; - var decal = UITrait.inst.selectedTool == ToolDecal || UITrait.inst.selectedTool == ToolText; + var faceFill = Context.tool == ToolFill && UITrait.inst.fillTypeHandle.position == 1; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; if (!faceFill && !decal) { // Fix seams at uv borders vert.add_uniform('vec2 sub', '_sub'); vert.write('vec2 subtex = tex + sub;'); @@ -129,7 +129,7 @@ class MaterialBuilder { if (UITrait.inst.brushPaint == 1) frag.ndcpos = true; // Project - if (UITrait.inst.selectedTool == ToolBake) { + if (Context.tool == ToolBake) { if (UITrait.inst.bakeType == 0) { // AO frag.wposition = true; frag.n = true; @@ -157,11 +157,11 @@ class MaterialBuilder { frag.add_uniform('float brushOpacity', '_brushOpacity'); frag.add_uniform('float brushHardness', '_brushHardness'); - if (UITrait.inst.selectedTool == ToolBrush || - UITrait.inst.selectedTool == ToolEraser || - UITrait.inst.selectedTool == ToolClone || - UITrait.inst.selectedTool == ToolBlur || - UITrait.inst.selectedTool == ToolParticle || + if (Context.tool == ToolBrush || + Context.tool == ToolEraser || + Context.tool == ToolClone || + Context.tool == ToolBlur || + Context.tool == ToolParticle || decal) { var depthReject = !UITrait.inst.xray; @@ -178,7 +178,7 @@ class MaterialBuilder { #end } - if (decal || UITrait.inst.selectedTool == ToolParticle) { + if (decal || Context.tool == ToolParticle) { frag.write('float dist = 0.0;'); } else { @@ -264,7 +264,7 @@ class MaterialBuilder { else { // Fill, Bake frag.write('float dist = 0.0;'); - var angleFill = UITrait.inst.selectedTool == ToolFill && UITrait.inst.fillTypeHandle.position == 2; + var angleFill = Context.tool == ToolFill && UITrait.inst.fillTypeHandle.position == 2; if (angleFill) { frag.add_function(CyclesFunctions.str_octahedronWrap); frag.add_uniform('sampler2D gbuffer0'); @@ -366,7 +366,7 @@ class MaterialBuilder { frag.write_attrib('vec2 texCoord2 = fract(wposition.xy * brushScale);'); } - if (UITrait.inst.selectedTool == ToolClone || UITrait.inst.selectedTool == ToolBlur) { + if (Context.tool == ToolClone || Context.tool == ToolBlur) { frag.add_uniform('sampler2D gbuffer2'); frag.add_uniform('vec2 gbufferSize', '_gbufferSize'); @@ -374,7 +374,7 @@ class MaterialBuilder { frag.add_uniform('sampler2D texpaint_nor_undo', '_texpaint_nor_undo'); frag.add_uniform('sampler2D texpaint_pack_undo', '_texpaint_pack_undo'); - if (UITrait.inst.selectedTool == ToolClone) { + if (Context.tool == ToolClone) { frag.add_uniform('vec2 cloneDelta', '_cloneDelta'); #if (kha_opengl || kha_webgl) frag.write('vec2 texCoordInp = texelFetch(gbuffer2, ivec2((sp.x + cloneDelta.x) * gbufferSize.x, (1.0 - (sp.y + cloneDelta.y)) * gbufferSize.y), 0).ba;'); @@ -397,10 +397,10 @@ class MaterialBuilder { frag.write('vec3 nortan = $nortan;'); frag.write('float height = $height;'); frag.write('float opacity = $opac * brushOpacity;'); - if (UITrait.inst.selectedMaterial.paintEmis) { + if (Context.material.paintEmis) { frag.write('float emis = 0.0;'); } - if (UITrait.inst.selectedMaterial.paintSubs) { + if (Context.material.paintSubs) { frag.write('float subs = 0.0;'); } } @@ -418,10 +418,10 @@ class MaterialBuilder { frag.write('vec3 nortan = vec3(0.0, 0.0, 0.0);'); frag.write('float height = 0.0;'); frag.write('float opacity = 1.0 * brushOpacity;'); - if (UITrait.inst.selectedMaterial.paintEmis) { + if (Context.material.paintEmis) { frag.write('float emis = 0.0;'); } - if (UITrait.inst.selectedMaterial.paintSubs) { + if (Context.material.paintSubs) { frag.write('float subs = 0.0;'); } #if kha_direct3d11 @@ -450,9 +450,9 @@ class MaterialBuilder { } } else { - Cycles.parse_emission = UITrait.inst.selectedMaterial.paintEmis; - Cycles.parse_subsurface = UITrait.inst.selectedMaterial.paintSubs; - Cycles.parse_height = UITrait.inst.selectedMaterial.paintHeight; + Cycles.parse_emission = Context.material.paintEmis; + Cycles.parse_subsurface = Context.material.paintSubs; + Cycles.parse_height = Context.material.paintHeight; Cycles.parse_height_as_channel = true; Cycles.triplanar = UITrait.inst.brushPaint == 2; var sout = Cycles.parse(UINodes.inst.canvas, con_paint, vert, frag, null, null, null, matcon); @@ -476,10 +476,10 @@ class MaterialBuilder { frag.write('vec3 nortan = $nortan;'); frag.write('float height = $height;'); frag.write('float opacity = $opac * brushOpacity;'); - if (UITrait.inst.selectedMaterial.paintEmis) { + if (Context.material.paintEmis) { frag.write('float emis = $emis;'); } - if (UITrait.inst.selectedMaterial.paintSubs) { + if (Context.material.paintSubs) { frag.write('float subs = $subs;'); } if (height != '0' && !heightUsed) { @@ -491,16 +491,16 @@ class MaterialBuilder { if (subs != '0') subsUsed = true; } - if (UITrait.inst.selectedTool == ToolDecal) { + if (Context.tool == ToolDecal) { frag.add_uniform('sampler2D texdecalmask', '_texdecalmask'); frag.write('opacity *= textureLod(texdecalmask, texCoord, 0.0).r;'); } - else if (UITrait.inst.selectedTool == ToolText) { + else if (Context.tool == ToolText) { frag.add_uniform('sampler2D textexttool', '_textexttool'); frag.write('opacity *= textureLod(textexttool, texCoord, 0.0).r;'); } - if (UITrait.inst.selectedTool == ToolParticle) { // particle mask + if (Context.tool == ToolParticle) { // particle mask frag.add_uniform('sampler2D texparticle', '_texparticle'); #if (kha_opengl || kha_webgl) frag.write('float str = textureLod(texparticle, vec2(sp.x, (1.0 - sp.y)), 0).r;'); @@ -525,7 +525,7 @@ class MaterialBuilder { frag.add_uniform('sampler2D texpaint_undo', '_texpaint_undo'); frag.write('vec4 sample_undo = textureLod(texpaint_undo, sample_tc, 0.0);'); - var matid = UITrait.inst.selectedMaterial.id / 255; + var matid = Context.material.id / 255; if (UITrait.inst.pickerMaskHandle.position == 1) { // material id mask matid = UITrait.inst.materialIdPicked / 255; // Keep existing material id in place when mask is set } @@ -533,10 +533,10 @@ class MaterialBuilder { // TODO: Use emission/subsurface matid // matid % 3 == 0 - normal, 1 - emission, 2 - subsurface - if (UITrait.inst.selectedMaterial.paintSubs) { + if (Context.material.paintSubs) { frag.write('if (subs > 0) { matid = 254 / 255; }'); } - if (UITrait.inst.selectedMaterial.paintEmis) { + if (Context.material.paintEmis) { frag.write('if (emis > 0) { matid = 255 / 255; }'); } @@ -558,7 +558,7 @@ class MaterialBuilder { frag.write('fragColor[1] = vec4(nortan, matid);'); var height = '0.0'; - if (UITrait.inst.selectedMaterial.paintHeight && heightUsed) { + if (Context.material.paintHeight && heightUsed) { height = 'height'; } @@ -586,7 +586,7 @@ class MaterialBuilder { frag.write('fragColor[0] = vec4(mix(sample_undo.rgb, basecol, str), 0.0);'); frag.write('fragColor[1] = vec4(mix(sample_nor_undo.rgb, nortan, str), matid);'); - if (UITrait.inst.selectedMaterial.paintHeight && heightUsed) { + if (Context.material.paintHeight && heightUsed) { frag.write('fragColor[2] = mix(sample_pack_undo, vec4(occlusion, roughness, metallic, height), str);'); } else { @@ -596,31 +596,31 @@ class MaterialBuilder { } frag.write('fragColor[3] = vec4(str, 0.0, 0.0, 1.0);'); - if (!UITrait.inst.selectedMaterial.paintBase) { + if (!Context.material.paintBase) { con_paint.data.color_writes_red[0] = false; con_paint.data.color_writes_green[0] = false; con_paint.data.color_writes_blue[0] = false; } - if (!UITrait.inst.selectedMaterial.paintNor) { + if (!Context.material.paintNor) { con_paint.data.color_writes_red[1] = false; con_paint.data.color_writes_green[1] = false; con_paint.data.color_writes_blue[1] = false; } - if (!UITrait.inst.selectedMaterial.paintOcc) { + if (!Context.material.paintOcc) { con_paint.data.color_writes_red[2] = false; } - if (!UITrait.inst.selectedMaterial.paintRough) { + if (!Context.material.paintRough) { con_paint.data.color_writes_green[2] = false; } - if (!UITrait.inst.selectedMaterial.paintMet) { + if (!Context.material.paintMet) { con_paint.data.color_writes_blue[2] = false; } - if (!UITrait.inst.selectedMaterial.paintHeight) { + if (!Context.material.paintHeight) { con_paint.data.color_writes_alpha[2] = false; } // Base color only as mask - var isMask = UITrait.inst.selectedLayerIsMask; + var isMask = Context.layerIsMask; if (isMask) { // TODO: Apply opacity into base // frag.write('fragColor[0].rgb *= fragColor[0].a;'); @@ -633,7 +633,7 @@ class MaterialBuilder { con_paint.data.color_writes_alpha[2] = false; } - if (UITrait.inst.selectedTool == ToolBake) { + if (Context.tool == ToolBake) { if (UITrait.inst.bakeType == 0) { // AO // Apply normal channel frag.vVec = true; @@ -728,11 +728,11 @@ class MaterialBuilder { var decal = UITrait.inst.decalPreview; if (decal) { - if (UITrait.inst.selectedTool == ToolDecal) { + if (Context.tool == ToolDecal) { frag.add_uniform('sampler2D texdecalmask', '_texdecalmask'); frag.write('opacity *= textureLod(texdecalmask, texCoord, 0.0).r;'); } - else if (UITrait.inst.selectedTool == ToolText) { + else if (Context.tool == ToolText) { frag.add_uniform('sampler2D textexttool', '_textexttool'); frag.write('opacity *= textureLod(textexttool, texCoord, 0.0).r;'); } @@ -887,7 +887,7 @@ class MaterialBuilder { vert.n = true; vert.write('float height = 0.0;'); var numLayers = 0; - for (l in UITrait.inst.layers) { + for (l in Project.layers) { if (!l.visible) continue; if (numLayers > 16) break; numLayers++; @@ -915,7 +915,7 @@ class MaterialBuilder { frag.add_function(CyclesFunctions.str_packFloat); frag.add_function(CyclesFunctions.str_packFloat2); - if (UITrait.inst.selectedTool == ToolColorId) { + if (Context.tool == ToolColorId) { 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(textureLod(texcolorid, texCoord, 0.0).rgb, vec3(2.2, 2.2, 2.2));'); @@ -940,9 +940,9 @@ class MaterialBuilder { frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);'); #end - if (UITrait.inst.layers[0].visible) { + if (Project.layers[0].visible) { - if (UITrait.inst.selectedLayer.paintBase) { + if (Context.layer.paintBase) { frag.add_shared_sampler('sampler2D texpaint'); frag.write('basecol = pow(textureLodShared(texpaint, texCoord, 0.0).rgb, vec3(2.2, 2.2, 2.2));'); } @@ -950,7 +950,7 @@ class MaterialBuilder { frag.write('basecol = vec3(0.0, 0.0, 0.0);'); } - if (UITrait.inst.selectedLayer.paintNor || + if (Context.layer.paintNor || emisUsed) { frag.add_shared_sampler('sampler2D texpaint_nor'); frag.write('vec4 texpaint_nor_sample = textureLodShared(texpaint_nor, texCoord, 0.0);'); @@ -959,7 +959,7 @@ class MaterialBuilder { frag.write('matid = texpaint_nor_sample.a;'); } - if (UITrait.inst.selectedLayer.paintNor) { + if (Context.layer.paintNor) { frag.write('vec3 ntex = texpaint_nor_sample.rgb;'); frag.write('n = ntex * 2.0 - 1.0;'); frag.write('n.y = -n.y;'); @@ -968,9 +968,9 @@ class MaterialBuilder { } if (heightUsed || - UITrait.inst.selectedLayer.paintOcc || - UITrait.inst.selectedLayer.paintRough || - UITrait.inst.selectedLayer.paintMet) { + Context.layer.paintOcc || + Context.layer.paintRough || + Context.layer.paintMet) { frag.add_shared_sampler('sampler2D texpaint_pack'); frag.write('vec4 pack = textureLodShared(texpaint_pack, texCoord, 0.0);'); } @@ -991,26 +991,26 @@ class MaterialBuilder { } // - if (UITrait.inst.selectedLayer.paintOcc) { + if (Context.layer.paintOcc) { frag.write('occlusion = pack.r;'); } else { frag.write('occlusion = 1.0;'); } - if (UITrait.inst.selectedLayer.paintRough) { + if (Context.layer.paintRough) { frag.write('roughness = pack.g;'); } else { frag.write('roughness = 1.0;'); } - if (UITrait.inst.selectedLayer.paintMet) { + if (Context.layer.paintMet) { frag.write('metallic = pack.b;'); } else { frag.write('metallic = 0.0;'); } - var l = UITrait.inst.layers[0]; + var l = Project.layers[0]; if (l.maskOpacity < 1) { frag.write('basecol *= ${l.maskOpacity};'); frag.write('occlusion *= ${l.maskOpacity};'); @@ -1026,15 +1026,15 @@ class MaterialBuilder { frag.write('specular = 1.0;'); } - if (UITrait.inst.layers.length > 1) { + if (Project.layers.length > 1) { frag.write('float factor0;'); frag.write('vec4 col_tex0;'); frag.write('vec4 col_nor0;'); frag.write('vec4 col_pack0;'); frag.write('vec3 n0;'); var numLayers = 1; - for (i in 1...UITrait.inst.layers.length) { - var l = UITrait.inst.layers[i]; + for (i in 1...Project.layers.length) { + var l = Project.layers[i]; if (!l.visible) continue; #if kha_direct3d11 // 128 texture slots available @@ -1050,7 +1050,7 @@ class MaterialBuilder { var id = l.id; if (l.objectMask > 0) { - var uid = UITrait.inst.paintObjects[l.objectMask - 1].uid; + var uid = Context.paintObjects[l.objectMask - 1].uid; frag.add_uniform('int objectId', '_uid'); frag.write('if ($uid == objectId) {'); } @@ -1067,12 +1067,12 @@ class MaterialBuilder { frag.write('factor0 *= ${l.maskOpacity};'); } - if (UITrait.inst.selectedLayer.paintBase) { + if (Context.layer.paintBase) { frag.write('basecol = mix(basecol, pow(col_tex0.rgb, vec3(2.2, 2.2, 2.2)), factor0);'); } if (emisUsed || - UITrait.inst.selectedLayer.paintNor) { + Context.layer.paintNor) { frag.add_shared_sampler('sampler2D texpaint_nor' + id); frag.write('col_nor0 = textureLodShared(texpaint_nor' + id + ', texCoord, 0.0);'); @@ -1081,7 +1081,7 @@ class MaterialBuilder { frag.write('matid = col_nor0.a;'); } - if (UITrait.inst.selectedLayer.paintNor) { + if (Context.layer.paintNor) { frag.write('n0 = col_nor0.rgb * 2.0 - 1.0;'); frag.write('n0.y = -n0.y;'); frag.write('n0 = normalize(mul(n0, TBN));'); @@ -1089,19 +1089,19 @@ class MaterialBuilder { } } - if (UITrait.inst.selectedLayer.paintOcc || - UITrait.inst.selectedLayer.paintRough || - UITrait.inst.selectedLayer.paintMet) { + if (Context.layer.paintOcc || + Context.layer.paintRough || + Context.layer.paintMet) { frag.add_shared_sampler('sampler2D texpaint_pack' + id); frag.write('col_pack0 = textureLodShared(texpaint_pack' + id + ', texCoord, 0.0);'); - if (UITrait.inst.selectedLayer.paintOcc) { + if (Context.layer.paintOcc) { frag.write('occlusion = mix(occlusion, col_pack0.r, factor0);'); } - if (UITrait.inst.selectedLayer.paintRough) { + if (Context.layer.paintRough) { frag.write('roughness = mix(roughness, col_pack0.g, factor0);'); } - if (UITrait.inst.selectedLayer.paintMet) { + if (Context.layer.paintMet) { frag.write('metallic = mix(metallic, col_pack0.b, factor0);'); } } @@ -1169,7 +1169,7 @@ class MaterialBuilder { else if (UITrait.inst.viewportMode == 9) { // Mask frag.write('fragColor[0] = vec4(n.xy, packFloat(0.0, 1.0), 0.0);'); frag.write('float sample_mask = 1.0;'); - if (UITrait.inst.selectedLayer.texpaint_mask != null) { + if (Context.layer.texpaint_mask != null) { frag.add_uniform('sampler2D texpaint_mask_view', '_texpaint_mask'); frag.write('sample_mask = textureLod(texpaint_mask_view, texCoord, 0.0).r;'); } diff --git a/Sources/arm/nodes/MaterialParser.hx b/Sources/arm/nodes/MaterialParser.hx index b60218e8..a3714e1a 100644 --- a/Sources/arm/nodes/MaterialParser.hx +++ b/Sources/arm/nodes/MaterialParser.hx @@ -21,7 +21,7 @@ class MaterialParser { public static function parseMeshMaterial() { if (UITrait.inst.worktab.position == SpaceScene) return; - var m = UITrait.inst.materials[0].data; + var m = Project.materials[0].data; // iron.data.Data.getMaterial("Scene", "Material", function(m:iron.data.MaterialData) { var sc:ShaderContext = null; for (c in m.shader.contexts) if (c.raw.name == "mesh") { sc = c; break; } @@ -36,7 +36,7 @@ class MaterialParser { sc.overrideContext.shared_sampler = true; m.shader.raw.contexts.push(sc.raw); m.shader.contexts.push(sc); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; #if rp_voxelao if (MaterialBuilder.heightUsed && Config.raw.rp_gi != false) { @@ -68,7 +68,7 @@ class MaterialParser { public static function parseMeshPreviewMaterial() { if (!getMOut()) return; - var m = UITrait.inst.worktab.position == SpaceScene ? UITrait.inst.selectedMaterialScene.data : UITrait.inst.materials[0].data; + var m = UITrait.inst.worktab.position == SpaceScene ? Context.materialScene.data : Project.materials[0].data; // iron.data.Data.getMaterial("Scene", "Material", function(m:iron.data.MaterialData) { var sc:ShaderContext = null; @@ -111,7 +111,7 @@ class MaterialParser { } // - var m = UITrait.inst.materials[0].data; + var m = Project.materials[0].data; sc = null; _materialcontext = null; // diff --git a/Sources/arm/nodes/brush/BrushOutputNode.hx b/Sources/arm/nodes/brush/BrushOutputNode.hx index 4207fb96..fa95fdd0 100644 --- a/Sources/arm/nodes/brush/BrushOutputNode.hx +++ b/Sources/arm/nodes/brush/BrushOutputNode.hx @@ -42,7 +42,7 @@ class BrushOutputNode extends LogicNode { @:privateAccess UIView2D.inst.ui.comboSelectedHandle == null) { // Header combos are in use // Set color pick var down = iron.system.Input.getMouse().down() || iron.system.Input.getPen().down(); - if (UITrait.inst.selectedTool == ToolColorId && UITrait.inst.assets.length > 0 && down) { + if (Context.tool == ToolColorId && Project.assets.length > 0 && down) { UITrait.inst.colorIdPicked = true; } // Prevent painting the same spot @@ -55,16 +55,16 @@ class BrushOutputNode extends LogicNode { UITrait.inst.lastPaintX = UITrait.inst.paintVec.x; UITrait.inst.lastPaintY = UITrait.inst.paintVec.y; - if (UITrait.inst.selectedTool == ToolParticle) { + if (Context.tool == ToolParticle) { UITrait.inst.painted = 0; // Always paint particles } - var decal = UITrait.inst.selectedTool == ToolDecal || UITrait.inst.selectedTool == ToolText; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; var paintFrames = decal ? 1 : 4; if (UITrait.inst.painted <= paintFrames) { - UITrait.inst.pdirty = 1; - UITrait.inst.rdirty = 2; + Context.pdirty = 1; + Context.rdirty = 2; } } diff --git a/Sources/arm/plugin/Camera.hx b/Sources/arm/plugin/Camera.hx index 7d27fd2d..48ea7a33 100644 --- a/Sources/arm/plugin/Camera.hx +++ b/Sources/arm/plugin/Camera.hx @@ -61,7 +61,7 @@ class Camera { if ((mouse.down("right") && !kb.down("space")) || (mouse.down("left") && kb.down("control"))) { redraws = 2; - var t = UITrait.inst.selectedObject.transform; + var t = Context.object.transform; // Rotate X var up = t.up().normalize(); @@ -158,7 +158,7 @@ class Camera { var d = Time.delta * speed * fast * ease; if (d > 0.0) { - UITrait.inst.ddirty = 2; + Context.ddirty = 2; camera.transform.move(dir, d); if (UITrait.inst.cameraType == 1) { @@ -167,7 +167,7 @@ class Camera { } if (mouse.down("right")) { - UITrait.inst.ddirty = 2; + Context.ddirty = 2; camera.transform.rotate(Vec4.zAxis(), -mouse.movementX / 200); camera.transform.rotate(camera.right(), -mouse.movementY / 200); } @@ -175,7 +175,7 @@ class Camera { if (redraws > 0) { redraws--; - UITrait.inst.ddirty = 2; + Context.ddirty = 2; if (UITrait.inst.cameraType == 1) { ViewportUtil.updateCameraType(UITrait.inst.cameraType); diff --git a/Sources/arm/plugin/Gizmo.hx b/Sources/arm/plugin/Gizmo.hx index b2ee2832..c5f54f66 100644 --- a/Sources/arm/plugin/Gizmo.hx +++ b/Sources/arm/plugin/Gizmo.hx @@ -14,8 +14,8 @@ class Gizmo { var gizmo = UITrait.inst.gizmo; if (!gizmo.visible) return; - if (UITrait.inst.selectedObject != null) { - gizmo.transform.loc.setFrom(UITrait.inst.selectedObject.transform.loc); + if (Context.object != null) { + gizmo.transform.loc.setFrom(Context.object.transform.loc); gizmo.transform.buildMatrix(); } @@ -24,14 +24,14 @@ class Gizmo { if (mouse.x < App.w()) { if (kb.started("delete") || kb.started("backspace")) { - if (UITrait.inst.selectedObject != null) { - UITrait.inst.selectedObject.remove(); - UITrait.inst.selectObject(Scene.active.getChild("Scene")); + if (Context.object != null) { + Context.object.remove(); + Context.selectObject(Scene.active.getChild("Scene")); } } - if (kb.started("c") && UITrait.inst.selectedObject != null) { - if (Std.is(UITrait.inst.selectedObject, MeshObject)) { - var mo = cast(UITrait.inst.selectedObject, MeshObject); + if (kb.started("c") && Context.object != null) { + if (Std.is(Context.object, MeshObject)) { + var mo = cast(Context.object, MeshObject); var object = Scene.active.addMeshObject(mo.data, mo.materials, Scene.active.getChild("Scene")); object.name = mo.name + '.1'; @@ -52,10 +52,10 @@ class Gizmo { object.addTrait(new armory.trait.physics.RigidBody(0, 0)); #end - UITrait.inst.selectObject(object); + Context.selectObject(object); } - else if (Std.is(UITrait.inst.selectedObject, LightObject)) { - var lo = cast(UITrait.inst.selectedObject, LightObject); + else if (Std.is(Context.object, LightObject)) { + var lo = cast(Context.object, LightObject); var object = Scene.active.addLightObject(lo.data, Scene.active.getChild("Scene")); object.name = lo.name + '.1'; @@ -68,12 +68,12 @@ class Gizmo { object.addTrait(new armory.trait.physics.RigidBody(0, 0)); #end - UITrait.inst.selectObject(object); + Context.selectObject(object); } } if (kb.started("m")) { // skip voxel - UITrait.inst.selectedMaterialScene.data.raw.skip_context = - UITrait.inst.selectedMaterialScene.data.raw.skip_context == '' ? 'voxel' : ''; + Context.materialScene.data.raw.skip_context = + Context.materialScene.data.raw.skip_context == '' ? 'voxel' : ''; } } @@ -81,11 +81,11 @@ class Gizmo { #if arm_physics var physics = armory.trait.physics.PhysicsWorld.active; var rb = physics.pickClosest(mouse.x, mouse.y); - if (rb != null) UITrait.inst.selectObject(rb.object); + if (rb != null) Context.selectObject(rb.object); #end } - if (mouse.started("left") && UITrait.inst.selectedObject.name != "Scene") { + if (mouse.started("left") && Context.object.name != "Scene") { gizmo.transform.buildMatrix(); var trs = [UITrait.inst.gizmoX.transform, UITrait.inst.gizmoY.transform, UITrait.inst.gizmoZ.transform]; var hit = RayCaster.closestBoxIntersect(trs, mouse.x, mouse.y, Scene.active.camera); @@ -101,18 +101,18 @@ class Gizmo { } if (UITrait.inst.axisX || UITrait.inst.axisY || UITrait.inst.axisZ) { - var t = UITrait.inst.selectedObject.transform; + var t = Context.object.transform; var v = new Vec4(); v.set(t.worldx(), t.worldy(), t.worldz()); if (UITrait.inst.axisX) { var hit = RayCaster.planeIntersect(Vec4.yAxis(), v, mouse.x, mouse.y, Scene.active.camera); if (hit != null) { - if (UITrait.inst.axisStart == 0) UITrait.inst.axisStart = hit.x - UITrait.inst.selectedObject.transform.loc.x; - UITrait.inst.selectedObject.transform.loc.x = hit.x - UITrait.inst.axisStart; - UITrait.inst.selectedObject.transform.buildMatrix(); + if (UITrait.inst.axisStart == 0) UITrait.inst.axisStart = hit.x - Context.object.transform.loc.x; + Context.object.transform.loc.x = hit.x - UITrait.inst.axisStart; + Context.object.transform.buildMatrix(); #if arm_physics - var rb = UITrait.inst.selectedObject.getTrait(armory.trait.physics.RigidBody); + var rb = Context.object.getTrait(armory.trait.physics.RigidBody); if (rb != null) rb.syncTransform(); #end } @@ -120,11 +120,11 @@ class Gizmo { else if (UITrait.inst.axisY) { var hit = RayCaster.planeIntersect(Vec4.xAxis(), v, mouse.x, mouse.y, Scene.active.camera); if (hit != null) { - if (UITrait.inst.axisStart == 0) UITrait.inst.axisStart = hit.y - UITrait.inst.selectedObject.transform.loc.y; - UITrait.inst.selectedObject.transform.loc.y = hit.y - UITrait.inst.axisStart; - UITrait.inst.selectedObject.transform.buildMatrix(); + if (UITrait.inst.axisStart == 0) UITrait.inst.axisStart = hit.y - Context.object.transform.loc.y; + Context.object.transform.loc.y = hit.y - UITrait.inst.axisStart; + Context.object.transform.buildMatrix(); #if arm_physics - var rb = UITrait.inst.selectedObject.getTrait(armory.trait.physics.RigidBody); + var rb = Context.object.getTrait(armory.trait.physics.RigidBody); if (rb != null) rb.syncTransform(); #end } @@ -132,11 +132,11 @@ class Gizmo { else if (UITrait.inst.axisZ) { var hit = RayCaster.planeIntersect(Vec4.xAxis(), v, mouse.x, mouse.y, Scene.active.camera); if (hit != null) { - if (UITrait.inst.axisStart == 0) UITrait.inst.axisStart = hit.z - UITrait.inst.selectedObject.transform.loc.z; - UITrait.inst.selectedObject.transform.loc.z = hit.z - UITrait.inst.axisStart; - UITrait.inst.selectedObject.transform.buildMatrix(); + if (UITrait.inst.axisStart == 0) UITrait.inst.axisStart = hit.z - Context.object.transform.loc.z; + Context.object.transform.loc.z = hit.z - UITrait.inst.axisStart; + Context.object.transform.buildMatrix(); #if arm_physics - var rb = UITrait.inst.selectedObject.getTrait(armory.trait.physics.RigidBody); + var rb = Context.object.getTrait(armory.trait.physics.RigidBody); if (rb != null) rb.syncTransform(); #end } diff --git a/Sources/arm/render/RenderPathDeferred.hx b/Sources/arm/render/RenderPathDeferred.hx index 0e60cd74..fbd82059 100644 --- a/Sources/arm/render/RenderPathDeferred.hx +++ b/Sources/arm/render/RenderPathDeferred.hx @@ -12,6 +12,7 @@ import arm.util.ViewportUtil; import arm.util.RenderUtil; import arm.ui.UITrait; import arm.ui.UIView2D; +import arm.Tool; class RenderPathDeferred { @@ -498,16 +499,16 @@ class RenderPathDeferred { lastX = mouse.x; lastY = mouse.y; - if (!UITrait.inst.dirty()) { - if (mx != lastX || my != lastY || mouse.locked) UITrait.inst.ddirty = 0; - if (UITrait.inst.ddirty > -2) { + if (Context.ddirty <= 0 && Context.rdirty <= 0 && (Context.pdirty <= 0 || UITrait.inst.worktab.position == SpaceScene)) { + if (mx != lastX || my != lastY || mouse.locked) Context.ddirty = 0; + if (Context.ddirty > -2) { path.setTarget(""); path.bindTarget(taaFrame % 2 == 0 ? "taa" : "taa2", "tex"); ssaa4 ? path.drawShader("shader_datas/supersample_resolve/supersample_resolve") : path.drawShader("shader_datas/copy_pass/copy_pass"); if (UITrait.inst.brush3d) RenderPathPaint.commandsCursor(); - if (UITrait.inst.ddirty <= 0) UITrait.inst.ddirty--; + if (Context.ddirty <= 0) Context.ddirty--; } return; } @@ -516,11 +517,11 @@ class RenderPathDeferred { @:privateAccess Scene.active.camera.frame = taaFrame; @:privateAccess Scene.active.camera.projectionJitter(); - var tid = UITrait.inst.selectedLayer.id; + var tid = Context.layer.id; - if (UITrait.inst.pushUndo && UITrait.inst.undoLayers != null) { - var isMask = UITrait.inst.selectedLayerIsMask; - var i = UITrait.inst.undoI; + if (History.pushUndo && History.undoLayers != null) { + var isMask = Context.layerIsMask; + var i = History.undoI; if (isMask) { path.setTarget("texpaint_mask_undo" + i); path.bindTarget("texpaint_mask" + tid, "tex"); @@ -533,19 +534,19 @@ class RenderPathDeferred { path.bindTarget("texpaint_pack" + tid, "tex2"); path.drawShader("shader_datas/copy_mrt3_pass/copy_mrt3_pass"); } - var undoLayer = UITrait.inst.undoLayers[UITrait.inst.undoI]; - undoLayer.targetObject = UITrait.inst.paintObject; - undoLayer.targetLayer = UITrait.inst.selectedLayer; + var undoLayer = History.undoLayers[History.undoI]; + undoLayer.targetObject = Context.paintObject; + undoLayer.targetLayer = Context.layer; undoLayer.targetIsMask = isMask; - UITrait.inst.undoI = (UITrait.inst.undoI + 1) % App.C.undo_steps; - if (UITrait.inst.undos < App.C.undo_steps) UITrait.inst.undos++; - if (UITrait.inst.redos > 0) { - for (i in 0...UITrait.inst.redos) History.stack.pop(); - UITrait.inst.redos = 0; + History.undoI = (History.undoI + 1) % App.C.undo_steps; + if (History.undos < App.C.undo_steps) History.undos++; + if (History.redos > 0) { + for (i in 0...History.redos) History.stack.pop(); + History.redos = 0; } - UITrait.inst.pushUndo = false; + History.pushUndo = false; - History.stack.push(UITrait.inst.toolNames[UITrait.inst.selectedTool]); + History.stack.push(UITrait.inst.toolNames[Context.tool]); while (History.stack.length > App.C.undo_steps + 1) History.stack.shift(); } @@ -557,15 +558,15 @@ class RenderPathDeferred { var savedFov = 0.0; if (UITrait.inst.paint2d) { // Set plane mesh - painto = UITrait.inst.paintObject; + painto = Context.paintObject; visibles = []; - for (p in UITrait.inst.paintObjects) { + for (p in Context.paintObjects) { visibles.push(p.visible); p.visible = false; } - if (UITrait.inst.mergedObject != null) { - mergedObjectVisible = UITrait.inst.mergedObject.visible; - UITrait.inst.mergedObject.visible = false; + if (Context.mergedObject != null) { + mergedObjectVisible = Context.mergedObject.visible; + Context.mergedObject.visible = false; } var cam = Scene.active.camera; @@ -592,7 +593,7 @@ class RenderPathDeferred { planeo = cast Scene.active.getChild(".Plane"); planeo.visible = true; - UITrait.inst.paintObject = planeo; + Context.paintObject = planeo; var v = new Vec4(); var sx = v.set(m._00, m._01, m._02).length(); @@ -605,12 +606,12 @@ class RenderPathDeferred { // Geometry drawGbuffer(); - if (UITrait.inst.undoLayers != null) { + if (History.undoLayers != null) { // Symmetry if (UITrait.inst.symX || UITrait.inst.symY || UITrait.inst.symZ) { - UITrait.inst.ddirty = 2; - var t = UITrait.inst.paintObject.transform; + Context.ddirty = 2; + var t = Context.paintObject.transform; var sx = t.scale.x; var sy = t.scale.y; var sz = t.scale.z; @@ -658,8 +659,8 @@ class RenderPathDeferred { // - if (UITrait.inst.brushBlendDirty) { - UITrait.inst.brushBlendDirty = false; + if (Context.brushBlendDirty) { + Context.brushBlendDirty = false; path.setTarget("texpaint_blend0", ["texpaint_blend1"]); path.clearTarget(0x00000000); } @@ -667,13 +668,13 @@ class RenderPathDeferred { if (UITrait.inst.paint2d) { // Restore paint mesh planeo.visible = false; - for (i in 0...UITrait.inst.paintObjects.length) { - UITrait.inst.paintObjects[i].visible = visibles[i]; + for (i in 0...Context.paintObjects.length) { + Context.paintObjects[i].visible = visibles[i]; } - if (UITrait.inst.mergedObject != null) { - UITrait.inst.mergedObject.visible = mergedObjectVisible; + if (Context.mergedObject != null) { + Context.mergedObject.visible = mergedObjectVisible; } - UITrait.inst.paintObject = painto; + Context.paintObject = painto; Scene.active.camera.transform.setMatrix(UITrait.inst.savedCamera); Scene.active.camera.data.raw.fov = savedFov; ViewportUtil.updateCameraType(UITrait.inst.cameraType); @@ -686,7 +687,7 @@ class RenderPathDeferred { #if ((rp_ssgi == "RTGI") || (rp_ssgi == "RTAO")) { var ssgi = Config.raw.rp_ssgi != false && UITrait.inst.cameraType == 0; - if (ssgi && UITrait.inst.ddirty > 0 && taaFrame > 0) { + if (ssgi && Context.ddirty > 0 && taaFrame > 0) { path.setTarget("singlea"); path.bindTarget("_main", "gbufferD"); path.bindTarget("gbuffer0", "gbuffer0"); @@ -712,7 +713,7 @@ class RenderPathDeferred { #if rp_voxelao if (Config.raw.rp_gi != false) { - var voxelize = path.voxelize() && UITrait.inst.ddirty > 0 && taaFrame > 0; + var voxelize = path.voxelize() && Context.ddirty > 0 && taaFrame > 0; #if arm_voxelgi_temporal voxelize = ++voxelFrame % voxelFreq == 0; @@ -732,7 +733,7 @@ class RenderPathDeferred { path.setViewport(res, res); path.bindTarget(voxtex, "voxels"); if (arm.nodes.MaterialBuilder.heightUsed) { - var tid = UITrait.inst.layers[0].id; + var tid = Project.layers[0].id; path.bindTarget("texpaint_pack" + tid, "texpaint_pack"); } path.drawMeshes("voxel"); @@ -1018,9 +1019,9 @@ class RenderPathDeferred { if (UITrait.inst.brush3d) RenderPathPaint.commandsCursor(); taaFrame++; - UITrait.inst.ddirty--; - UITrait.inst.pdirty--; - UITrait.inst.rdirty--; + Context.ddirty--; + Context.pdirty--; + Context.rdirty--; } static function drawGbuffer() { @@ -1039,12 +1040,12 @@ class RenderPathDeferred { #end // Paint - var tid = UITrait.inst.layers[0].id; + var tid = Project.layers[0].id; path.bindTarget("texpaint" + tid, "texpaint"); path.bindTarget("texpaint_nor" + tid, "texpaint_nor"); path.bindTarget("texpaint_pack" + tid, "texpaint_pack"); - for (i in 1...UITrait.inst.layers.length) { - var l = UITrait.inst.layers[i]; + for (i in 1...Project.layers.length) { + var l = Project.layers[i]; tid = l.id; path.bindTarget("texpaint" + tid, "texpaint" + tid); path.bindTarget("texpaint_nor" + tid, "texpaint_nor" + tid); diff --git a/Sources/arm/render/RenderPathPaint.hx b/Sources/arm/render/RenderPathPaint.hx index 235bd78f..eb58f8d9 100644 --- a/Sources/arm/render/RenderPathPaint.hx +++ b/Sources/arm/render/RenderPathPaint.hx @@ -13,10 +13,10 @@ class RenderPathPaint { public static function commandsPaint() { var path = RenderPathDeferred.path; - var tid = UITrait.inst.selectedLayer.id; + var tid = Context.layer.id; - if (UITrait.inst.paintDirty()) { - if (UITrait.inst.selectedTool == ToolParticle) { + if (Context.pdirty > 0 && UITrait.inst.worktab.position != SpaceScene) { + if (Context.tool == ToolParticle) { path.setTarget("texparticle"); path.clearTarget(0x00000000); path.bindTarget("_main", "gbufferD"); @@ -34,18 +34,18 @@ class RenderPathPaint { @:privateAccess path.end(); } - if (UITrait.inst.selectedTool == ToolColorId) { + if (Context.tool == ToolColorId) { path.setTarget("texpaint_colorid"); path.clearTarget(0xff000000); path.bindTarget("gbuffer2", "gbuffer2"); path.drawMeshes("paint"); UITrait.inst.headerHandle.redraws = 2; } - else if (UITrait.inst.selectedTool == ToolPicker) { + else if (Context.tool == ToolPicker) { path.setTarget("texpaint_picker", ["texpaint_nor_picker", "texpaint_pack_picker"]); path.clearTarget(0xff000000); path.bindTarget("gbuffer2", "gbuffer2"); - tid = UITrait.inst.layers[0].id; + tid = Project.layers[0].id; path.bindTarget("texpaint" + tid, "texpaint"); path.bindTarget("texpaint_nor" + tid, "texpaint_nor"); path.bindTarget("texpaint_pack" + tid, "texpaint_pack"); @@ -71,9 +71,9 @@ class RenderPathPaint { // Pick material if (UITrait.inst.pickerSelectMaterial) { var matid = b.get(3); - for (m in UITrait.inst.materials) { + for (m in Project.materials) { if (m.id == matid) { - UITrait.inst.setMaterial(m); + Context.setMaterial(m); UITrait.inst.materialIdPicked = matid; break; } @@ -81,7 +81,7 @@ class RenderPathPaint { } } else { - if (UITrait.inst.selectedTool == ToolBake && UITrait.inst.bakeType == 0) { // AO + if (Context.tool == ToolBake && UITrait.inst.bakeType == 0) { // AO if (initVoxels) { initVoxels = false; // Init voxel texture @@ -105,7 +105,7 @@ class RenderPathPaint { path.setTarget(blendB); path.bindTarget(blendA, "tex"); path.drawShader("shader_datas/copy_pass/copy_pass"); - var isMask = UITrait.inst.selectedLayerIsMask; + var isMask = Context.layerIsMask; var texpaint = isMask ? "texpaint_mask" + tid : "texpaint" + tid; path.setTarget(texpaint, ["texpaint_nor" + tid, "texpaint_pack" + tid, blendA]); path.bindTarget("_main", "gbufferD"); @@ -113,7 +113,7 @@ class RenderPathPaint { path.bindTarget("gbuffer0", "gbuffer0"); } path.bindTarget(blendB, "paintmask"); - if (UITrait.inst.selectedTool == ToolBake && UITrait.inst.bakeType == 0) { // AO + if (Context.tool == ToolBake && UITrait.inst.bakeType == 0) { // AO path.bindTarget("voxels", "voxels"); } if (UITrait.inst.colorIdPicked) { @@ -121,9 +121,9 @@ class RenderPathPaint { } // Read texcoords from gbuffer - var readTC = (UITrait.inst.selectedTool == ToolFill && UITrait.inst.fillTypeHandle.position == 1) || // Face fill - UITrait.inst.selectedTool == ToolClone || - UITrait.inst.selectedTool == ToolBlur; + var readTC = (Context.tool == ToolFill && UITrait.inst.fillTypeHandle.position == 1) || // Face fill + Context.tool == ToolClone || + Context.tool == ToolBlur; if (readTC) { path.bindTarget("gbuffer2", "gbuffer2"); } @@ -135,7 +135,7 @@ class RenderPathPaint { @:access(iron.RenderPath) public static function commandsCursor() { - var tool = UITrait.inst.selectedTool; + var tool = Context.tool; if (tool != ToolBrush && tool != ToolEraser && tool != ToolClone && @@ -160,7 +160,7 @@ class RenderPathPaint { path.setTarget(""); g.setPipeline(Layers.pipeCursor); - var decal = UITrait.inst.selectedTool == ToolDecal || UITrait.inst.selectedTool == ToolText; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; var img = decal ? UITrait.inst.decalImage : Res.get("cursor.png"); g.setTexture(Layers.cursorTex, img); var gbuffer0 = path.renderTargets.get("gbuffer0").image; diff --git a/Sources/arm/render/RenderPathPreview.hx b/Sources/arm/render/RenderPathPreview.hx index 7173b741..b7fa0b8a 100644 --- a/Sources/arm/render/RenderPathPreview.hx +++ b/Sources/arm/render/RenderPathPreview.hx @@ -51,7 +51,7 @@ class RenderPathPreview { path.drawSkydome("shader_datas/world_pass/world_pass"); var framebuffer = "texpreview"; - var selectedMat = UITrait.inst.worktab.position == SpaceScene ? UITrait.inst.selectedMaterialScene : UITrait.inst.selectedMaterial; + var selectedMat = UITrait.inst.worktab.position == SpaceScene ? Context.materialScene : Context.material; RenderPath.active.renderTargets.get("texpreview").image = selectedMat.image; RenderPath.active.renderTargets.get("texpreview_icon").image = selectedMat.imageIcon; diff --git a/Sources/arm/render/Uniforms.hx b/Sources/arm/render/Uniforms.hx index fa6b99d8..2630f053 100644 --- a/Sources/arm/render/Uniforms.hx +++ b/Sources/arm/render/Uniforms.hx @@ -22,7 +22,7 @@ class Uniforms { var val = (UITrait.inst.brushRadius * UITrait.inst.brushNodesRadius) / 15.0; var pen = Input.getPen(); if (UITrait.penPressureRadius && pen.down()) val *= pen.pressure; - var decal = UITrait.inst.selectedTool == ToolDecal || UITrait.inst.selectedTool == ToolText; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; if (UITrait.inst.brush3d && !decal) { val *= UITrait.inst.paint2d ? 0.6 : 2; } @@ -64,8 +64,8 @@ class Uniforms { return vec2; } else if (link == '_texcoloridSize') { - if (UITrait.inst.assets.length == 0) return vec2; - var img = UITrait.inst.getImage(UITrait.inst.assets[UITrait.inst.colorIdHandle.position]); + if (Project.assets.length == 0) return vec2; + var img = UITrait.inst.getImage(Project.assets[UITrait.inst.colorIdHandle.position]); vec2.set(img.width, img.height, 0); return vec2; } @@ -101,8 +101,8 @@ class Uniforms { public static function linkTex(object:Object, mat:MaterialData, link:String):kha.Image { if (link == "_texcolorid") { - if (UITrait.inst.assets.length == 0) return null; - else return UITrait.inst.getImage(UITrait.inst.assets[UITrait.inst.colorIdHandle.position]); + if (Project.assets.length == 0) return null; + else return UITrait.inst.getImage(Project.assets[UITrait.inst.colorIdHandle.position]); } else if (link == "_texuvmap") { UVUtil.cacheUVMap(); // TODO: Check overlapping g4 calls here @@ -119,15 +119,15 @@ class Uniforms { return UITrait.inst.decalMaskImage; } else if (link == "_texpaint_undo") { - var i = UITrait.inst.undoI - 1 < 0 ? App.C.undo_steps - 1 : UITrait.inst.undoI - 1; + var i = History.undoI - 1 < 0 ? App.C.undo_steps - 1 : History.undoI - 1; return RenderPath.active.renderTargets.get("texpaint_undo" + i).image; } else if (link == "_texpaint_nor_undo") { - var i = UITrait.inst.undoI - 1 < 0 ? App.C.undo_steps - 1 : UITrait.inst.undoI - 1; + var i = History.undoI - 1 < 0 ? App.C.undo_steps - 1 : History.undoI - 1; return RenderPath.active.renderTargets.get("texpaint_nor_undo" + i).image; } else if (link == "_texpaint_pack_undo") { - var i = UITrait.inst.undoI - 1 < 0 ? App.C.undo_steps - 1 : UITrait.inst.undoI - 1; + var i = History.undoI - 1 < 0 ? App.C.undo_steps - 1 : History.undoI - 1; return RenderPath.active.renderTargets.get("texpaint_pack_undo" + i).image; } else if (link.startsWith("_texpaint_pack_vert")) { @@ -135,7 +135,7 @@ class Uniforms { return RenderPath.active.renderTargets.get("texpaint_pack" + tid).image; } else if (link == "_texpaint_mask") { - return UITrait.inst.selectedLayer.texpaint_mask; + return Context.layer.texpaint_mask; } else if (link == "_texparticle") { return RenderPath.active.renderTargets.get("texparticle").image; diff --git a/Sources/arm/ui/TabExport.hx b/Sources/arm/ui/TabExport.hx index 7a351a9c..32ee50b9 100644 --- a/Sources/arm/ui/TabExport.hx +++ b/Sources/arm/ui/TabExport.hx @@ -98,7 +98,7 @@ class TabExport { }; } UITrait.inst.exportMeshFormat = ui.combo(Id.handle({position: UITrait.inst.exportMeshFormat}), ["obj", "arm"], "Format", true); - var mesh = UITrait.inst.paintObject.data.raw; + var mesh = Context.paintObject.data.raw; var inda = mesh.index_arrays[0].values; var tris = Std.int(inda.length / 3); ui.text(tris + " triangles"); diff --git a/Sources/arm/ui/TabHistory.hx b/Sources/arm/ui/TabHistory.hx index 97f2d766..2f7d7e84 100644 --- a/Sources/arm/ui/TabHistory.hx +++ b/Sources/arm/ui/TabHistory.hx @@ -7,7 +7,7 @@ class TabHistory { var ui = UITrait.inst.ui; if (ui.tab(UITrait.inst.htab, "History")) { for (i in 0...History.stack.length) { - var active = History.stack.length - 1 - UITrait.inst.redos; + var active = History.stack.length - 1 - History.redos; if (i == active) { ui.fill(0, 0, ui._windowW, ui.t.ELEMENT_H, ui.t.HIGHLIGHT_COL); } diff --git a/Sources/arm/ui/TabLayers.hx b/Sources/arm/ui/TabLayers.hx index 5dbaee7d..21cfbd3c 100644 --- a/Sources/arm/ui/TabLayers.hx +++ b/Sources/arm/ui/TabLayers.hx @@ -13,20 +13,20 @@ class TabLayers { var ui = UITrait.inst.ui; if (ui.tab(UITrait.inst.htab, "Layers")) { ui.row([1/4,1/4,1/2]); - if (ui.button("New")) UITrait.inst.newLayer(); + if (ui.button("New")) Layers.newLayer(); if (ui.button("2D View")) UITrait.inst.show2DView(); else if (ui.isHovered) ui.tooltip("Show 2D View (SHIFT+TAB)"); var ar = ["All"]; - for (p in UITrait.inst.paintObjects) ar.push(p.name); + for (p in Context.paintObjects) ar.push(p.name); var filterHandle = Id.handle(); UITrait.inst.layerFilter = ui.combo(filterHandle, ar, "Filter"); if (filterHandle.changed) { - for (p in UITrait.inst.paintObjects) { + for (p in Context.paintObjects) { p.visible = UITrait.inst.layerFilter == 0 || p.name == ar[UITrait.inst.layerFilter]; - UITrait.inst.setObjectMask(); + Layers.setObjectMask(); } - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } function drawList(l:LayerSlot, i:Int) { @@ -45,8 +45,8 @@ class TabLayers { ui.fill(checkw, step * 2, (ui._windowW / ui.SCALE - 2) - checkw, step + off, ui.t.SEPARATOR_COL); } - if (UITrait.inst.selectedLayer == l) { - if (UITrait.inst.selectedLayerIsMask) { + if (Context.layer == l) { + if (Context.layerIsMask) { ui.rect(ui._windowW / 100 * 24 - 2, 0, ui._windowW / 100 * 16, step * 2, ui.t.HIGHLIGHT_COL, 2); } else { @@ -90,7 +90,7 @@ class TabLayers { contextMenu = true; } if (ui.isReleased) { - UITrait.inst.setLayer(l); + Context.setLayer(l); } if (state == State.Started) { if (Time.time() - UITrait.inst.selectTime < 0.25) UITrait.inst.show2DView(); @@ -110,17 +110,17 @@ class TabLayers { ui.text(l.name + " Mask", Right); if (ui.button("Delete", Left)) { l.deleteMask(); - UITrait.inst.setLayer(l); + Context.setLayer(l); } if (ui.button("Apply", Left)) { - UITrait.inst.setLayer(l); + Context.setLayer(l); l.applyMask(); - UITrait.inst.setLayer(l); // Parse mesh material + Context.setLayer(l); // Parse mesh material } }); } if (ui.isReleased) { - UITrait.inst.setLayer(l, true); + Context.setLayer(l, true); } if (state == State.Started) { if (Time.time() - UITrait.inst.selectTime < 0.25) UITrait.inst.show2DView(); @@ -133,7 +133,7 @@ class TabLayers { ui._y -= center; if (ui.isReleased) { - UITrait.inst.setLayer(l); + Context.setLayer(l); } if (ui.isHovered && ui.inputReleasedR) { @@ -142,7 +142,7 @@ class TabLayers { if (contextMenu) { UIMenu.show(function(ui:Zui) { - if (l == UITrait.inst.layers[0]) { + if (l == Project.layers[0]) { ui.fill(0, 0, ui._w, ui.t.ELEMENT_H * 10, ui.t.SEPARATOR_COL); ui.text(l.name, Right); } @@ -152,47 +152,47 @@ class TabLayers { } if (l.material_mask == null && ui.button("To Fill Layer", Left)) { - UITrait.inst.toFillLayer(l); + Layers.toFillLayer(l); } if (l.material_mask != null && ui.button("To Paint Layer", Left)) { - UITrait.inst.toPaintLayer(l); + Layers.toPaintLayer(l); } - if (l == UITrait.inst.layers[0]) { + if (l == Project.layers[0]) { } else { if (ui.button("Delete", Left)) { - UITrait.inst.selectedLayer = l; + Context.layer = l; Layers.deleteSelectedLayer(); } if (ui.button("Move Up", Left)) { - if (i < UITrait.inst.layers.length - 1) { - UITrait.inst.setLayer(l); - var t = UITrait.inst.layers[i + 1]; - UITrait.inst.layers[i + 1] = UITrait.inst.layers[i]; - UITrait.inst.layers[i] = t; + if (i < Project.layers.length - 1) { + Context.setLayer(l); + var t = Project.layers[i + 1]; + Project.layers[i + 1] = Project.layers[i]; + Project.layers[i] = t; UITrait.inst.hwnd.redraws = 2; } } if (ui.button("Move Down", Left)) { if (i > 1) { - UITrait.inst.setLayer(l); - var t = UITrait.inst.layers[i - 1]; - UITrait.inst.layers[i - 1] = UITrait.inst.layers[i]; - UITrait.inst.layers[i] = t; + Context.setLayer(l); + var t = Project.layers[i - 1]; + Project.layers[i - 1] = Project.layers[i]; + Project.layers[i] = t; UITrait.inst.hwnd.redraws = 2; } } if (ui.button("Merge Down", Left)) { - UITrait.inst.setLayer(l); + Context.setLayer(l); iron.App.notifyOnRender(Layers.mergeSelectedLayer); } if (ui.button("Duplicate", Left)) { - UITrait.inst.setLayer(l); + Context.setLayer(l); function makeDupli(g:kha.graphics4.Graphics) { g.end(); l = l.duplicate(); - UITrait.inst.setLayer(l); + Context.setLayer(l); g.begin(); iron.App.removeRender(makeDupli); } @@ -200,13 +200,13 @@ class TabLayers { } if (ui.button("Black Mask", Left)) { l.createMask(0x00000000); - UITrait.inst.setLayer(l, true); - UITrait.inst.layerPreviewDirty = true; + Context.setLayer(l, true); + Context.layerPreviewDirty = true; } if (ui.button("White Mask", Left)) { l.createMask(0xffffffff); - UITrait.inst.setLayer(l, true); - UITrait.inst.layerPreviewDirty = true; + Context.setLayer(l, true); + Context.layerPreviewDirty = true; } } @@ -263,12 +263,12 @@ class TabLayers { @:privateAccess ui.endElement(); var ar = ["Shared"]; - for (p in UITrait.inst.paintObjects) ar.push(p.name); + for (p in Context.paintObjects) ar.push(p.name); var h = Id.handle().nest(l.id); h.position = l.objectMask; l.objectMask = ui.combo(h, ar, "Object"); if (h.changed) { - UITrait.inst.setLayer(l); + Context.setLayer(l); Layers.updateFillLayers(4); } @:privateAccess ui.endElement(); @@ -286,10 +286,10 @@ class TabLayers { } } - for (i in 0...UITrait.inst.layers.length) { - if (i >= UITrait.inst.layers.length) break; // Layer was deleted - var j = UITrait.inst.layers.length - 1 - i; - var l = UITrait.inst.layers[j]; + for (i in 0...Project.layers.length) { + if (i >= Project.layers.length) break; // Layer was deleted + var j = Project.layers.length - 1 - i; + var l = Project.layers[j]; drawList(l, j); } } diff --git a/Sources/arm/ui/TabMaterials.hx b/Sources/arm/ui/TabMaterials.hx index 389d4caa..7302cf59 100644 --- a/Sources/arm/ui/TabMaterials.hx +++ b/Sources/arm/ui/TabMaterials.hx @@ -21,20 +21,20 @@ class TabMaterials { var ui = UITrait.inst.ui; var isScene = UITrait.inst.worktab.position == SpaceScene; - var materials = isScene ? UITrait.inst.materialsScene : UITrait.inst.materials; - var selectMaterial = isScene ? UITrait.inst.selectMaterialScene : UITrait.inst.selectMaterial; + var materials = isScene ? Project.materialsScene : Project.materials; + var selectMaterial = isScene ? Context.selectMaterialScene : Context.selectMaterial; if (ui.tab(UITrait.inst.htab1, "Materials")) { ui.row([1/4,1/4,1/4]); if (ui.button("New")) { if (isScene) { - if (UITrait.inst.selectedObject != UITrait.inst.paintObject && Std.is(UITrait.inst.selectedObject, MeshObject)) { - UITrait.inst.removeMaterialCache(); + if (Context.object != Context.paintObject && Std.is(Context.object, MeshObject)) { + Context.removeMaterialCache(); Data.getMaterial("Scene", "Material2", function(md:iron.data.MaterialData) { ui.g.end(); md.name = "Material2." + materials.length; - UITrait.inst.selectedMaterialScene = new MaterialSlot(md); - materials.push(UITrait.inst.selectedMaterialScene); + Context.materialScene = new MaterialSlot(md); + materials.push(Context.materialScene); selectMaterial(materials.length - 1); RenderUtil.makeMaterialPreview(); ui.g.begin(false); @@ -44,12 +44,12 @@ class TabMaterials { else { ui.g.end(); UITrait.inst.headerHandle.redraws = 2; - UITrait.inst.selectedMaterial = new MaterialSlot(materials[0].data); - materials.push(UITrait.inst.selectedMaterial); + Context.material = new MaterialSlot(materials[0].data); + materials.push(Context.material); UINodes.inst.updateCanvasMap(); MaterialParser.parsePaintMaterial(); RenderUtil.makeMaterialPreview(); - var decal = UITrait.inst.selectedTool == ToolDecal || UITrait.inst.selectedTool == ToolText; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; if (decal) RenderUtil.makeDecalPreview(); ui.g.begin(false); } @@ -122,7 +122,7 @@ class TabMaterials { if (ui.button("To Fill Layer", Left)) { selectMaterial(i); - UITrait.inst.createFillLayer(); + Layers.createFillLayer(); } if (ui.button("Delete", Left) && materials.length > 1) { @@ -173,5 +173,5 @@ class TabMaterials { } } - static function getSelectedMaterial() { return UITrait.inst.worktab.position == SpaceScene ? UITrait.inst.selectedMaterialScene : UITrait.inst.selectedMaterial; } + static function getSelectedMaterial() { return UITrait.inst.worktab.position == SpaceScene ? Context.materialScene : Context.material; } } diff --git a/Sources/arm/ui/TabMeshes.hx b/Sources/arm/ui/TabMeshes.hx index 0e5d7278..2f08d413 100644 --- a/Sources/arm/ui/TabMeshes.hx +++ b/Sources/arm/ui/TabMeshes.hx @@ -11,7 +11,7 @@ class TabMeshes { if (ui.tab(UITrait.inst.htab2, "Meshes")) { ui.row([1/4]); - if (ui.button("Import")) UITrait.inst.importMesh(); + if (ui.button("Import")) Context.importMesh(); if (ui.isHovered) ui.tooltip("Import mesh file (Ctrl + Shift + I)"); UITrait.inst.isUdim = ui.check(Id.handle({selected: UITrait.inst.isUdim}), "UDIM Import"); @@ -21,7 +21,7 @@ class TabMeshes { if (ui.panel(Id.handle({selected: false}), "Scene", 0, true)) { ui.indent(); - for (o in UITrait.inst.paintObjects) { + for (o in Context.paintObjects) { ui.text(o.name); } ui.unindent(); @@ -32,25 +32,25 @@ class TabMeshes { ui.row([1/2,1/2]); if (ui.button("Flip Normals")) { MeshUtil.flipNormals(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } if (ui.button("Calculate Normals")) { MeshUtil.calcNormals(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } ui.row([1/3, 1/3, 1/3]); if (ui.button("Rotate X")) { MeshUtil.swapAxis(1, 2); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } if (ui.button("Rotate Y")) { MeshUtil.swapAxis(2, 0); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } if (ui.button("Rotate Z")) { MeshUtil.swapAxis(0, 1); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } var dispHandle = Id.handle({value: UITrait.inst.displaceStrength}); diff --git a/Sources/arm/ui/TabOutliner.hx b/Sources/arm/ui/TabOutliner.hx index 9b827123..fd81e859 100644 --- a/Sources/arm/ui/TabOutliner.hx +++ b/Sources/arm/ui/TabOutliner.hx @@ -12,13 +12,13 @@ class TabOutliner { var ui = UITrait.inst.ui; if (ui.tab(UITrait.inst.htab, "Outliner")) { ui.row([1/4]); - if (ui.button("Import")) UITrait.inst.importMesh(); + if (ui.button("Import")) Context.importMesh(); var i = 0; function drawList(h:Handle, o:Object) { if (o.name.charAt(0) == '.') return; // Hidden var b = false; - if (UITrait.inst.selectedObject == o) { + if (Context.object == o) { ui.fill(0, 0, ui._windowW, ui.t.ELEMENT_H, ui.t.HIGHLIGHT_COL); } if (o.children.length > 0) { @@ -30,8 +30,8 @@ class TabOutliner { ui._x -= 18; } if (ui.isReleased) { - UITrait.inst.selectObject(o); - UITrait.inst.ddirty = 2; + Context.selectObject(o); + Context.ddirty = 2; } i++; if (b) { diff --git a/Sources/arm/ui/TabPreferences.hx b/Sources/arm/ui/TabPreferences.hx index 04cd9780..8a3314c0 100644 --- a/Sources/arm/ui/TabPreferences.hx +++ b/Sources/arm/ui/TabPreferences.hx @@ -72,13 +72,13 @@ class TabPreferences { App.C.undo_steps = Std.int(ui.slider(UITrait.inst.undoHandle, "Undo Steps", 1, 64, false, 1)); if (UITrait.inst.undoHandle.changed) { ui.g.end(); - while (UITrait.inst.undoLayers.length < App.C.undo_steps) { - var l = new LayerSlot("_undo" + UITrait.inst.undoLayers.length); + while (History.undoLayers.length < App.C.undo_steps) { + var l = new LayerSlot("_undo" + History.undoLayers.length); l.createMask(0, false); - UITrait.inst.undoLayers.push(l); + History.undoLayers.push(l); } - while (UITrait.inst.undoLayers.length > App.C.undo_steps) { - var l = UITrait.inst.undoLayers.pop(); + while (History.undoLayers.length > App.C.undo_steps) { + var l = History.undoLayers.pop(); l.unload(); } History.reset(); diff --git a/Sources/arm/ui/TabProperties.hx b/Sources/arm/ui/TabProperties.hx index ff2ecdd4..a0ded8a2 100644 --- a/Sources/arm/ui/TabProperties.hx +++ b/Sources/arm/ui/TabProperties.hx @@ -10,16 +10,16 @@ class TabProperties { public static function draw() { var ui = UITrait.inst.ui; if (ui.tab(UITrait.inst.htab1, 'Properties')) { - if (UITrait.inst.selectedObject != null) { + if (Context.object != null) { var h = Id.handle(); - h.selected = UITrait.inst.selectedObject.visible; - UITrait.inst.selectedObject.visible = ui.check(h, "Visible"); - if (h.changed) UITrait.inst.ddirty = 2; + h.selected = Context.object.visible; + Context.object.visible = ui.check(h, "Visible"); + if (h.changed) Context.ddirty = 2; - var loc = UITrait.inst.selectedObject.transform.loc; - var scale = UITrait.inst.selectedObject.transform.scale; - var rot = UITrait.inst.selectedObject.transform.rot.getEuler(); + var loc = Context.object.transform.loc; + var scale = Context.object.transform.scale; + var rot = Context.object.transform.rot.getEuler(); rot.mult(180 / 3.141592); var f = 0.0; @@ -29,17 +29,17 @@ class TabProperties { h = Id.handle(); h.text = roundfp(loc.x) + ""; f = Std.parseFloat(ui.textInput(h, "X")); - if (h.changed) { loc.x = f; UITrait.inst.ddirty = 2; } + if (h.changed) { loc.x = f; Context.ddirty = 2; } h = Id.handle(); h.text = roundfp(loc.y) + ""; f = Std.parseFloat(ui.textInput(h, "Y")); - if (h.changed) { loc.y = f; UITrait.inst.ddirty = 2; } + if (h.changed) { loc.y = f; Context.ddirty = 2; } h = Id.handle(); h.text = roundfp(loc.z) + ""; f = Std.parseFloat(ui.textInput(h, "Z")); - if (h.changed) { loc.z = f; UITrait.inst.ddirty = 2; } + if (h.changed) { loc.z = f; Context.ddirty = 2; } ui.row(UITrait.inst.row4); ui.text("Rotation"); @@ -48,24 +48,24 @@ class TabProperties { h.text = roundfp(rot.x) + ""; f = Std.parseFloat(ui.textInput(h, "X")); var changed = false; - if (h.changed) { changed = true; rot.x = f; UITrait.inst.ddirty = 2; } + if (h.changed) { changed = true; rot.x = f; Context.ddirty = 2; } h = Id.handle(); h.text = roundfp(rot.y) + ""; f = Std.parseFloat(ui.textInput(h, "Y")); - if (h.changed) { changed = true; rot.y = f; UITrait.inst.ddirty = 2; } + if (h.changed) { changed = true; rot.y = f; Context.ddirty = 2; } h = Id.handle(); h.text = roundfp(rot.z) + ""; f = Std.parseFloat(ui.textInput(h, "Z")); - if (h.changed) { changed = true; rot.z = f; UITrait.inst.ddirty = 2; } + if (h.changed) { changed = true; rot.z = f; Context.ddirty = 2; } - if (changed && UITrait.inst.selectedObject.name != "Scene") { + if (changed && Context.object.name != "Scene") { rot.mult(3.141592 / 180); - UITrait.inst.selectedObject.transform.rot.fromEuler(rot.x, rot.y, rot.z); - UITrait.inst.selectedObject.transform.buildMatrix(); + Context.object.transform.rot.fromEuler(rot.x, rot.y, rot.z); + Context.object.transform.buildMatrix(); #if arm_physics - var rb = UITrait.inst.selectedObject.getTrait(armory.trait.physics.RigidBody); + var rb = Context.object.getTrait(armory.trait.physics.RigidBody); if (rb != null) rb.syncTransform(); #end } @@ -76,46 +76,46 @@ class TabProperties { h = Id.handle(); h.text = roundfp(scale.x) + ""; f = Std.parseFloat(ui.textInput(h, "X")); - if (h.changed) { scale.x = f; UITrait.inst.ddirty = 2; } + if (h.changed) { scale.x = f; Context.ddirty = 2; } h = Id.handle(); h.text = roundfp(scale.y) + ""; f = Std.parseFloat(ui.textInput(h, "Y")); - if (h.changed) { scale.y = f; UITrait.inst.ddirty = 2; } + if (h.changed) { scale.y = f; Context.ddirty = 2; } h = Id.handle(); h.text = roundfp(scale.z) + ""; f = Std.parseFloat(ui.textInput(h, "Z")); - if (h.changed) { scale.z = f; UITrait.inst.ddirty = 2; } + if (h.changed) { scale.z = f; Context.ddirty = 2; } - UITrait.inst.selectedObject.transform.dirty = true; + Context.object.transform.dirty = true; - if (UITrait.inst.selectedObject.name == "Scene") { + if (Context.object.name == "Scene") { var p = Scene.active.world.probe; var envHandle = Id.handle({value: p.raw.strength}); p.raw.strength = ui.slider(envHandle, "Strength", 0.0, 5.0, true); if (envHandle.changed) { - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } } - else if (Std.is(UITrait.inst.selectedObject, LightObject)) { - var light = cast(UITrait.inst.selectedObject, LightObject); + else if (Std.is(Context.object, LightObject)) { + var light = cast(Context.object, LightObject); var lhandle = Id.handle(); lhandle.value = light.data.raw.strength / 1333; lhandle.value = Std.int(lhandle.value * 100) / 100; light.data.raw.strength = ui.slider(lhandle, "Strength", 0.0, 4.0, true) * 1333; if (lhandle.changed) { - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } } - else if (Std.is(UITrait.inst.selectedObject, CameraObject)) { + else if (Std.is(Context.object, CameraObject)) { var scene = Scene.active; var cam = scene.cameras[0]; var fovHandle = Id.handle({value: Std.int(cam.data.raw.fov * 100) / 100}); cam.data.raw.fov = ui.slider(fovHandle, "FoV", 0.3, 2.0, true); if (fovHandle.changed) { cam.buildProjection(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } } } diff --git a/Sources/arm/ui/TabTextures.hx b/Sources/arm/ui/TabTextures.hx index d578308b..af1a1bc2 100644 --- a/Sources/arm/ui/TabTextures.hx +++ b/Sources/arm/ui/TabTextures.hx @@ -28,8 +28,8 @@ class TabTextures { if (ui.button("2D View")) UITrait.inst.show2DView(1); - if (UITrait.inst.assets.length > 0) { - for (i in 0...UITrait.inst.assets.length) { + if (Project.assets.length > 0) { + for (i in 0...Project.assets.length) { // Align into 5 items per row if (i % 5 == 0) { @@ -37,8 +37,8 @@ class TabTextures { ui.row([1/5, 1/5, 1/5, 1/5, 1/5]); } - var asset = UITrait.inst.assets[i]; - if (asset == UITrait.inst.selectedTexture) { + var asset = Project.assets[i]; + if (asset == Context.texture) { var off = i % 2 == 1 ? 1 : 0; var w = 51 - App.C.window_scale; ui.fill(1, -2, w + 3, 2, ui.t.HIGHLIGHT_COL); @@ -55,7 +55,7 @@ class TabTextures { App.dragOffX = -(mouse.x - uix - ui._windowX + iron.App.x() - 3); App.dragOffY = -(mouse.y - uiy - ui._windowY + iron.App.y() + 1); App.dragAsset = asset; - UITrait.inst.selectedTexture = asset; + Context.texture = asset; if (Time.time() - UITrait.inst.selectTime < 0.25) UITrait.inst.show2DView(1); UITrait.inst.selectTime = Time.time(); @@ -68,14 +68,14 @@ class TabTextures { ui.fill(0, 0, ui._w, ui.t.ELEMENT_H * 3, ui.t.SEPARATOR_COL); ui.text(asset.name, Right); if (ui.button("To Mask", Left)) { - UITrait.inst.createImageMask(asset); + Layers.createImageMask(asset); } if (ui.button("Delete", Left)) { UITrait.inst.hwnd2.redraws = 2; Data.deleteImage(asset.file); zui.Canvas.assetMap.remove(asset.id); - UITrait.inst.assets.splice(i, 1); - UITrait.inst.assetNames.splice(i, 1); + Project.assets.splice(i, 1); + Project.assetNames.splice(i, 1); // TODO: rebuild affected materials } }); @@ -83,8 +83,8 @@ class TabTextures { } // Fill in unused row space - if (UITrait.inst.assets.length % 5 > 0) { - for (i in 0...5 - (UITrait.inst.assets.length % 5)) { + if (Project.assets.length % 5 > 0) { + for (i in 0...5 - (Project.assets.length % 5)) { @:privateAccess ui.endElement(ui._w); } } diff --git a/Sources/arm/ui/TabViewport.hx b/Sources/arm/ui/TabViewport.hx index 127b9651..34381e27 100644 --- a/Sources/arm/ui/TabViewport.hx +++ b/Sources/arm/ui/TabViewport.hx @@ -43,7 +43,7 @@ class TabViewport { var p = Scene.active.world.probe; var envHandle = Id.handle({value: p.raw.strength}); p.raw.strength = ui.slider(envHandle, "Environment", 0.0, 8.0, true); - if (envHandle.changed) UITrait.inst.ddirty = 2; + if (envHandle.changed) Context.ddirty = 2; ui.row([1/2, 1/2]); if (Scene.active.lights.length > 0) { @@ -53,17 +53,17 @@ class TabViewport { var f32:kha.FastFloat = light.data.raw.size; // hl fix sxhandle.value = f32; light.data.raw.size = ui.slider(sxhandle, "Light Size", 0.0, 4.0, true); - if (sxhandle.changed) UITrait.inst.ddirty = 2; + if (sxhandle.changed) Context.ddirty = 2; // var syhandle = Id.handle(); // syhandle.value = light.data.raw.size_y; // light.data.raw.size_y = ui.slider(syhandle, "Size Y", 0.0, 4.0, true); - // if (syhandle.changed) UITrait.inst.ddirty = 2; + // if (syhandle.changed) Context.ddirty = 2; var lhandle = Id.handle(); lhandle.value = light.data.raw.strength / 1333; lhandle.value = Std.int(lhandle.value * 100) / 100; light.data.raw.strength = ui.slider(lhandle, "Light", 0.0, 4.0, true) * 1333; - if (lhandle.changed) UITrait.inst.ddirty = 2; + if (lhandle.changed) Context.ddirty = 2; } ui.row([1/2, 1/2]); @@ -76,14 +76,14 @@ class TabViewport { } var compassHandle = Id.handle({selected: UITrait.inst.showCompass}); UITrait.inst.showCompass = ui.check(compassHandle, "Compass"); - if (compassHandle.changed) UITrait.inst.ddirty = 2; + if (compassHandle.changed) Context.ddirty = 2; UITrait.inst.showEnvmap = ui.check(UITrait.inst.showEnvmapHandle, "Envmap"); if (UITrait.inst.showEnvmapHandle.changed) { var world = Scene.active.world; world.loadEnvmap(function(_) {}); UITrait.inst.savedEnvmap = world.envmap; - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } if (UITrait.inst.showEnvmap) { @@ -91,7 +91,7 @@ class TabViewport { if (UITrait.inst.showEnvmapBlurHandle.changed) { var probe = Scene.active.world.probe; UITrait.inst.savedEnvmap = UITrait.inst.showEnvmapBlur ? probe.radianceMipmaps[0] : probe.radiance; - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } } else { @@ -111,7 +111,7 @@ class TabViewport { b.set(2, worldColor.Bb); b.set(3, 255); UITrait.inst.emptyEnvmap = Image.fromBytes(b, 1, 1); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } } } diff --git a/Sources/arm/ui/UINodes.hx b/Sources/arm/ui/UINodes.hx index 370fadf5..a1f727e2 100644 --- a/Sources/arm/ui/UINodes.hx +++ b/Sources/arm/ui/UINodes.hx @@ -91,44 +91,44 @@ class UINodes { public function updateCanvasMap() { if (UITrait.inst.worktab.position == SpaceScene) { if (canvasMap2 == null) canvasMap2 = new Map(); - var c = canvasMap2.get(UITrait.inst.selectedMaterialScene); + var c = canvasMap2.get(Context.materialScene); if (c == null) { c = Json.parse(canvasBlob); - canvasMap2.set(UITrait.inst.selectedMaterialScene, c); + canvasMap2.set(Context.materialScene, c); canvas = c; } else canvas = c; - if (canvasType == 0) nodes = UITrait.inst.selectedMaterialScene.nodes; + if (canvasType == 0) nodes = Context.materialScene.nodes; return; } - if (UITrait.inst.selectedMaterial != null) { + if (Context.material != null) { if (canvasMap == null) canvasMap = new Map(); - var c = canvasMap.get(UITrait.inst.selectedMaterial); + var c = canvasMap.get(Context.material); if (c == null) { c = Json.parse(canvasBlob); - canvasMap.set(UITrait.inst.selectedMaterial, c); + canvasMap.set(Context.material, c); canvas = c; c.name = "Material " + (++materialCounter); } else canvas = c; - if (canvasType == 0) nodes = UITrait.inst.selectedMaterial.nodes; + if (canvasType == 0) nodes = Context.material.nodes; } } public function updateCanvasBrushMap() { - if (UITrait.inst.selectedBrush != null) { + if (Context.brush != null) { if (canvasBrushMap == null) canvasBrushMap = new Map(); - var c = canvasBrushMap.get(UITrait.inst.selectedBrush); + var c = canvasBrushMap.get(Context.brush); if (c == null) { c = Json.parse(canvasBrushBlob); - canvasBrushMap.set(UITrait.inst.selectedBrush, c); + canvasBrushMap.set(Context.brush, c); canvasBrush = c; } else canvasBrush = c; - if (canvasType == 1) nodes = UITrait.inst.selectedBrush.nodes; + if (canvasType == 1) nodes = Context.brush.nodes; } } @@ -161,7 +161,7 @@ class UINodes { MaterialParser.parsePaintMaterial(); RenderUtil.makeMaterialPreview(); UITrait.inst.hwnd1.redraws = 2; - var decal = UITrait.inst.selectedTool == ToolDecal || UITrait.inst.selectedTool == ToolText; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; if (decal) RenderUtil.makeDecalPreview(); } } @@ -349,8 +349,8 @@ class UINodes { // Image node preview if (nodes.nodesSelected.length > 0 && nodes.nodesSelected[0].type == 'TEX_IMAGE') { var id = nodes.nodesSelected[0].buttons[0].default_value; - if (id < UITrait.inst.assets.length) { - var img = UITrait.inst.getImage(UITrait.inst.assets[id]); + if (id < Project.assets.length) { + var img = UITrait.inst.getImage(Project.assets[id]); var tw = 64 * ui.SCALE; var th = tw * (img.height / img.width); ui.g.drawScaledImage(img, ww - tw - 20 * ui.SCALE, wh - th - 40 * ui.SCALE, tw, th); diff --git a/Sources/arm/ui/UITrait.hx b/Sources/arm/ui/UITrait.hx index 0ddb6585..b4e99e0a 100644 --- a/Sources/arm/ui/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -26,31 +26,25 @@ import arm.data.MaterialSlot; import arm.io.Importer; import arm.io.Exporter; import arm.io.ExportArm; -import arm.Project; import arm.Tool; @:access(zui.Zui) class UITrait { - public var project:TProjectFormat; - public var projectPath = ""; - - public var assets:Array = []; - public var assetNames:Array = []; - public var assetId = 0; - public static var inst:UITrait; public static var defaultWindowW = 280; public static var defaultToolbarW = 54; public static var defaultHeaderH = 24; - public static var penPressureRadius = true; public static var penPressureOpacity = false; public static var penPressureHardness = false; - public var undoI = 0; // Undo layer - public var undos = 0; // Undos available - public var redos = 0; // Redos available - public var pushUndo = false; // Store undo on next paint + + public var windowW = 280; // Panel width + public var toolbarw = 54; + public var headerh = 24; + public var menubarw = 215; + public var tabx = 0; + public var tabh = 0; public var isScrolling = false; public var colorIdPicked = false; @@ -84,23 +78,8 @@ class UITrait { public var wireframeHandle = new Handle({selected: false}); public var culling = true; - public var ddirty = 0; - public var pdirty = 0; - public var rdirty = 0; - public var brushBlendDirty = true; - public var layerPreviewDirty = true; - public var layersPreviewDirty = false; - - public var windowW = 280; // Panel width - public var toolbarw = 54; - public var headerh = 24; - public var menubarw = 215; - public var tabx = 0; - public var tabh = 0; - public var ui:Zui; public var colorIdHandle = Id.handle(); - public var formatType = 0; public var formatQuality = 100.0; public var layersExport = 0; @@ -128,17 +107,6 @@ class UITrait { public var hwnd = Id.handle(); public var hwnd1 = Id.handle(); public var hwnd2 = Id.handle(); - public var materials:Array = null; - public var selectedMaterial:MaterialSlot; - public var materialsScene:Array = null; - public var selectedMaterialScene:MaterialSlot; - public var selectedTexture:zui.Canvas.TAsset = null; - public var brushes:Array = null; - public var selectedBrush:BrushSlot; - public var layers:Array = null; - public var undoLayers:Array = null; - public var selectedLayer:LayerSlot; - public var selectedLayerIsMask = false; // Mask selected for active layer public var selectTime = 0.0; public var displaceStrength = 1.0; public var decalImage:Image = null; @@ -168,9 +136,6 @@ class UITrait { public var cloneDeltaX = 0.0; public var cloneDeltaY = 0.0; - public var selectedObject:Object; - public var paintObject:MeshObject; - public var paintObjects:Array = null; public var gizmo:Object = null; public var gizmoX:Object = null; public var gizmoY:Object = null; @@ -194,7 +159,6 @@ class UITrait { public var brushHardness = 0.8; public var brushBias = 1.0; public var brushPaint = 0; - public var selectedTool = 0; public var brush3d = true; public var brushDepthReject = true; public var brushAngleReject = true; @@ -212,7 +176,6 @@ class UITrait { public var fillTypeHandle = new Handle(); public var resHandle = new Handle({position: 1}); // 2048 public var bitsHandle = new Handle({position: 0}); // 8bit - public var mergedObject:MeshObject = null; // For object mask var newConfirm = false; public var projectType = 0; // paint, material public var projectObjects:Array; @@ -263,19 +226,6 @@ class UITrait { _onBrush.push(f); } - public function dirty():Bool { - return paintDirty() || depthDirty() || rdirty > 0; - } - - public function depthDirty():Bool { - return ddirty > 0; - } - - public function paintDirty():Bool { - if (UITrait.inst.worktab.position == SpaceScene) return false; - return pdirty > 0; - } - public function new() { inst = this; @@ -286,35 +236,31 @@ class UITrait { arm.render.Uniforms.init(); - if (materials == null) { - materials = []; - // + if (Project.materials == null) { + Project.materials = []; Data.getMaterial("Scene", "Material", function(m:MaterialData) { - materials.push(new MaterialSlot(m)); - selectedMaterial = materials[0]; + Project.materials.push(new MaterialSlot(m)); + Context.material = Project.materials[0]; }); - // - // materials.push(new MaterialSlot()); - // selectedMaterial = materials[0]; } - if (materialsScene == null) { - materialsScene = []; + if (Project.materialsScene == null) { + Project.materialsScene = []; Data.getMaterial("Scene", "Material2", function(m:MaterialData) { - materialsScene.push(new MaterialSlot(m)); - selectedMaterialScene = materialsScene[0]; + Project.materialsScene.push(new MaterialSlot(m)); + Context.materialScene = Project.materialsScene[0]; }); } - if (brushes == null) { - brushes = []; - brushes.push(new BrushSlot()); - selectedBrush = brushes[0]; + if (Project.brushes == null) { + Project.brushes = []; + Project.brushes.push(new BrushSlot()); + Context.brush = Project.brushes[0]; } - if (layers == null) { - layers = []; - layers.push(new LayerSlot()); - selectedLayer = layers[0]; + if (Project.layers == null) { + Project.layers = []; + Project.layers.push(new LayerSlot()); + Context.layer = Project.layers[0]; } if (emptyEnvmap == null) { @@ -338,8 +284,8 @@ class UITrait { if (savedEnvmap == null) { savedEnvmap = world.envmap; } - world.envmap = UITrait.inst.showEnvmap ? UITrait.inst.savedEnvmap : UITrait.inst.emptyEnvmap; - ddirty = 1; + world.envmap = showEnvmap ? savedEnvmap : emptyEnvmap; + Context.ddirty = 1; // Save last pos for continuos paint iron.App.notifyOnRender(function(g:kha.graphics4.Graphics) { // @@ -348,29 +294,29 @@ class UITrait { hwnd1.redraws = 2; MaterialParser.parseMeshMaterial(); MaterialParser.parsePaintMaterial(); - ddirty = 0; - if (undoLayers == null) { - undoLayers = []; + Context.ddirty = 0; + if (History.undoLayers == null) { + History.undoLayers = []; for (i in 0...App.C.undo_steps) { - var l = new LayerSlot("_undo" + undoLayers.length); + var l = new LayerSlot("_undo" + History.undoLayers.length); l.createMask(0, false); - undoLayers.push(l); + History.undoLayers.push(l); } } } else if (frame == 3) { - ddirty = 1; + Context.ddirty = 1; } frame++; var m = Input.getMouse(); if (m.down()) { // - UITrait.inst.lastPaintVecX = UITrait.inst.paintVec.x; // - UITrait.inst.lastPaintVecY = UITrait.inst.paintVec.y; // + lastPaintVecX = paintVec.x; // + lastPaintVecY = paintVec.y; // }// else { - UITrait.inst.lastPaintVecX = m.x / iron.App.w(); - UITrait.inst.lastPaintVecY = m.y / iron.App.h(); + lastPaintVecX = m.x / iron.App.w(); + lastPaintVecY = m.y / iron.App.h(); } });// @@ -409,9 +355,9 @@ class UITrait { gizmoZ = Scene.active.getChild("GizmoZ"); // - selectedObject = Scene.active.getChild("Cube"); - paintObject = cast(selectedObject, MeshObject); - paintObjects = [paintObject]; + Context.object = Scene.active.getChild("Cube"); + Context.paintObject = cast(Context.object, MeshObject); + Context.paintObjects = [Context.paintObject]; if (App.fileArg == "") { iron.App.notifyOnRender(Layers.initLayers); @@ -463,17 +409,17 @@ class UITrait { if (kb.started("enter")) { App.showFiles = false; App.filesDone(App.path); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } } } if (!App.uienabled) return; - if (!UINodes.inst.ui.isTyping && !UITrait.inst.ui.isTyping) { + if (!UINodes.inst.ui.isTyping && !ui.isTyping) { if (shortcut(App.K.cycle_layers)) { - var i = (layers.indexOf(selectedLayer) + 1) % layers.length; - setLayer(layers[i]); + var i = (Project.layers.indexOf(Context.layer) + 1) % Project.layers.length; + Context.setLayer(Project.layers[i]); } else if (shortcut(App.K.toggle_2d_view)) { show2DView(); @@ -543,39 +489,39 @@ class UITrait { mouse.y > 0 && mouse.y < iron.App.h() && !ui.isTyping && !UIView2D.inst.ui.isTyping && !UINodes.inst.ui.isTyping) { - if (UITrait.inst.worktab.position == SpacePaint) { + if (worktab.position == SpacePaint) { if (shift) { - if (kb.started("1")) selectMaterial(0); - else if (kb.started("2")) selectMaterial(1); - else if (kb.started("3")) selectMaterial(2); - else if (kb.started("4")) selectMaterial(3); - else if (kb.started("5")) selectMaterial(4); - else if (kb.started("6")) selectMaterial(5); + if (kb.started("1")) Context.selectMaterial(0); + else if (kb.started("2")) Context.selectMaterial(1); + else if (kb.started("3")) Context.selectMaterial(2); + else if (kb.started("4")) Context.selectMaterial(3); + else if (kb.started("5")) Context.selectMaterial(4); + else if (kb.started("6")) Context.selectMaterial(5); } if (!ctrl && !mouse.down("right")) { - if (shortcut(App.K.tool_brush)) selectTool(ToolBrush); - else if (shortcut(App.K.tool_eraser)) selectTool(ToolEraser); - else if (shortcut(App.K.tool_fill)) selectTool(ToolFill); - else if (shortcut(App.K.tool_bake)) selectTool(ToolBake); - else if (shortcut(App.K.tool_colorid)) selectTool(ToolColorId); - else if (shortcut(App.K.tool_decal)) selectTool(ToolDecal); - else if (shortcut(App.K.tool_text)) selectTool(ToolText); - else if (shortcut(App.K.tool_clone)) selectTool(ToolClone); - else if (shortcut(App.K.tool_blur)) selectTool(ToolBlur); - else if (shortcut(App.K.tool_particle)) selectTool(ToolParticle); - else if (shortcut(App.K.tool_picker)) selectTool(ToolPicker); + if (shortcut(App.K.tool_brush)) Context.selectTool(ToolBrush); + else if (shortcut(App.K.tool_eraser)) Context.selectTool(ToolEraser); + else if (shortcut(App.K.tool_fill)) Context.selectTool(ToolFill); + else if (shortcut(App.K.tool_bake)) Context.selectTool(ToolBake); + else if (shortcut(App.K.tool_colorid)) Context.selectTool(ToolColorId); + else if (shortcut(App.K.tool_decal)) Context.selectTool(ToolDecal); + else if (shortcut(App.K.tool_text)) Context.selectTool(ToolText); + else if (shortcut(App.K.tool_clone)) Context.selectTool(ToolClone); + else if (shortcut(App.K.tool_blur)) Context.selectTool(ToolBlur); + else if (shortcut(App.K.tool_particle)) Context.selectTool(ToolParticle); + else if (shortcut(App.K.tool_picker)) Context.selectTool(ToolPicker); } // Radius if (!ctrl && !shift) { - if (selectedTool == ToolBrush || - selectedTool == ToolEraser || - selectedTool == ToolDecal || - selectedTool == ToolText || - selectedTool == ToolClone || - selectedTool == ToolBlur || - selectedTool == ToolParticle) { + if (Context.tool == ToolBrush || + Context.tool == ToolEraser || + Context.tool == ToolDecal || + Context.tool == ToolText || + Context.tool == ToolClone || + Context.tool == ToolBlur || + Context.tool == ToolParticle) { if (shortcut(App.K.brush_radius)) { brushCanLock = true; mouse.lock(); @@ -631,61 +577,6 @@ class UITrait { App.resize(); } - public function selectMaterialScene(i:Int) { - if (materialsScene.length <= i || selectedObject == paintObject) return; - selectedMaterialScene = materialsScene[i]; - if (Std.is(selectedObject, MeshObject)) { - cast(selectedObject, MeshObject).materials[0] = selectedMaterialScene.data; - } - UINodes.inst.updateCanvasMap(); - MaterialParser.parsePaintMaterial(); - hwnd.redraws = 2; - } - - public function selectMaterial(i:Int) { - if (materials.length <= i) return; - setMaterial(materials[i]); - } - - public function setMaterial(m:MaterialSlot) { - selectedMaterial = m; - UINodes.inst.updateCanvasMap(); - MaterialParser.parsePaintMaterial(); - hwnd1.redraws = 2; - headerHandle.redraws = 2; - - var current = @:privateAccess kha.graphics4.Graphics2.current; - if (current != null) current.end(); - var decal = selectedTool == ToolDecal || selectedTool == ToolText; - if (decal) RenderUtil.makeDecalPreview(); - if (current != null) current.begin(false); - } - - public function selectBrush(i:Int) { - if (brushes.length <= i) return; - selectedBrush = brushes[i]; - UINodes.inst.updateCanvasBrushMap(); - MaterialParser.parseBrush(); - hwnd1.redraws = 2; - } - - public function setLayer(l:LayerSlot, isMask = false) { - selectedLayer = l; - selectedLayerIsMask = isMask; - headerHandle.redraws = 2; - - var current = @:privateAccess kha.graphics4.Graphics2.current; - if (current != null) current.end(); - - setObjectMask(); - MaterialParser.parseMeshMaterial(); - MaterialParser.parsePaintMaterial(); - - if (current != null) current.begin(false); - - hwnd.redraws = 2; - } - function updateUI() { if (messageTimer > 0) { @@ -707,20 +598,20 @@ class UITrait { if (mx < iron.App.w() && mx > iron.App.x() && my < iron.App.h() && my > iron.App.y()) { - if (selectedTool == ToolClone && kb.down("alt")) { // Clone source + if (Context.tool == ToolClone && kb.down("alt")) { // Clone source cloneStartX = mx; cloneStartY = my; } else { if (brushTime == 0) { // Paint started - pushUndo = true; + History.pushUndo = true; kha.Window.get(0).title = App.filenameHandle.text + "* - ArmorPaint"; - if (selectedTool == ToolClone && cloneStartX >= 0.0) { // Clone delta + if (Context.tool == ToolClone && cloneStartX >= 0.0) { // Clone delta cloneDeltaX = (cloneStartX - mx) / iron.App.w(); cloneDeltaY = (cloneStartY - my) / iron.App.h(); cloneStartX = -1; } - else if (selectedTool == ToolParticle) { + else if (Context.tool == ToolParticle) { // Reset particles var emitter:MeshObject = cast Scene.active.getChild(".ParticleEmitter"); var psys = emitter.particleSystems[0]; @@ -737,16 +628,16 @@ class UITrait { } else if (brushTime > 0) { // Brush released brushTime = 0; - ddirty = 3; - brushBlendDirty = true; // Update brush mask - layerPreviewDirty = true; // Update layer preview + Context.ddirty = 3; + Context.brushBlendDirty = true; // Update brush mask + Context.layerPreviewDirty = true; // Update layer preview } - if (layersPreviewDirty) { - layersPreviewDirty = false; - layerPreviewDirty = false; + if (Context.layersPreviewDirty) { + Context.layersPreviewDirty = false; + Context.layerPreviewDirty = false; // Update all layer previews - for (l in layers) { + for (l in Project.layers) { var target = l.texpaint_preview; var source = l.texpaint; var g2 = target.g2; @@ -764,12 +655,12 @@ class UITrait { } hwnd.redraws = 2; } - if (layerPreviewDirty) { - layerPreviewDirty = false; + if (Context.layerPreviewDirty) { + Context.layerPreviewDirty = false; // Update layer preview - var l = selectedLayer; - var target = selectedLayerIsMask ? l.texpaint_mask_preview : l.texpaint_preview; - var source = selectedLayerIsMask ? l.texpaint_mask : l.texpaint; + var l = Context.layer; + var target = Context.layerIsMask ? l.texpaint_mask_preview : l.texpaint_preview; + var source = Context.layerIsMask ? l.texpaint_mask : l.texpaint; var g2 = target.g2; g2.begin(true, 0xff000000); g2.drawScaledImage(source, 0, 0, target.width, target.height); @@ -789,7 +680,7 @@ class UITrait { if (undoPressed) History.doUndo(); else if (redoPressed) History.doRedo(); - if (UITrait.inst.worktab.position == SpaceScene) { + if (worktab.position == SpaceScene) { arm.plugin.Gizmo.update(); } @@ -835,8 +726,8 @@ class UITrait { } // Show picked material next to cursor - if (selectedTool == ToolPicker && UITrait.inst.pickerSelectMaterial) { - var img = selectedMaterial.imageIcon; + if (Context.tool == ToolPicker && pickerSelectMaterial) { + var img = Context.material.imageIcon; g.drawImage(img, mx + 10, my + 10); } @@ -845,7 +736,7 @@ class UITrait { // Clone source cursor var kb = Input.getKeyboard(); - if (selectedTool == ToolClone && !kb.down("alt") && (mouse.down() || pen.down())) { + if (Context.tool == ToolClone && !kb.down("alt") && (mouse.down() || pen.down())) { g.color = 0x66ffffff; g.drawScaledImage(cursorImg, mx + cloneDeltaX * iron.App.w() - psize / 2, my + cloneDeltaY * iron.App.h() - psize / 2, psize, psize); g.color = 0xffffffff; @@ -854,7 +745,7 @@ class UITrait { var in2dView = UIView2D.inst.show && UIView2D.inst.type == 0 && mx > UIView2D.inst.wx && mx < UIView2D.inst.wx + UIView2D.inst.ww && my > UIView2D.inst.wy && my < UIView2D.inst.wy + UIView2D.inst.wh; - var decal = selectedTool == ToolDecal || selectedTool == ToolText; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; if (!brush3d || in2dView || decal) { if (decal) { @@ -865,11 +756,11 @@ class UITrait { g.drawScaledImage(decalImage, mx - psize / 2, my - psize / 2 + psize, psize, -psize); #end } - else if (selectedTool == ToolBrush || - selectedTool == ToolEraser || - selectedTool == ToolClone || - selectedTool == ToolBlur || - selectedTool == ToolParticle) { + else if (Context.tool == ToolBrush || + Context.tool == ToolEraser || + Context.tool == ToolClone || + Context.tool == ToolBlur || + Context.tool == ToolParticle) { g.drawScaledImage(cursorImg, mx - psize / 2, my - psize / 2, psize, psize); } } @@ -894,8 +785,6 @@ class UITrait { App.resize(); } - // function showParticleNodes() {} - public function show2DView(type = 0) { // Clear input state as ui receives input events even when not drawn @:privateAccess UIView2D.inst.ui.endInput(); @@ -905,78 +794,10 @@ class UITrait { App.resize(); } - function selectTool(i:Int) { - selectedTool = i; - MaterialParser.parsePaintMaterial(); - MaterialParser.parseMeshMaterial(); - headerHandle.redraws = 2; - toolbarHandle.redraws = 2; - - var decal = selectedTool == ToolDecal || selectedTool == ToolText; - if (decal) { - var current = @:privateAccess kha.graphics4.Graphics2.current; - if (current != null) current.end(); - - if (selectedTool == ToolDecal) { - RenderUtil.makeDecalMaskPreview(); - } - else if (selectedTool == ToolText) { - RenderUtil.makeTextPreview(); - } - - RenderUtil.makeDecalPreview(); - ddirty = 2; - - if (current != null) current.begin(false); - } - - if (selectedTool == ToolParticle) { - Tool.initParticle(); - MaterialParser.parseParticleMaterial(); - } - } - - public function selectObject(o:Object) { - selectedObject = o; - - if (UITrait.inst.worktab.position == SpaceScene) { - if (Std.is(o, MeshObject)) { - for (i in 0...materialsScene.length) { - if (materialsScene[i].data == cast(o, MeshObject).materials[0]) { - // selectMaterial(i); // loop - selectedMaterialScene = materialsScene[i]; - hwnd.redraws = 2; - break; - } - } - } - } - } - - public function selectPaintObject(o:MeshObject) { - headerHandle.redraws = 2; - for (p in paintObjects) p.skip_context = "paint"; - paintObject = o; - - var mask = selectedLayer.objectMask; - if (layerFilter > 0) mask = layerFilter; - - if (mergedObject == null || mask > 0) { - paintObject.skip_context = ""; - } - UVUtil.uvmapCached = false; - UVUtil.trianglemapCached = false; - } - public function getImage(asset:zui.Canvas.TAsset):Image { return asset != null ? zui.Canvas.assetMap.get(asset.id) : null; } - public function mainObject():MeshObject { - for (po in paintObjects) if (po.children.length > 0) return po; - return paintObjects[0]; - } - function renderUI(g:kha.graphics2.Graphics) { if (!App.uienabled && ui.inputRegistered) ui.unregisterInput(); @@ -994,25 +815,25 @@ class UITrait { ui.imageScrollAlign = false; - if (UITrait.inst.worktab.position == SpacePaint) { + if (worktab.position == SpacePaint) { var keys = ['(B)', '(E)', '(G)', '(D)', '(T)', '(L) - Hold ALT to set source', '(U)', '(P)', '(K)', '(C)', '(V)']; var img = Res.get("icons.png"); var imgw = ui.SCALE > 1 ? 100 : 50; for (i in 0...toolNames.length) { ui._x += 2; - if (selectedTool == i) ui.rect(-1, -1, 50 + 2, 50 + 2, ui.t.HIGHLIGHT_COL, 2); - if (ui.image(img, -1, null, i * imgw, 0, imgw, imgw) == State.Started) selectTool(i); + if (Context.tool == i) ui.rect(-1, -1, 50 + 2, 50 + 2, ui.t.HIGHLIGHT_COL, 2); + if (ui.image(img, -1, null, i * imgw, 0, imgw, imgw) == State.Started) Context.selectTool(i); if (ui.isHovered) ui.tooltip(toolNames[i] + " " + keys[i]); ui._x -= 2; ui._y += 2; } } - else if (UITrait.inst.worktab.position == SpaceScene) { + else if (worktab.position == SpaceScene) { var img = Res.get("icons.png"); var imgw = ui.SCALE > 1 ? 100 : 50; ui._x += 2; - if (selectedTool == ToolGizmo) ui.rect(-1, -1, 50 + 2, 50 + 2, ui.t.HIGHLIGHT_COL, 2); - if (ui.image(img, -1, null, imgw * 11, 0, imgw, imgw) == State.Started) selectTool(ToolGizmo); + if (Context.tool == ToolGizmo) ui.rect(-1, -1, 50 + 2, 50 + 2, ui.t.HIGHLIGHT_COL, 2); + if (ui.image(img, -1, null, imgw * 11, 0, imgw, imgw) == State.Started) Context.selectTool(ToolGizmo); if (ui.isHovered) ui.tooltip("Gizmo (G)"); ui._x -= 2; ui._y += 2; @@ -1054,7 +875,7 @@ class UITrait { // ui.tab(worktab, "Sculpt"); ui.tab(worktab, "Scene"); if (worktab.changed) { - ddirty = 2; + Context.ddirty = 2; toolbarHandle.redraws = 2; headerHandle.redraws = 2; hwnd.redraws = 2; @@ -1062,11 +883,11 @@ class UITrait { hwnd2.redraws = 2; if (worktab.position == SpaceScene) { - selectTool(ToolGizmo); + Context.selectTool(ToolGizmo); } MaterialParser.parseMeshMaterial(); - mainObject().skip_context = null; + Context.mainObject().skip_context = null; } } @@ -1074,9 +895,9 @@ class UITrait { if (App.C.ui_layout == 1 && (UINodes.inst.show || UIView2D.inst.show)) panelx = panelx - App.w() - toolbarw; if (ui.window(headerHandle, panelx, headerh, System.windowWidth() - toolbarw - windowW, Std.int((ui.t.ELEMENT_H + 2) * ui.SCALE))) { - if (UITrait.inst.worktab.position == SpacePaint) { + if (worktab.position == SpacePaint) { - if (selectedTool == ToolColorId) { + if (Context.tool == ToolColorId) { ui.text("Picked Color"); if (colorIdPicked) { ui.image(RenderPath.active.renderTargets.get("texpaint_colorid").image, 0xffffffff, 64); @@ -1084,9 +905,9 @@ class UITrait { if (ui.button("Clear")) colorIdPicked = false; ui.text("Color ID Map"); var cid = ui.combo(colorIdHandle, App.getEnumTexts(), "Color ID"); - if (UITrait.inst.assets.length > 0) ui.image(UITrait.inst.getImage(UITrait.inst.assets[cid])); + if (Project.assets.length > 0) ui.image(getImage(Project.assets[cid])); } - else if (selectedTool == ToolPicker) { + else if (Context.tool == ToolPicker) { baseRPicked = Math.round(baseRPicked * 10) / 10; baseGPicked = Math.round(baseGPicked * 10) / 10; baseBPicked = Math.round(baseBPicked * 10) / 10; @@ -1108,7 +929,7 @@ class UITrait { MaterialParser.parsePaintMaterial(); } } - else if (selectedTool == ToolBake) { + else if (Context.tool == ToolBake) { var bakeHandle = Id.handle({position: bakeType}); bakeType = ui.combo(bakeHandle, ["AO", "Position", "TexCoord", "Material ID", "Normal (World)"], "Bake"); if (bakeHandle.changed) { @@ -1127,18 +948,18 @@ class UITrait { } } else { - if (selectedTool != ToolFill) { + if (Context.tool != ToolFill) { brushRadius = ui.slider(brushRadiusHandle, "Radius", 0.0, 2.0, true); } - if (selectedTool == ToolBrush || - selectedTool == ToolFill || - selectedTool == ToolDecal || - selectedTool == ToolText) { + if (Context.tool == ToolBrush || + Context.tool == ToolFill || + Context.tool == ToolDecal || + Context.tool == ToolText) { var brushScaleHandle = Id.handle({value: brushScale}); brushScale = ui.slider(brushScaleHandle, "UV Scale", 0.0, 2.0, true); if (brushScaleHandle.changed) { - if (selectedTool == ToolDecal || selectedTool == ToolText) { + if (Context.tool == ToolDecal || Context.tool == ToolText) { ui.g.end(); RenderUtil.makeDecalMaskPreview(); RenderUtil.makeDecalPreview(); @@ -1153,20 +974,20 @@ class UITrait { brushOpacity = ui.slider(Id.handle({value: brushOpacity}), "Opacity", 0.0, 1.0, true); - if (selectedTool == ToolBrush || selectedTool == ToolEraser) { + if (Context.tool == ToolBrush || Context.tool == ToolEraser) { brushHardness = ui.slider(Id.handle({value: brushHardness}), "Hardness", 0.0, 1.0, true); } ui.combo(Id.handle(), ["Add"], "Blending"); - if (selectedTool == ToolBrush || selectedTool == ToolFill) { + if (Context.tool == ToolBrush || Context.tool == ToolFill) { var paintHandle = Id.handle(); brushPaint = ui.combo(paintHandle, ["UV Map", "Project", "Triplanar"], "TexCoord"); if (paintHandle.changed) { MaterialParser.parsePaintMaterial(); } } - if (selectedTool == ToolDecal) { + if (Context.tool == ToolDecal) { ui.combo(decalMaskHandle, ["Rectangle", "Circle", "Triangle"], "Mask"); if (decalMaskHandle.changed) { ui.g.end(); @@ -1175,7 +996,7 @@ class UITrait { ui.g.begin(false); } } - if (selectedTool == ToolText) { + if (Context.tool == ToolText) { ui.combo(textToolHandle, Importer.fontList, "Font"); var h = Id.handle(); h.text = textToolText; @@ -1188,7 +1009,7 @@ class UITrait { } } - if (selectedTool == ToolFill) { + if (Context.tool == ToolFill) { ui.combo(fillTypeHandle, ["Object", "Face", "Angle"], "Fill Mode"); if (fillTypeHandle.changed) { if (fillTypeHandle.position == 1) { @@ -1270,7 +1091,7 @@ class UITrait { TabPreferences.draw(); } if (ui.window(hwnd1, tabx, tabh, windowW, tabh)) { - selectedObject = paintObject; + Context.object = Context.paintObject; TabMaterials.draw(); TabBrushes.draw(); TabParticles.draw(); @@ -1303,61 +1124,6 @@ class UITrait { g.begin(false); } - public function setObjectMask() { - var ar = ["None"]; - for (p in paintObjects) ar.push(p.name); - - var mask = selectedLayer.objectMask; - if (layerFilter > 0) mask = layerFilter; - if (mask > 0) { - if (mergedObject != null) mergedObject.visible = false; - var o = paintObjects[0]; - for (p in paintObjects) if (p.name == ar[mask]) { o = p; break; } - selectPaintObject(o); - } - else { - if (mergedObject == null) { - MeshUtil.mergeMesh(); - } - selectPaintObject(mainObject()); - paintObject.skip_context = "paint"; - mergedObject.visible = true; - } - } - - public function newLayer():LayerSlot { - if (layers.length > 255) return null; - var l = new LayerSlot(); - layers.push(l); - setLayer(l); - iron.App.notifyOnRender(Layers.clearLastLayer); - layerPreviewDirty = true; - return l; - } - - public function toFillLayer(l:LayerSlot) { - setLayer(l); - l.material_mask = UITrait.inst.selectedMaterial; - function makeFill(g:kha.graphics4.Graphics) { - g.end(); - Layers.updateFillLayers(4); - MaterialParser.parsePaintMaterial(); - UITrait.inst.layerPreviewDirty = true; - hwnd.redraws = 2; - g.begin(); - iron.App.removeRender(makeFill); - } - iron.App.notifyOnRender(makeFill); - } - - public function toPaintLayer(l:LayerSlot) { - setLayer(l); - l.material_mask = null; - MaterialParser.parsePaintMaterial(); - UITrait.inst.layerPreviewDirty = true; - hwnd.redraws = 2; - } - public function setIconScale() { if (ui.SCALE > 1) { Res.load(["icons2x.png"], function() { @@ -1369,39 +1135,6 @@ class UITrait { } } - public function removeMaterialCache() { - Data.cachedMaterials.remove("SceneMaterial2"); - Data.cachedShaders.remove("Material2_data"); - Data.cachedSceneRaws.remove("Material2_data"); - // Data.cachedBlobs.remove("Material2_data.arm"); - } - - public function createFillLayer() { - var l = UITrait.inst.newLayer(); - l.objectMask = UITrait.inst.layerFilter; - UITrait.inst.toFillLayer(l); - } - - public function createImageMask(asset:zui.Canvas.TAsset) { - var l = UITrait.inst.selectedLayer; - if (l != UITrait.inst.layers[0]) { - l.createMask(0x00000000, true, UITrait.inst.getImage(asset)); - UITrait.inst.setLayer(l, true); - UITrait.inst.layerPreviewDirty = true; - } - } - - public function importMesh() { - App.showFiles = true; - App.whandle.redraws = 2; - App.foldersOnly = false; - App.showFilename = false; - UIFiles.filters = "obj,fbx,blend,arm"; - App.filesDone = function(path:String) { - Importer.importFile(path); - } - } - function shortcut(s:String):Bool { var kb = Input.getKeyboard(); var flag = true; diff --git a/Sources/arm/ui/UIView2D.hx b/Sources/arm/ui/UIView2D.hx index 7cbcbdf8..a5957882 100644 --- a/Sources/arm/ui/UIView2D.hx +++ b/Sources/arm/ui/UIView2D.hx @@ -70,7 +70,7 @@ class UIView2D { if (!show) return; if (System.windowWidth() == 0 || System.windowHeight() == 0) return; - if (UITrait.inst.pdirty >= 0) hwnd.redraws = 2; // Paint was active + if (Context.pdirty >= 0) hwnd.redraws = 2; // Paint was active var tw = iron.App.w() * 0.95 * panScale; var tx = iron.App.w() / 2 - tw / 2 + panX; @@ -97,15 +97,15 @@ class UIView2D { // Texture ui.g.pipeline = pipe; - var l = UITrait.inst.selectedLayer; + var l = Context.layer; var tex:Image = null; if (type == 0) { // Layer tex = texType == 0 ? l.texpaint : texType == 1 ? l.texpaint_nor : l.texpaint_pack; - if (UITrait.inst.selectedLayerIsMask) tex = l.texpaint_mask; + if (Context.layerIsMask) tex = l.texpaint_mask; } else { // Texture - tex = UITrait.inst.getImage(UITrait.inst.selectedTexture); + tex = UITrait.inst.getImage(Context.texture); } var th = tw; @@ -139,9 +139,9 @@ class UIView2D { l.name = ui.textInput(h, "", Right); } else { - var asset = UITrait.inst.selectedTexture; + var asset = Context.texture; if (asset != null) { - var assetNames = UITrait.inst.assetNames; + var assetNames = Project.assetNames; var i = assetNames.indexOf(asset.name); h.text = asset.name; asset.name = ui.textInput(h, "", Right); diff --git a/Sources/arm/util/MeshUtil.hx b/Sources/arm/util/MeshUtil.hx index 4c96d105..e39ab209 100644 --- a/Sources/arm/util/MeshUtil.hx +++ b/Sources/arm/util/MeshUtil.hx @@ -15,7 +15,7 @@ class MeshUtil { var vlen = 0; var ilen = 0; var maxScale = 0.0; - var paintObjects = UITrait.inst.paintObjects; + var paintObjects = Context.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; @@ -49,7 +49,7 @@ class MeshUtil { } var raw:TMeshData = { - name: UITrait.inst.paintObject.name, + name: Context.paintObject.name, vertex_arrays: [ { values: va0, attrib: "pos" }, { values: va1, attrib: "nor" }, @@ -63,15 +63,15 @@ class MeshUtil { }; 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); + Context.mergedObject = new MeshObject(md, Context.paintObject.materials); + Context.mergedObject.name = Context.paintObject.name; + Context.mergedObject.force_context = "paint"; + Context.mainObject().addChild(Context.mergedObject); }); } public static function swapAxis(a:Int, b:Int) { - for (p in UITrait.inst.paintObjects) { + for (p in Context.paintObjects) { // Remapping vertices, backle up // 0 - x, 1 - y, 2 - z var vas = p.data.raw.vertex_arrays; @@ -111,16 +111,16 @@ class MeshUtil { g.vertexBuffer.unlock(); } - if (UITrait.inst.mergedObject != null) { - UITrait.inst.mergedObject.remove(); - Data.deleteMesh(UITrait.inst.mergedObject.data.handle); - UITrait.inst.mergedObject = null; + if (Context.mergedObject != null) { + Context.mergedObject.remove(); + Data.deleteMesh(Context.mergedObject.data.handle); + Context.mergedObject = null; } mergeMesh(); } public static function flipNormals() { - for (p in UITrait.inst.paintObjects) { + for (p in Context.paintObjects) { var g = p.data.geom; var vertices = g.vertexBuffer.lockInt16(); // posnortex for (i in 0...Std.int(vertices.length / 8)) { @@ -138,7 +138,7 @@ class MeshUtil { var vc = new Vec4(); var cb = new Vec4(); var ab = new Vec4(); - for (p in UITrait.inst.paintObjects) { + for (p in Context.paintObjects) { var g = p.data.geom; var inda = g.indices[0]; var vertices = g.vertexBuffer.lockInt16(); // posnortex diff --git a/Sources/arm/util/RenderUtil.hx b/Sources/arm/util/RenderUtil.hx index e1a0ebbe..6eb846a7 100644 --- a/Sources/arm/util/RenderUtil.hx +++ b/Sources/arm/util/RenderUtil.hx @@ -24,16 +24,16 @@ class RenderUtil { sphere.visible = true; var meshes = Scene.active.meshes; Scene.active.meshes = [sphere]; - var painto = UITrait.inst.paintObject; - UITrait.inst.paintObject = sphere; + var painto = Context.paintObject; + Context.paintObject = sphere; if (UITrait.inst.worktab.position == SpaceScene) { - sphere.materials[0] = UITrait.inst.selectedMaterialScene.data; - UITrait.inst.selectedMaterialScene.previewReady = true; + sphere.materials[0] = Context.materialScene.data; + Context.materialScene.previewReady = true; } else { - sphere.materials[0] = UITrait.inst.materials[0].data; - UITrait.inst.selectedMaterial.previewReady = true; + sphere.materials[0] = Project.materials[0].data; + Context.material.previewReady = true; } UITrait.inst.savedCamera.setFrom(Scene.active.camera.transform.local); @@ -67,7 +67,7 @@ class RenderUtil { // Restore sphere.visible = false; Scene.active.meshes = meshes; - UITrait.inst.paintObject = painto; + Context.paintObject = painto; Scene.active.camera.transform.setMatrix(UITrait.inst.savedCamera); ViewportUtil.updateCameraType(UITrait.inst.cameraType); @@ -78,7 +78,7 @@ class RenderUtil { probe.raw.strength = savedProbe; Scene.active.world.envmap = UITrait.inst.showEnvmap ? UITrait.inst.savedEnvmap : UITrait.inst.emptyEnvmap; MaterialParser.parseMeshMaterial(); - UITrait.inst.ddirty = 0; + Context.ddirty = 0; } public static function makeDecalPreview() { @@ -94,8 +94,8 @@ class RenderUtil { plane.visible = true; var meshes = Scene.active.meshes; Scene.active.meshes = [plane]; - var painto = UITrait.inst.paintObject; - UITrait.inst.paintObject = plane; + var painto = Context.paintObject; + Context.paintObject = plane; UITrait.inst.savedCamera.setFrom(Scene.active.camera.transform.local); var m = Mat4.identity(); @@ -126,7 +126,7 @@ class RenderUtil { // Restore plane.visible = false; Scene.active.meshes = meshes; - UITrait.inst.paintObject = painto; + Context.paintObject = painto; Scene.active.camera.transform.setMatrix(UITrait.inst.savedCamera); Scene.active.camera.data.raw.fov = savedFov; @@ -138,7 +138,7 @@ class RenderUtil { Scene.active.world.envmap = UITrait.inst.showEnvmap ? UITrait.inst.savedEnvmap : UITrait.inst.emptyEnvmap; MaterialParser.parseMeshMaterial(); - UITrait.inst.ddirty = 0; + Context.ddirty = 0; } public static function makeTextPreview() { diff --git a/Sources/arm/util/UVUtil.hx b/Sources/arm/util/UVUtil.hx index 64d80e3a..51af796c 100644 --- a/Sources/arm/util/UVUtil.hx +++ b/Sources/arm/util/UVUtil.hx @@ -19,7 +19,7 @@ class UVUtil { } uvmapCached = true; - var merged = UITrait.inst.mergedObject != null ? UITrait.inst.mergedObject.data.raw : UITrait.inst.paintObject.data.raw; + var merged = Context.mergedObject != null ? Context.mergedObject.data.raw : Context.paintObject.data.raw; var mesh = merged; var texa = mesh.vertex_arrays[2].values; var inda = mesh.index_arrays[0].values; @@ -50,7 +50,7 @@ class UVUtil { } trianglemapCached = true; - var merged = UITrait.inst.mergedObject != null ? UITrait.inst.mergedObject.data.raw : UITrait.inst.paintObject.data.raw; + var merged = Context.mergedObject != null ? Context.mergedObject.data.raw : Context.paintObject.data.raw; var mesh = merged; var texa = mesh.vertex_arrays[2].values; var inda = mesh.index_arrays[0].values; diff --git a/Sources/arm/util/ViewportUtil.hx b/Sources/arm/util/ViewportUtil.hx index 87ddd94a..ce7726a6 100644 --- a/Sources/arm/util/ViewportUtil.hx +++ b/Sources/arm/util/ViewportUtil.hx @@ -8,11 +8,11 @@ import arm.ui.UITrait; class ViewportUtil { public static function scaleToBounds() { - var po = UITrait.inst.mergedObject == null ? UITrait.inst.mainObject() : UITrait.inst.mergedObject; + var po = Context.mergedObject == null ? Context.mainObject() : Context.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 = Context.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; @@ -30,7 +30,7 @@ class ViewportUtil { UITrait.inst.camHandle.position = 0; cam.data.raw.ortho = null; cam.buildProjection(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; arm.plugin.Camera.inst.reset(); break; } @@ -38,15 +38,15 @@ class ViewportUtil { } public static function setView(x:Float, y:Float, z:Float, rx:Float, ry:Float, rz:Float) { - UITrait.inst.selectedObject.transform.rot.set(0, 0, 0, 1); - UITrait.inst.selectedObject.transform.dirty = true; + Context.object.transform.rot.set(0, 0, 0, 1); + Context.object.transform.dirty = true; var cam = Scene.active.camera; var dist = cam.transform.loc.length(); cam.transform.loc.set(x * dist, y * dist, z * dist); cam.transform.rot.fromEuler(rx, ry, rz); cam.transform.buildMatrix(); cam.buildProjection(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; arm.plugin.Camera.inst.reset(); } @@ -57,7 +57,7 @@ class ViewportUtil { cam.transform.rotate(new Vec4(0, 0, 1), x); cam.transform.rotate(cam.rightWorld(), y); cam.transform.move(cam.lookWorld(), -dist); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } public static function updateCameraType(cameraType:Int) { @@ -78,6 +78,6 @@ class ViewportUtil { light.visible = false; } cam.buildProjection(); - UITrait.inst.ddirty = 2; + Context.ddirty = 2; } }