148 lines
5.6 KiB
GDScript
148 lines
5.6 KiB
GDScript
extends Panel
|
|
var node_select1: Node
|
|
var shift: int = 2
|
|
var input_status: Dictionary = {}
|
|
|
|
|
|
func _ready() -> void:
|
|
node_select1 = $table1
|
|
var EMS_G_TABLE: Array
|
|
for i_row in Constants.INPUT_EMS_G.size() + shift + 1:
|
|
var column: Array
|
|
for out_colum in Constants.OUT_EMS_G.size()+shift:
|
|
if out_colum > 1 and i_row ==0:
|
|
column.append(Constants.TableList)
|
|
elif out_colum > 1 and i_row > 2:
|
|
column.append(Constants.Switch)
|
|
elif (out_colum == 1 and i_row > 2) or (out_colum > 1 and i_row == 2):
|
|
column.append(Constants.SocketStatus)
|
|
else:
|
|
column.append(Constants.TableNode)
|
|
EMS_G_TABLE.append(column)
|
|
|
|
draw_tabl(node_select1, EMS_G_TABLE, EMS_G_TABLE.size())
|
|
|
|
node_select1.get_node2(1, 1).text = 'x3_OUT:GND'
|
|
node_select1.get_node2(0, 2).text = 'x3_IN:GND'
|
|
for i in Constants.INPUT_EMS_G.size():
|
|
node_select1.get_node2(0, i+shift+1).text = Constants.INPUT_EMS_G[i]
|
|
|
|
for i in Constants.OUT_EMS_G.size():
|
|
node_select1.get_node2(i+shift, 1).text = Constants.OUT_EMS_G[i][1]
|
|
|
|
for i in EMS_G_TABLE[0].size()-shift:
|
|
var list = node_select1.get_node2(i+shift, 0)
|
|
list.set_meta('device', Constants.OUT_EMS_G[i][0])
|
|
list.connect('item_selected', Callable(self, 'on_mode_link').bind(list))
|
|
for k in Constants.OUT_x128.size():
|
|
list.add_item(Constants.OUT_x128[k])
|
|
|
|
|
|
var columns_min_size: Array
|
|
for i in EMS_G_TABLE[0].size():
|
|
if i < 2:
|
|
columns_min_size.append(110)
|
|
else:
|
|
columns_min_size.append(80)
|
|
node_select1.set_columns_min_size(columns_min_size)
|
|
|
|
Network.connect('_yau_receive', Callable(self, '_on_data_received'))
|
|
create_link_button(node_select1, 3, 19, 2, 18)
|
|
|
|
|
|
func draw_tabl(tbl, row: Array, count_row: int):
|
|
for i_row in count_row:
|
|
tbl.add_row(row[i_row])
|
|
|
|
|
|
func _on_data_received(data_from_yau_07):
|
|
var in_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_BLANK_PRD)
|
|
var in_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_IMPULS_PRD)
|
|
var out_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_BLANK_PRD)
|
|
var out_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_IMPULS_PRD)
|
|
|
|
for i in 16:
|
|
var socket_status = node_select1.get_node2(1, i+shift+1).get_child(0, false)
|
|
if (in_blank & (1 << i) != 0):
|
|
set_frame(socket_status, Constants.Frame.CONSTANT)
|
|
elif (in_imp & (1 << i) != 0):
|
|
set_frame(socket_status, Constants.Frame.VARIABLE)
|
|
else:
|
|
set_frame(socket_status, Constants.Frame.WORK)
|
|
#
|
|
for i in 16:
|
|
var socket_status = node_select1.get_node2(i+shift, 2).get_child(0, false)
|
|
if (out_blank & (1 << i) != 0):
|
|
set_frame(socket_status, Constants.Frame.CONSTANT)
|
|
elif (out_imp & (1 << i) != 0):
|
|
set_frame(socket_status, Constants.Frame.VARIABLE)
|
|
else:
|
|
set_frame(socket_status, Constants.Frame.WORK)
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
pass
|
|
|
|
|
|
func set_frame(node: Node, val: int): node.set_frame(val)
|
|
|
|
|
|
func set_init():
|
|
pass
|
|
|
|
|
|
## Создает связь между кнопками
|
|
func create_link_button(node, count_rows_sart: int, count_rows_end: int, coln_start: int, coln_end: int):
|
|
## META_EMS_G[[Номер входа, Номер выхода]]
|
|
var META_EMS_G: Array = []
|
|
for i_row in 16:
|
|
var INPUT = 1
|
|
var OUTPUT = 47
|
|
for i_colum in 16:
|
|
META_EMS_G.append([INPUT+i_row, OUTPUT+i_colum])
|
|
input_status[OUTPUT+i_colum] = 0
|
|
|
|
var count_register = 0
|
|
for i_row in range(count_rows_sart, count_rows_end):
|
|
for i_col in range (coln_start, coln_end):
|
|
var chk_node = node.get_node2(i_col, i_row)
|
|
var chk_btn = chk_node.get_child(1, false)
|
|
chk_btn.connect('toggled', Callable(self, 'on_btn_connect').bind(chk_node, chk_btn))
|
|
chk_btn.set_meta('device', META_EMS_G[count_register])
|
|
count_register += 1
|
|
|
|
|
|
func on_mode_link(mode, list):
|
|
## Формирование команды для выбора устройства
|
|
var meta = list.get_meta('device')
|
|
var address_port_wr = 0x122
|
|
var ports_wr: Dictionary = {address_port_wr : meta}
|
|
Network.send_array.append(ports_wr) # Отправка команды
|
|
|
|
## Формирование команды для отправкы команды на устройство
|
|
ports_wr = {}
|
|
address_port_wr = 0x128
|
|
ports_wr[address_port_wr] = 0x0000 if mode == 0 else 0x2000 if mode == 1 else 0x4000 if mode == 2 else 0x8000
|
|
Network.send_array.append(ports_wr)
|
|
|
|
|
|
func on_btn_connect(toggled_on: bool, chk_node: Node, chk_btn: Node):
|
|
## Формирование команды для выбора устройства
|
|
var meta = chk_btn.get_meta('device')
|
|
var address_port_wr = 0x122
|
|
var ports_wr: Dictionary = {address_port_wr : meta[1]}
|
|
Network.send_array.append(ports_wr) # Отправка команды
|
|
## Формирование команды для отправкы команды на устройство
|
|
var color_chk_btn = chk_node.get_child(0, false)
|
|
if toggled_on:
|
|
color_chk_btn.color = Color.WEB_GREEN
|
|
input_status[meta[1]] += 1 << meta[0]-1
|
|
else:
|
|
color_chk_btn.color = Color.BLACK
|
|
input_status[meta[1]] -= 1 << meta[0]-1
|
|
|
|
ports_wr = {}
|
|
address_port_wr = 0x124
|
|
ports_wr[address_port_wr] = input_status[meta[1]]
|
|
Network.send_array.append(ports_wr)
|