diff --git a/armory/Sources/armory/logicnode/DistanceScreenToWorldSpaceNode.hx b/armory/Sources/armory/logicnode/DistanceScreenToWorldSpaceNode.hx new file mode 100644 index 000000000..af68ad658 --- /dev/null +++ b/armory/Sources/armory/logicnode/DistanceScreenToWorldSpaceNode.hx @@ -0,0 +1,24 @@ +package armory.logicnode; + +import iron.math.Vec4; +import iron.math.RayCaster; + +class DistanceScreenToWorldSpaceNode extends LogicNode { + + public function new(tree: LogicTree) { + super(tree); + } + + override function get(from: Int): Dynamic { + var vInput: Vec4 = new Vec4(); + vInput.x = inputs[0].get(); + vInput.y = inputs[1].get(); + + var cam = iron.Scene.active.camera; + if (cam == null) return null; + + return (inputs[2].get().y) - cam.transform.world.getLoc().y / RayCaster.getRay(vInput.x, vInput.y, cam).direction.y; + //return RayCaster.getRay(vInput.x, vInput.y, cam).distanceToPoint(inputs[2].get()); + + } +} \ No newline at end of file diff --git a/armory/blender/arm/logicnode/math/LN_distance_screen_to_world_space.py b/armory/blender/arm/logicnode/math/LN_distance_screen_to_world_space.py new file mode 100644 index 000000000..1973c87fc --- /dev/null +++ b/armory/blender/arm/logicnode/math/LN_distance_screen_to_world_space.py @@ -0,0 +1,24 @@ +from arm.logicnode.arm_nodes import * + + +class DistanceScreenToWorldSpaceNode(ArmLogicTreeNode): + """Gets the distance from given screen coordinates to World coordinates. + + @input Screen X: screen x position. + @input Screen Y: screen y position. + @input At: World coordinates is a vector position. + + @output Distance At: distance result. + """ + + bl_idname = 'LNDistanceScreenToWorldSpaceNode' + bl_label = 'Distance Screen to World Space' + arm_section = 'matrix' + arm_version = 1 + + def arm_init(self, context): + self.add_input('ArmIntSocket', 'Screen X') + self.add_input('ArmIntSocket', 'Screen Y') + self.add_input('ArmVectorSocket', 'At') + + self.add_output('ArmFloatSocket', 'Distance at') \ No newline at end of file