Files
armorpaint/Sources/arm/Context.hx
T
2019-11-20 16:36:08 +01:00

163 lines
4.5 KiB
Haxe

package arm;
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.util.ParticleUtil;
import arm.ui.UITrait;
import arm.ui.UINodes;
import arm.ui.UIFiles;
import arm.node.MaterialParser;
import arm.Tool;
import arm.Project;
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) {
if (Project.materials.indexOf(m) == -1) return;
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) {
if (l == layer && layerIsMask == isMask) return;
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) {
ParticleUtil.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];
}
}