Files
armorpaint/Sources/arm/Uniforms.hx
T
2019-02-02 18:49:19 +01:00

87 lines
3.2 KiB
Haxe

package arm;
import iron.data.MaterialData;
import iron.object.Object;
class Uniforms {
public static function init() {
iron.object.Uniforms.externalFloatLinks = [linkFloat];
iron.object.Uniforms.externalVec2Links = [linkVec2];
iron.object.Uniforms.externalVec4Links = [linkVec4];
iron.object.Uniforms.externalTextureLinks.push(linkTex);
}
public static function linkFloat(object:Object, mat:MaterialData, link:String):Null<kha.FastFloat> {
if (link == '_brushRadius') {
var r = (UITrait.inst.brushRadius * UITrait.inst.brushNodesRadius) / 15.0;
var pen = iron.system.Input.getPen();
if (UITrait.penPressure && pen.down()) r *= pen.pressure;
return r;
}
else if (link == '_brushOpacity') {
return UITrait.inst.brushOpacity * UITrait.inst.brushNodesOpacity;
}
else if (link == '_brushScale') {
return (UITrait.inst.brushScale * UITrait.inst.brushNodesScale) * 2.0;
}
else if (link == '_brushStrength') {
var f = UITrait.inst.brushStrength * UITrait.inst.brushNodesStrength;
return f * f * 100;
}
else if (link == '_paintDepthBias') {
return UITrait.inst.paintVisible ? 0.0001 : 1.0;
}
return null;
}
public static function linkVec2(object:Object, mat:MaterialData, link:String):iron.math.Vec4 {
var vec2 = UITrait.inst.vec2;
if (link == '_sub') {
var seps = UITrait.inst.brushBias * 0.0004 * Config.getTextureResBias();
var sub = UITrait.inst.sub;
sub = (sub + 1) % 9;
if (sub == 0) vec2.set(0.0 + seps, 0.0, 0.0);
else if (sub == 1) vec2.set(0.0 - seps, 0.0, 0.0);
else if (sub == 2) vec2.set(0.0, 0.0 + seps, 0.0);
else if (sub == 3) vec2.set(0.0, 0.0 - seps, 0.0);
else if (sub == 4) vec2.set(0.0 + seps, 0.0 + seps, 0.0);
else if (sub == 5) vec2.set(0.0 - seps, 0.0 - seps, 0.0);
else if (sub == 6) vec2.set(0.0 + seps, 0.0 - seps, 0.0);
else if (sub == 7) vec2.set(0.0 - seps, 0.0 + seps, 0.0);
else if (sub == 8) vec2.set(0.0, 0.0, 0.0);
return vec2;
}
else if (link == '_texcoloridSize') {
vec2.set(0, 0, 0);
if (UITrait.inst.assets.length == 0) return vec2;
var img = UITrait.inst.getImage(UITrait.inst.assets[UITrait.inst.colorIdHandle.position]);
vec2.set(img.width, img.height, 0);
return vec2;
}
return null;
}
public static function linkVec4(object:Object, mat:MaterialData, link:String):iron.math.Vec4 {
var vec2 = UITrait.inst.vec2;
if (link == '_inputBrush') {
var down = iron.system.Input.getMouse().down() || iron.system.Input.getPen().down();
vec2.set(UITrait.inst.paintVec.x, UITrait.inst.paintVec.y, down ? 1.0 : 0.0, 0.0);
return vec2;
}
else if (link == '_inputBrushLast') {
var down = iron.system.Input.getMouse().down() || iron.system.Input.getPen().down();
vec2.set(UITrait.inst.lastPaintVecX, UITrait.inst.lastPaintVecY, down ? 1.0 : 0.0, 0.0);
return vec2;
}
return null;
}
public static function linkTex(object:Object, mat:MaterialData, link:String):kha.Image {
if (link == "_texcolorid") {
if (UITrait.inst.assets.length == 0) return UITrait.inst.bundled.get("empty.jpg");
else return UITrait.inst.getImage(UITrait.inst.assets[UITrait.inst.colorIdHandle.position]);
}
return null;
}
}