2023-12-15 22:44:25 +01:00
# (c) 2023-present Eroax
# (c) 2023-present Yagich
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
extends DeckNode
func _init ( ) - > void :
name = " Subtract Vectors "
node_type = " vector_subtract "
description = " Subtracts each component of the given vectors. "
add_input_port (
DeckType . Types . DICTIONARY ,
" Vector A "
)
add_input_port (
DeckType . Types . DICTIONARY ,
" Vector B "
)
add_output_port (
DeckType . Types . DICTIONARY ,
" Result "
)
2024-02-26 12:36:19 +01:00
func _receive ( port : int , data : Variant ) - > void :
2024-03-19 08:43:27 +01:00
var va
2024-02-26 12:36:19 +01:00
var vb
2024-03-19 08:43:27 +01:00
2024-02-26 12:36:19 +01:00
if port == 0 :
2024-03-19 08:43:27 +01:00
va = data
2024-02-26 12:36:19 +01:00
vb = await request_value_async ( 1 )
else :
2024-03-19 08:43:27 +01:00
va = await request_value_async ( 0 )
2024-02-26 12:36:19 +01:00
2024-03-19 08:43:27 +01:00
vb = data
if ( not DeckType . is_valid_vector ( va ) ) or ( not DeckType . is_valid_vector ( vb ) ) :
DeckHolder . logger . log_node ( " Vector Sub: Port %d : one of the inputs is not a valid Vector. Please ensure it is a Dictionary with keys ' x ' and ' y ' . " % port )
return
2024-02-26 12:36:19 +01:00
var calc = subtract_vectors ( va , vb )
if calc is Dictionary :
send ( 0 , calc )
2023-12-15 22:44:25 +01:00
func _value_request ( _on_port : int ) - > Variant :
2024-01-25 08:20:41 +01:00
var va = await request_value_async ( 0 )
var vb = await request_value_async ( 1 )
2024-02-26 12:36:19 +01:00
return subtract_vectors ( va , vb )
2023-12-15 22:44:25 +01:00
2024-02-26 12:36:19 +01:00
func subtract_vectors ( va , vb ) :
2024-02-21 07:11:29 +01:00
if not va or not vb :
2023-12-15 22:44:25 +01:00
DeckHolder . logger . log_node ( " Vector Sub: one of the vectors is invalid. " , Logger . LogType . ERROR )
return null
2024-02-26 12:36:19 +01:00
if ! DeckType . is_valid_vector ( va ) :
2023-12-15 22:44:25 +01:00
DeckHolder . logger . log_node ( " Vector Sub: one of the vectors is invalid. " , Logger . LogType . ERROR )
return null
2024-02-26 12:36:19 +01:00
if ! DeckType . is_valid_vector ( vb ) :
2023-12-15 22:44:25 +01:00
DeckHolder . logger . log_node ( " Vector Sub: one of the vectors is invalid. " , Logger . LogType . ERROR )
return null
2024-02-26 12:36:19 +01:00
2023-12-15 22:44:25 +01:00
var res : = { }
res [ " x " ] = va [ " x " ] - vb [ " x " ]
res [ " y " ] = va [ " y " ] - vb [ " y " ]
2024-02-26 12:36:19 +01:00
2023-12-15 22:44:25 +01:00
return res
2024-02-26 12:36:19 +01:00