extends Control export(NodePath) var main_input_path onready var main_input = get_node(main_input_path) export(NodePath) var message_scroller_path onready var msg_scroll = get_node(message_scroller_path) export(NodePath) var message_container_path onready var msg_cont = get_node(message_container_path) export(NodePath) var username_label_path onready var username_label = get_node(username_label_path) #export(NodePath) var upload_button_path #onready var upload_button = get_node(username_label_path) #--------- onready var bg_texture1 = preload("res://assets/textures/bg1.png") onready var bg_texture2 = preload("res://assets/textures/bg2.png") onready var round_shader = preload("res://assets/textures/profilepicture/shape.shader") onready var round_shape = preload("res://assets/textures/profilepicture/shape.png") onready var username_font = preload("res://assets/fonts/username_label.tres") onready var date_font = preload("res://assets/fonts/date_label.tres") onready var first_user_data = preload("res://system/users/first_user.tres") onready var second_user_data = preload("res://system/users/second_user.tres") func _ready(): username_label.set_text(first_user_data.username) func _on_CheckButton_toggled(button_pressed): if button_pressed == true: username_label.set_text(second_user_data.username) elif button_pressed == false: username_label.set_text(first_user_data.username) func _input(event): if event is InputEventKey: if Input.is_action_just_pressed("ui_accept"): create_message() elif Input.is_action_just_released("ui_accept"): var test = msg_cont.get_size().y var scroller = msg_scroll.get_child(2) scroller.set("value", test) main_input.set_text("") func create_message(): var text_content = main_input.get_text() var username = username_label.get_text() var resource = Message.new() resource.user = username # Define date var os_time = OS.get_datetime() var storaged_today = OS.get_datetime().day if storaged_today == os_time.day: resource.date = "Today, at " + str(OS.get_datetime().hour) + ":" + str(OS.get_datetime().minute) elif storaged_today == os_time.day +1: resource.date = "yesterday" resource.content = text_content if username_label.get_text() == first_user_data.username: resource.profile_picture = first_user_data.picture elif username_label.get_text() == second_user_data.username: resource.profile_picture = second_user_data.picture var msg_min_h_size = 0 var msg_header_h_size = 0 if text_content.length() < 25: msg_min_h_size = 50 msg_header_h_size = 25 else: msg_min_h_size = 350 msg_header_h_size = 300 var datetime = OS.get_datetime() var user = resource.user var date = resource.date var content = resource.content var pfp = resource.profile_picture # root is a HBoxContainer. var root = HBoxContainer.new() root.set_name("message0") msg_cont.add_child(root) # Icon is a texture_rect connected to the root. # HBoxContainer/TextureRect # Settings are... # Texture: Should load texture from 'Resource.new()' once sent a message. # Expand: On # Stretch Mode: Keep Aspect # Size Flags: Null var profile_picture = TextureRect.new() var core_shader = ShaderMaterial.new() var real_shader = Shader.new() core_shader.set_shader(real_shader) var round_shader_txt = round_shader.get_code() core_shader.set_shader_param("mask", round_shape) real_shader.set_code(round_shader_txt) profile_picture.set_texture(pfp) profile_picture.set_custom_minimum_size(Vector2(65, 65)) profile_picture.expand = true profile_picture.size_flags_horizontal = 0 profile_picture.size_flags_vertical = 0 profile_picture.set_name("profile_picture") profile_picture.set_material(core_shader) # Main node for message's Header and Body # Separates sections of Header and Body var GridStructure = VBoxContainer.new() GridStructure.set_name("GridStructure") if username_label.get_text() == first_user_data.username: root.add_child(profile_picture) root.add_child(GridStructure) elif username_label.get_text() == second_user_data.username: root.size_flags_horizontal = 8 root.add_child(GridStructure) root.add_child(profile_picture) # Header (Contains Name Label and Date Label) var Header = HBoxContainer.new() Header.set_name("Header") Header.set_custom_minimum_size(Vector2(msg_header_h_size,0)) Header.size_flags_horizontal = 3 GridStructure.add_child(Header) var NameLabel = Label.new() NameLabel.set_name("NameLabel") NameLabel.set_text(user) NameLabel.add_font_override("font", username_font) NameLabel.size_flags_horizontal = 3 Header.add_child(NameLabel) var DateLabel = Label.new() DateLabel.set_name("DateLabel") DateLabel.set_text(str(date)) DateLabel.add_font_override("font", date_font) DateLabel.size_flags_horizontal = 3 Header.add_child(DateLabel) # Body (Contains NinePatchRect for Background and Margins that contain the RichTextLabel var Body = MarginContainer.new() Body.set_name("Body") GridStructure.set_custom_minimum_size(Vector2(msg_min_h_size, 25)) GridStructure.add_child(Body) # BGTexture uses NinePatchRect for Message Bubble var BGTexture = NinePatchRect.new() BGTexture.set_name("BGTexture") if username_label.get_text() == first_user_data.username: BGTexture.patch_margin_left = 21 BGTexture.patch_margin_top = 12 BGTexture.patch_margin_right = 12 BGTexture.patch_margin_bottom = 12 BGTexture.size_flags_horizontal = 3 BGTexture.size_flags_vertical = 3 BGTexture.set_texture(bg_texture1) elif username_label.get_text() == second_user_data.username: BGTexture.patch_margin_left = 12 BGTexture.patch_margin_top = 12 BGTexture.patch_margin_right = 21 BGTexture.patch_margin_bottom = 12 BGTexture.size_flags_horizontal = 3 BGTexture.size_flags_vertical = 3 BGTexture.set_texture(bg_texture2) Body.add_child(BGTexture) # Margin forces FILL_EXPAND into it's children. var Margin = MarginContainer.new() Margin.set_name("Margin") if username_label.get_text() == first_user_data.username: Margin.add_constant_override("margin_top", 5) Margin.add_constant_override("margin_left", 16) Margin.add_constant_override("margin_right", 5) Margin.add_constant_override("margin_bottom", 5) if username_label.get_text() == second_user_data.username: Margin.add_constant_override("margin_top", 5) Margin.add_constant_override("margin_left", 5) Margin.add_constant_override("margin_right", 16) Margin.add_constant_override("margin_bottom", 5) Body.add_child(Margin) # Stretch is what keeps the Message expanding as if it has an anchor for Full_Rect # Body Content: var TextLabel = RichTextLabel.new() TextLabel.set_name("TextLabel") TextLabel.bbcode_enabled = true TextLabel.set_bbcode(content) TextLabel.fit_content_height = true TextLabel.scroll_active = false TextLabel.size_flags_horizontal = 1 TextLabel.add_color_override("default_color", Color(0,0,0,1)) Margin.add_child(TextLabel)