177 lines
4.9 KiB
Haxe
177 lines
4.9 KiB
Haxe
package arm;
|
|
|
|
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;
|
|
|
|
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 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 Project.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 Project.paintObjects) if (po.children.length > 0) return po;
|
|
return Project.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() {
|
|
UIFiles.show = true;
|
|
UIFiles.isSave = false;
|
|
UIFiles.filters = "obj,fbx,blend,arm";
|
|
UIFiles.filesDone = function(path:String) {
|
|
Importer.importFile(path);
|
|
}
|
|
}
|
|
}
|