From 796de2da092919885486ccf3e4ae6bcd2cc242f0 Mon Sep 17 00:00:00 2001 From: Brandon Lamb Date: Wed, 13 Dec 2017 20:03:43 -0800 Subject: [PATCH] Features/patch 1 (#1) * Import from project * add icon * Add icon and add blurb in readme --- .gitignore | 5 + README.md | 27 +++- addons/godot-hotbars/base_button.png | Bin 0 -> 108 bytes addons/godot-hotbars/base_button.png.import | 28 ++++ addons/godot-hotbars/base_button_01.png | Bin 0 -> 123 bytes .../godot-hotbars/base_button_01.png.import | 28 ++++ addons/godot-hotbars/base_button_02.png | Bin 0 -> 226 bytes .../godot-hotbars/base_button_02.png.import | 28 ++++ addons/godot-hotbars/gear.png | Bin 0 -> 6067 bytes addons/godot-hotbars/gear.png.import | 28 ++++ addons/godot-hotbars/hotbar_button.gd | 9 ++ addons/godot-hotbars/hotbar_button.tscn | 53 +++++++ addons/godot-hotbars/hotbar_factory.gd | 67 +++++++++ addons/godot-hotbars/hover_button_02.png | Bin 0 -> 203 bytes .../godot-hotbars/hover_button_02.png.import | 28 ++++ addons/godot-hotbars/icon.png | Bin 0 -> 3498 bytes addons/godot-hotbars/icon.png.import | 28 ++++ addons/godot-hotbars/move_button.gd | 84 ++++++++++++ addons/godot-hotbars/move_button.tscn | 29 ++++ addons/godot-hotbars/move_button_1.png | Bin 0 -> 1254 bytes addons/godot-hotbars/move_button_1.png.import | 28 ++++ addons/godot-hotbars/move_button_2.png | Bin 0 -> 1921 bytes addons/godot-hotbars/move_button_2.png.import | 28 ++++ addons/godot-hotbars/move_button_3.png | Bin 0 -> 2526 bytes addons/godot-hotbars/move_button_3.png.import | 28 ++++ addons/godot-hotbars/move_button_3_1.png | Bin 0 -> 2126 bytes .../godot-hotbars/move_button_3_1.png.import | 28 ++++ addons/godot-hotbars/move_button_5.png | Bin 0 -> 4131 bytes addons/godot-hotbars/move_button_5.png.import | 28 ++++ addons/godot-hotbars/new_styleboxflat.tres | 15 ++ ....png-5d078388714b0cfa16ae2dabd2f2e9b5.stex | Bin 0 -> 140 bytes ....png-1c94e8af473df0ecb0c2f2f50e65e4b5.stex | Bin 0 -> 155 bytes ....png-ede854f1fbf45504aee891e207bcc3bd.stex | Bin 0 -> 258 bytes ....png-f4315373955e44fccf72dabf71348b06.stex | Bin 0 -> 6400 bytes ....png-57ca9fe5b40d1bab11bea6e7d104f5fb.stex | Bin 0 -> 235 bytes ....png-487276ed1e3a0c39cad0279d744ee560.stex | Bin 0 -> 3533 bytes ....png-7f82ba8042ee5c1e28efede8a428582b.stex | Bin 0 -> 3533 bytes ....png-2361115598f1be9ec0b4bb38ce6ab9d8.stex | Bin 0 -> 469 bytes ....png-8130a2a8ea3f7973c7e0ef5be133583d.stex | Bin 0 -> 2013 bytes ....png-112168e57f579efb51111f677e3b21ac.stex | Bin 0 -> 1292 bytes ....png-1ebb5ba6e968c1ee3e53f8dd1057bafa.stex | Bin 0 -> 1007 bytes ....png-22c33dc1672c61f50256eb3a6bc6a3bd.stex | Bin 0 -> 4614 bytes example/default_env.tres | 101 ++++++++++++++ example/horizontal_hotbar.tscn | 129 ++++++++++++++++++ example/icon.png | Bin 0 -> 3498 bytes example/icon.png.import | 28 ++++ example/main.gd | 22 +++ example/main.tscn | 23 ++++ example/project.godot | 19 +++ example/vertical_hotbar.tscn | 129 ++++++++++++++++++ 50 files changed, 1047 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 addons/godot-hotbars/base_button.png create mode 100644 addons/godot-hotbars/base_button.png.import create mode 100644 addons/godot-hotbars/base_button_01.png create mode 100644 addons/godot-hotbars/base_button_01.png.import create mode 100644 addons/godot-hotbars/base_button_02.png create mode 100644 addons/godot-hotbars/base_button_02.png.import create mode 100644 addons/godot-hotbars/gear.png create mode 100644 addons/godot-hotbars/gear.png.import create mode 100644 addons/godot-hotbars/hotbar_button.gd create mode 100644 addons/godot-hotbars/hotbar_button.tscn create mode 100644 addons/godot-hotbars/hotbar_factory.gd create mode 100644 addons/godot-hotbars/hover_button_02.png create mode 100644 addons/godot-hotbars/hover_button_02.png.import create mode 100644 addons/godot-hotbars/icon.png create mode 100644 addons/godot-hotbars/icon.png.import create mode 100644 addons/godot-hotbars/move_button.gd create mode 100644 addons/godot-hotbars/move_button.tscn create mode 100644 addons/godot-hotbars/move_button_1.png create mode 100644 addons/godot-hotbars/move_button_1.png.import create mode 100644 addons/godot-hotbars/move_button_2.png create mode 100644 addons/godot-hotbars/move_button_2.png.import create mode 100644 addons/godot-hotbars/move_button_3.png create mode 100644 addons/godot-hotbars/move_button_3.png.import create mode 100644 addons/godot-hotbars/move_button_3_1.png create mode 100644 addons/godot-hotbars/move_button_3_1.png.import create mode 100644 addons/godot-hotbars/move_button_5.png create mode 100644 addons/godot-hotbars/move_button_5.png.import create mode 100644 addons/godot-hotbars/new_styleboxflat.tres create mode 100644 example/.import/base_button.png-5d078388714b0cfa16ae2dabd2f2e9b5.stex create mode 100644 example/.import/base_button_01.png-1c94e8af473df0ecb0c2f2f50e65e4b5.stex create mode 100644 example/.import/base_button_02.png-ede854f1fbf45504aee891e207bcc3bd.stex create mode 100644 example/.import/gear.png-f4315373955e44fccf72dabf71348b06.stex create mode 100644 example/.import/hover_button_02.png-57ca9fe5b40d1bab11bea6e7d104f5fb.stex create mode 100644 example/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex create mode 100644 example/.import/icon.png-7f82ba8042ee5c1e28efede8a428582b.stex create mode 100644 example/.import/move_button_1.png-2361115598f1be9ec0b4bb38ce6ab9d8.stex create mode 100644 example/.import/move_button_2.png-8130a2a8ea3f7973c7e0ef5be133583d.stex create mode 100644 example/.import/move_button_3.png-112168e57f579efb51111f677e3b21ac.stex create mode 100644 example/.import/move_button_3_1.png-1ebb5ba6e968c1ee3e53f8dd1057bafa.stex create mode 100644 example/.import/move_button_5.png-22c33dc1672c61f50256eb3a6bc6a3bd.stex create mode 100644 example/default_env.tres create mode 100644 example/horizontal_hotbar.tscn create mode 100644 example/icon.png create mode 100644 example/icon.png.import create mode 100644 example/main.gd create mode 100644 example/main.tscn create mode 100644 example/project.godot create mode 100644 example/vertical_hotbar.tscn diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dd88a1f --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +.#* +*~ +example/addons +build diff --git a/README.md b/README.md index 98521f4..b59f0c4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,27 @@ -# godot-hotbars +# godot hotbars Godot Engine (v3.0) Hotbars + +## Running the example + +1. Click start menu, type `Command Prompt` +1. Right-click `Command Prompt` and click on `Run as Administrator` +1. Run the commands below, assuming you checked out the repo into a `Documents\src\godot-hotbars` directory. + +```powershell +cd c:\Users\YOUR_USERNAME\Documents\src\godot-hotbars\example +mklink /D addons c:\Users\YOUR_USERNAME\Documents\src\godot-hotbars\addons +``` + +## Examples + +### main + +Programmatic creation of both horizontal and vertical hotbars using a hotbar_factory.gd + +### horizontal_hotbar + +Static, scene-based horizontal hotbar + +### vertical_hotbar + +Static, scene-based vertical hotbar diff --git a/addons/godot-hotbars/base_button.png b/addons/godot-hotbars/base_button.png new file mode 100644 index 0000000000000000000000000000000000000000..f66da13282bf664876bb317bcfb52d10c3aacfff GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzV^0^ykcif|=L{Jc3^py947G;y=1)1w)V6sNYvBS&t;ucLK6VDwjGK9 literal 0 HcmV?d00001 diff --git a/addons/godot-hotbars/base_button.png.import b/addons/godot-hotbars/base_button.png.import new file mode 100644 index 0000000..6f2caae --- /dev/null +++ b/addons/godot-hotbars/base_button.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/base_button.png-5d078388714b0cfa16ae2dabd2f2e9b5.stex" + +[deps] + +source_md5="50b3cbcdc451d6dca5009dad618dec6b" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/godot-hotbars/base_button_01.png b/addons/godot-hotbars/base_button_01.png new file mode 100644 index 0000000000000000000000000000000000000000..162e27da85b032fceba3a78d8a86c030d65157e4 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzCr=m0kcif|*EfnX2rw{Td_1%L z(!ZsXS~GGdJj-kRW5&9JC7WUK`4d0vx}_rj2`M-u? literal 0 HcmV?d00001 diff --git a/addons/godot-hotbars/base_button_01.png.import b/addons/godot-hotbars/base_button_01.png.import new file mode 100644 index 0000000..08f55bb --- /dev/null +++ b/addons/godot-hotbars/base_button_01.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/base_button_01.png-1c94e8af473df0ecb0c2f2f50e65e4b5.stex" + +[deps] + +source_md5="5d283258cbef3f068297bea74fb6bd4b" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/godot-hotbars/base_button_02.png b/addons/godot-hotbars/base_button_02.png new file mode 100644 index 0000000000000000000000000000000000000000..454d9bc82e7534815192db6b43add4855858cfdd GIT binary patch literal 226 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 JxkAY% MAX_BUTTONS: + print("Invalid number of buttons for hotbar") + return + + if num_columns > 1 && num_buttons > 1: + num_columns += 1 + + # Create panel container to add buttons grid container and buttons + var container = PanelContainer.new() +# container.set_script(DragDrop) + container.set_name("hotbar") + + # Add move button to panel container +# var move_button = Button.new() +# var move_button = TextureButton.new() + var move_button = MoveButton.instance() + move_button.use_snap = false + move_button.snap_size = 64 + +# var t = Texture.new("res://addons/com.brandonlamb.ui.hotbars/gear.png") +# t.set_path("res://addons/com.brandonlamb.ui.hotbars/gear.png") +# move_button.set_normal_texture(t) + + move_button.set_name("move_button") +# move_button.set_size(Vector2(32, 32)) +# move_button.set_text(": :") +# move_button.set_flat(true) +# move_button.set_toggle_mode(true) + + # Add a grid container as a child of the panel container to provide nicely + # spaced buttons + var buttons = GridContainer.new() + buttons.set_name("buttons") + buttons.set_columns(num_columns) + buttons.add_child(move_button) + container.add_child(buttons) + + # Add buttons to hotbar as btn_0, btn_1, etc + for i in range(num_buttons): + var button = HotbarButton.instance() + button.set_name("btn_" + str(i)) + #button.set_label(str(i + 1)) + button.hotbar_text = str(i + 1) + button.set_size(Vector2(32, 32)) + buttons.add_child(button) + + # Set size of panel container to the size of the grid container + # as this will be used with dragging support to know the bounds of the hotbar + container.set_size(buttons.get_size()) + + move_button.get_rect().position = Vector2(0, -20) + move_button.get_rect().size = Vector2(20, 20) + move_button.set_size(Vector2(20, 20)) + move_button.set_position(Vector2(0, -20)) + + return container diff --git a/addons/godot-hotbars/hover_button_02.png b/addons/godot-hotbars/hover_button_02.png new file mode 100644 index 0000000000000000000000000000000000000000..f9791e47289a890a34dd286585551c6896fcde09 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJNuDl_ArY-_FBoz$Ir6kVv^SRA z)455Zt2L^kPB(_zdhcl+;qF|q7+sMx*3YvJC{O4=QMJ`vts~M=WdXzX-=dp$_02Kv z{<(>LO3;m5{!qr}-#omGovyA{E^J_ydBDJKae#3$W5`sA$MW?D82JhsnCsXU#7^f_ z+A>|3Ny6rA;;~)je^>97*vh^_ZC2Xnh5vusFg#M0KhN4c=QGfC44$rjF6*2UngCN* BNzniR literal 0 HcmV?d00001 diff --git a/addons/godot-hotbars/hover_button_02.png.import b/addons/godot-hotbars/hover_button_02.png.import new file mode 100644 index 0000000..5d17013 --- /dev/null +++ b/addons/godot-hotbars/hover_button_02.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/hover_button_02.png-57ca9fe5b40d1bab11bea6e7d104f5fb.stex" + +[deps] + +source_md5="ee50b4892b89bae5d4495189f4ffe20c" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/godot-hotbars/icon.png b/addons/godot-hotbars/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b64eee944cb4cfb2aa8dc0d8d78faf6ca44dc1 GIT binary patch literal 3498 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 Y|LV|6es%hBO8@`>07*qoM6N<$f`}~Z-v9sr literal 0 HcmV?d00001 diff --git a/addons/godot-hotbars/icon.png.import b/addons/godot-hotbars/icon.png.import new file mode 100644 index 0000000..fed6d16 --- /dev/null +++ b/addons/godot-hotbars/icon.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-7f82ba8042ee5c1e28efede8a428582b.stex" + +[deps] + +source_md5="ae7e641067601e2184afcade49abd283" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/godot-hotbars/move_button.gd b/addons/godot-hotbars/move_button.gd new file mode 100644 index 0000000..0492b3c --- /dev/null +++ b/addons/godot-hotbars/move_button.gd @@ -0,0 +1,84 @@ +extends TextureButton + +const STATUS_NONE = 0 +const STATUS_CLICKED = 1 +const STATUS_DRAGGING = 2 +const STATUS_DRAGGED = 3 +const STATUS_RELEASED = 4 + +export(bool) var allow_drag = true +export(bool) var use_snap = true +export(int) var snap_size = 5 +export(bool) var locked = false setget set_locked, get_locked + +onready var parent = get_parent().get_parent() + +var status = STATUS_NONE +var offset = Vector2() +var mpos = Vector2() + +func _ready(): + set_process(true) + set_process_input(true) + +func _process(delta): + if allow_drag && status == STATUS_DRAGGING: + if !use_snap: + parent.set_global_position(mpos + offset) + else: + parent.set_global_position(snap(mpos + offset)) + +func _input(ev): +# if !allow_drag || (ev.type != InputEvent.MOUSE_BUTTON && ev.type != InputEvent.MOUSE_MOTION): +# return + + if !allow_drag || (!(ev is InputEventMouseButton) && !(ev is InputEventMouseMotion)): + return + + if ev is InputEventMouseButton && !ev.is_pressed(): + status = STATUS_NONE + + # Start dragging + if ev is InputEventMouseButton && ev.button_index == BUTTON_LEFT && ev.is_pressed() && status != STATUS_DRAGGING: +# var ev_pos = ev.global_pos + var ev_pos = ev.position + var gpos = get_global_position() + var s = get_size() + +# if Rect2(gpos.x, gpos.y, s.x, s.y).has_point(ev_pos) && is_stopping_mouse(): + if Rect2(gpos.x, gpos.y, s.x, s.y).has_point(ev_pos): + status = STATUS_CLICKED + offset = gpos - ev_pos + + # Move the currently selected hotbar to the last index of parent + # so that the hotbar is always on top of the others + var hotbars = parent.get_parent() + hotbars.move_child(parent, hotbars.get_child_count() - 1) + + if status == STATUS_CLICKED && ev is InputEventMouseMotion: + status = STATUS_DRAGGING + + if status == STATUS_DRAGGING && ev is InputEventMouseButton && ev.button_index == BUTTON_LEFT && !ev.is_pressed(): + status = STATUS_RELEASED + + if ev is InputEventMouseMotion: + mpos = ev.position + +func snap(pos): + return Vector2(ceil(pos.x / snap_size) * snap_size, ceil(pos.y / snap_size) * snap_size) + +func set_locked(locked_): + locked = locked_ + lock(locked) + +func get_locked(): return locked + +func lock(lock): + return + var p = get_parent() + if lock == true: + set_hidden(true) + p.set_columns(p.get_columns().size - 1) + else: + set_hidden(false) + p.set_columns(p.get_columns().size + 1) \ No newline at end of file diff --git a/addons/godot-hotbars/move_button.tscn b/addons/godot-hotbars/move_button.tscn new file mode 100644 index 0000000..5d362c1 --- /dev/null +++ b/addons/godot-hotbars/move_button.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/godot-hotbars/move_button_3_1.png" type="Texture" id=1] +[ext_resource path="res://addons/godot-hotbars/move_button.gd" type="Script" id=2] + +[node name="move_button" type="TextureButton"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +texture_normal = ExtResource( 1 ) +script = ExtResource( 2 ) +_sections_unfolded = [ "Grow Direction", "Textures" ] +allow_drag = true +use_snap = true +snap_size = 5 +locked = false + + diff --git a/addons/godot-hotbars/move_button_1.png b/addons/godot-hotbars/move_button_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a2bf8f7938d21ad0a5bac1d31ddd771166108 GIT binary patch literal 1254 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 Hu0mjfQk|<7 literal 0 HcmV?d00001 diff --git a/addons/godot-hotbars/move_button_2.png.import b/addons/godot-hotbars/move_button_2.png.import new file mode 100644 index 0000000..8220d2d --- /dev/null +++ b/addons/godot-hotbars/move_button_2.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/move_button_2.png-8130a2a8ea3f7973c7e0ef5be133583d.stex" + +[deps] + +source_md5="c39804137c43e87fea86ee6a29d3fc19" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/godot-hotbars/move_button_3.png b/addons/godot-hotbars/move_button_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b3eb1f5a6749acfcfe593f25f4149e0969892bf4 GIT binary patch literal 2526 zcmZ`*4LFng8=h(@(!XIo-_Yqi8o5yfn;jBT&>VILCdL+X@76#gW& zP9-8#qELs3Q=+R-N}*Cd`alYuchkrIu6nQQ{rEl4egE#~e%|-Ft~cJpoo1kCst1F? z4CpJVOz4hOpSn|^>!?X@4s_EIGiffcynoDILW`N z%Gu!)VwxsScq6GRCo%ys$d{^H;4S1yCTP)S(z6lqP>#K>x*(9BZwAm-Qkr|6}#+@Hf>aBn(w1#6{&G^Oo; zvA6N=u=U={UQqxw5YR+PFiiLb!^TrmAo7Pdf@v56=8GWupzJsVLX*B4GOb?v`~b z9!B6-S07t`wj|7dEgZQVSwA*SKG1`(&v?UwcU}oR{*GzA6gJ<;Ygg`0qg-!-`@JPM zF^Pjov&kvmjF`Ez^B?s1r*7>qawvP6X;@fIR5EAi!h4N_cAZM8uvH$DxSX$D@Jp#T z=CGo(fo;F`;H>GQ@ry}~Q&nmBkme$?)02#x4Kq7mKTmU`C(f~aXJOq#_w;*o3vv4N zcGi2k->zya9gnH=Sl4xqmsS~_3^iM2jTmsIwKLF)tR)QTVSZ_Io?uszKc~s>_kni< zg?@(IvjSbqGtZqEDuaiN4I8i9H0-RfidsC4>w3m<)j!XJldqOv97#_REV0M zRT7YunMwKZR42^$nzCmEHPgpwmdN z$Y1wr#||kxKQ7;_U~kBUmSc)%ANO+`S9v3CaJEdlaC9a;w=wxNxSmF%J&yV;Abh;7 zJKh!Bpe(=ovF~2qtKDo}d0H*iijLhh8kEO3H|b=)5p@@Be7tE?;n`%)bXlL4Ep)Wu zwXO#JP2<>Ek#$1D4&rcolqA%0smvW|urT0~skw?y`#b$|c8PotcoM;YC&GM+0`eAA zF}y~aM{)Qqdse*sG&DYT+k!G0o%k&3GoZUhEE?|Ydo<@_8~R2E5W(M+aH;lX1jZxt zp$V(*d>c7R8PQcYpXr}4^ceN}{#D2H-jXj0SZx~^(t-Grb>#?-E% z8P&~|)SQ9T-K*Q%d-7gK{H0pAy8O(Jg8Owkb3V)E?b~kIZXkhW%d>7C1s|@@9$S{P^%j2TmBG!!ePrePJuP7~%DO9GEpxBA2u8ns zS##Z_KaigGGWZ(a_WeQYSeaSmj5^^1a`gDKj*gDdVx_?cluD6Fj&{(qIG~?nDwytI zgTgH*%@2t4@;z7jhm0bB+lg?@kB`~YXjL(MAaDLQvzl}7Dy$d8TgGQ)Wm&H5k93}X zjwO=b$!{zu7(|=Sv7vR}W*qVj@b7*koELp2O@J`+Z%Zz(P4HX1j0M=H_p0_fd98?f z5S&jDZ~&_^|A;0k%_S%MMs}4i1*1FGgjh$M@8FVs8Freb~U@Piwd ze_f2EZA%(1*>|TPbBu(6>JIo(n4$a+PGzvdF(l+(5NpFk#r;GkycWRzXVC=u5t`Z{v literal 0 HcmV?d00001 diff --git a/addons/godot-hotbars/move_button_3.png.import b/addons/godot-hotbars/move_button_3.png.import new file mode 100644 index 0000000..dcf3dbe --- /dev/null +++ b/addons/godot-hotbars/move_button_3.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/move_button_3.png-112168e57f579efb51111f677e3b21ac.stex" + +[deps] + +source_md5="5bb4c79fc1d90aa08f689726bba38a46" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/godot-hotbars/move_button_3_1.png b/addons/godot-hotbars/move_button_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..58c5ee872e303d5dc83bf2845ac6daf1b0e366d9 GIT binary patch literal 2126 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WSkfJR9T^xl_H+M9WCij$3p^r= z85p>QL70(Y)*K0-8l}vTh>{3jAFJg2T)o7U{G?R9irfOAY6b?I3M(KpH?<^Dp&~aY zuh^=>Rtc=a3djZt>nkaMm6T-LDnNc-DA*LGq*(>IxIwi8 zdA3R!B_#z``ugSN<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$`C_f=D4I5 zCl_TFlw{`TDS*sPOv*1Uu~kw6Sp)|Vca~(PA#BPkhI$L=L4A;nzM-ChJ~nNs6`44+ zfn;!MOG$?Ns-Uze2kfVmWc}2f)ZEm(l477fL#);T!xpX)#gP?>1rW=?fe7)N4antI zL8-<0Ii;W=2+hkZu`{v(dk9?^5h4&>&iT0oMXANbKy7xWP%X$}=;|X7*4UZD>_8So z*Wh223G`_q$X#}ZPz#X7(A7s`vjABTNdqY8tpYMDQgb3)GJydK_JuLfRahm^H9F_# zGv>EamT z!P|Q++AGCdp!H#LWE`K?E0#IE{!RM7UU9GD* zb4huo7h`E{{rk_KKhOWadHc4v+HQV*P0gA$YYwbly?Xun^vc}lq3Ot)rwNa5a(%p=wD}h+ z+gh*E$lhn?^5<&WU3qF8YrIFX_jvy9ef#9LU1eMov09_qm}Qg2=e{#_k{Sn^wc78C zOj(aWIm7S!7ta@YZXKw{o63bS9r${86CLypzvmCm-9e zX-V*QSuNiHuD-WBo@`ph;(yeu`OWdz+S|t@zZ$G8pLy!G5<}jJ$y2$*<>Gjr`b^s^ zWT53dJ(G*^!T%zk;>`wX4FVchc2#g*^59_RiLR)w{{8FMtj!aj?zY-mDG?=fqPn`8 zpPzq@O)FdCFOk5tMmIff-@IvQZ$Ew7sq?R|UAy-3<;%Bkb)_brXgDVpf9--O_x-zf zZSCy-t+8J8>wtOJ9X}=6TL1Z_>E>AsO#ka{#$P*d_s$)e$JeSC`?#}2uIABL_vG{E z&mTW-v=&&K@^{fx%Q;f_@84f;H=}UP<*laOQ%$m1b6VHlQ<7d}BU#EO+?zS|G^fsT zpLip=%#igvOhWFTJ9_l!<;$0yJ{`C3d-3GS5moP$Of~DfjN$uVcHVgP=-2Y03OF|!|=Z)K8Q^vK=aUClXl z?!q~@rb)7Wn7h1_dnxy4f7S(kJzWvsb=WE-_SgL_N_OV1e8RtGe{(Z)ot5ikH4dNi zQ$RzPR5UBW@csO<<*sc?u#53ixj!+?fQ;eW7fG6m%iOhtSSXnmF?~ASEY*_^qCS@ zJSYxY&#$PEGnY%^LY9o>H8z&Kyu75(&!-%iT=K{1&o-yI+qPBd98d}0+93J3^P|f5 zw~C<-B|A6d%4uHR#=4A2Gf8->nv`_n&xmffhDhUwJf(r>em$P^Z}+CoaJBw36%wWs z#d6AuCVvZeUL0}U;8o``W82G)O|juW=UmY~d_H0Ah7Z&8AD-X5#`xB+zx}z1uNZ^k)`Sfp7grxdAkntJO~$6^bt-tP;$qY*WgOX t7p9(R+H*2$er^l85TU@dCt&{Bf6O&m<;>Fl?uwuq-qY33Wt~$(699mlFk%1z literal 0 HcmV?d00001 diff --git a/addons/godot-hotbars/move_button_3_1.png.import b/addons/godot-hotbars/move_button_3_1.png.import new file mode 100644 index 0000000..ff85aa5 --- /dev/null +++ b/addons/godot-hotbars/move_button_3_1.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/move_button_3_1.png-1ebb5ba6e968c1ee3e53f8dd1057bafa.stex" + +[deps] + +source_md5="c1bb1a98ce547f9d6532bf6795c63386" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/addons/godot-hotbars/move_button_5.png b/addons/godot-hotbars/move_button_5.png new file mode 100644 index 0000000000000000000000000000000000000000..5aab80ea77eeb61e1cb29abdd5f9e38c86aa3291 GIT binary patch literal 4131 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 RPn&{7Jzf1=);T3K0RS)oAdLV3 literal 0 HcmV?d00001 diff --git a/example/.import/base_button_01.png-1c94e8af473df0ecb0c2f2f50e65e4b5.stex b/example/.import/base_button_01.png-1c94e8af473df0ecb0c2f2f50e65e4b5.stex new file mode 100644 index 0000000000000000000000000000000000000000..8ef15e0d49a8da4659e48e802a2725dc50db147d GIT binary patch literal 155 zcmZ>F2@X+UU|;}Y79eI|5MXBnlJ!6w;ODN;2_$&Aq_}`wUQZ8~ARw&(!W?Wsvbd`1 z3y^a1ba4!cXnlKqqbP#_1M|hlGutoyTRN#VBX`2Hyv9FftUFk;85W;E@x!iLD)OI@ nfF2@X+UU|;}Y79eI|5MXBnlFxuRz|UQw6G-rKNpS(Wyq+E|K|opoggMxNWN}s1 z7a+CL)5S3)qV?_d^IV4vc-TJZ`*!6&lIb`+`Tc*U!_EJ1EMBwtPi_3Ot=<$crCzrWXh!gnV{73gRNPgg&ebxsLQ08>O@H~;_u literal 0 HcmV?d00001 diff --git a/example/.import/gear.png-f4315373955e44fccf72dabf71348b06.stex b/example/.import/gear.png-f4315373955e44fccf72dabf71348b06.stex new file mode 100644 index 0000000000000000000000000000000000000000..5b2a2c4e77cbf53e0927fb750095e524e2e8f06e GIT binary patch literal 6400 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 literal 0 HcmV?d00001 diff --git a/example/.import/hover_button_02.png-57ca9fe5b40d1bab11bea6e7d104f5fb.stex b/example/.import/hover_button_02.png-57ca9fe5b40d1bab11bea6e7d104f5fb.stex new file mode 100644 index 0000000000000000000000000000000000000000..a747f2375553f6ee2ed42ffbe75c2635cc7b6548 GIT binary patch literal 235 zcmZ>F2@X+UU|;}Y79eI|5MXBnlIMXqz|UQw6G-rKNpS(Wyq+E|K|opoggMxNWN}s1 z7a%ps)5S3)qV??sLoOyqp4Nx<#*%wFHz{LkwwkMTL^`T0VA%d!bn~vhImX>TH?dC%x{=Et%J}@7hnKO_)z!*{4a_nR7}zZi zFivI+nJV#EzWx9sUqJ(N9ovG~>6}VirVBGk*qlu~wyXT_>b(+M*;lB|O8dO<|8EGXMYp literal 0 HcmV?d00001 diff --git a/example/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex b/example/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex new file mode 100644 index 0000000000000000000000000000000000000000..1f08a3cf11935069c4d0c31e8bd17ded23174700 GIT binary patch literal 3533 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 literal 0 HcmV?d00001 diff --git a/example/.import/move_button_3.png-112168e57f579efb51111f677e3b21ac.stex b/example/.import/move_button_3.png-112168e57f579efb51111f677e3b21ac.stex new file mode 100644 index 0000000000000000000000000000000000000000..3a6afef9117db4e1d7bb0799e49bb7f9068fb6a6 GIT binary patch literal 1292 zcmV+n1@rnxL{n5C0000W000040000001yWO0002+1ONa~PDdb#P)H3c>xo%07RDYy?3UHMV}e|$;{@H&Ud@d>8|Rk*7x6j z7bQr5LPS6Si30~|g$jU5UZVp2t zB1)3_BmfA4vI?jXu7nyn1cI`Z6zSN6AZkJeDaqCxL%NLt#fcEzQ>CAnz7==n2Grms zrc+ZUH96E)jxw$SldWwL#7HA`*X2@SS$$O$29~6%NFr%vk~9#3G+UIdHKMO;Ry7Zz z?v0Te-5`XG5>$vT-$Pv@rlxMWv>-3U!qt8NefNG)*Vz$I7I(F=LvKr)Q_6gBuoACHvHLVAZvG zUYAQ0tQshec1{i8z+gp945(?ockkXuAAZy&@YA<*w_%CU-FNQZx_R?_zMwP%1F
gwvB|N27PkDvF=^ZeSYuN@ADWm$SwGw2SAo<98sMJA}J-fAP&VX9~Ue>TWDI@4ee z-ReV8FTD7|x-47oRb!L|nM%#S2pBWBqpmg1xkhqIgaF18e({T( z^Zd)4+R~2ibUHtJ^zYk$zMY}GZZ3sHOtylD$V9u{Oozi;H{bf~;RE}Z82>tdUV8cE zH?Cfv>Tq5bu_=Rw(&)*5za~|E-cr@?5c52HaTI5>C~f%%wGybP4!T?xhk^{e`hs=R zkRURKxO=3Mmhc_p9pnKu*@xw{PA0`@4Tz*0h(k%dSe9seh%-E{GDTbXhKsAOGjZjT^_~@p;+% zJD<;AJ^pH4)}eFNZchvLq{O6)8-@Nq@R}T{W?u-S#Gh z49|J; z9_y9a1y_+Mw8o{q<3Ag+&TS#%r0A7PD~6I2(whNztV#}MbbAw0d5`c zmf?tAlRAf#OgbcMexiv=S;ruSbwJ*d8%XapW@}e=B^TQU(rxZHPVp8y4(%aIn{Ny@ zZcOM_*S`7fdvl^8a*`Z(?Nef??7P}f+Ah(FHe2Zi)i5S@hw3#9Dw3M-9zvy%36sOB z-Z#M7P1+i}v)cuWTB}bo01fHaLZu0--h1T1oF4&|`P%~wu7pbf00005Nx+SVMZhhT!7oKLSh43 zPKboWWjFu_h{TLy=3~3xq9zq9@98OCz{H>aRCSl_-rnBKO#U@eN+J?MD5W^(M8tc) zEQ|MEL`o?k1T$Nf1>00rL~_p9j6IrCa?W9@lp-QrhDBJ%!y9NIJut(%#ddGEdVDWy6gc-m|> z_%^c;0#}`L2%mNlbO<2;GBc|`y!QyOl!BikqN*vSoU^LJV$PZ72rMRHSwvO`Oahzc zc_s(mdl=0*BgRq+GQcU4hvQfRb7rQ9j+tTyt>>I!y|#i3SXZh_k~zc7){=lxa&_^O zC*cpFfK2=ZT${~iSr($bGJ${dJlC^KkSGBn@4a&lGc|@N4U`s_Fak>uRfKPB+HSXp z!vXbxU;!?wh^%_=@9yqmj0gxz+z|L1b;e`6-R}MUJ;o?kjN9AW*Vos+?};Zql$}*~ zFTRIi`2GF8#=3~a7>8j1fItFv%q*}i=>rR0*L7WYrH`)b+O}o7h#jc}fCHcbu88EE zr)heAem)!yHQ^${lXVr`-`~d=&$V9(&$-=E0JR|zNhzh2Xtair6^xy%5j6Zc0~9h; z6G8@OP1AgQe2n9GB}6YTFMZzw14@YZK2RgM8#x}2$7!0bu`VLxI1a`pPrtUWkG-N=3$m+F;H!q=6F1k9(V#P zK`K2#595sYKF0X{{e2-&bw#Z)hVbz4fO2OQ0U}im0Ef}>Z`-z?pPw~1{~2FjUr3jx zabXCwh}Ri|Qq>sa#pU;(u`J6x&(tUqxn@9=*wtosb91xb?@@WRkX#I`?)Uqy>-xS& z2XM*E0+p6$kiOKYLU_!|)4Z#X{W5{-T8-TOAWEl#* d%Bg2n^$&b%cLVsUUo!vz002ovPDHLkV1m8c#SQ=f literal 0 HcmV?d00001 diff --git a/example/.import/move_button_5.png-22c33dc1672c61f50256eb3a6bc6a3bd.stex b/example/.import/move_button_5.png-22c33dc1672c61f50256eb3a6bc6a3bd.stex new file mode 100644 index 0000000000000000000000000000000000000000..2b94be0b6dd35da036f62280654915e674a3b714 GIT binary patch literal 4614 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 wXUM%Y+1BZ)sWYr% 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 Y|LV|6es%hBO8@`>07*qoM6N<$f`}~Z-v9sr literal 0 HcmV?d00001 diff --git a/example/icon.png.import b/example/icon.png.import new file mode 100644 index 0000000..8b1c012 --- /dev/null +++ b/example/icon.png.import @@ -0,0 +1,28 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" + +[deps] + +source_md5="ae7e641067601e2184afcade49abd283" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/example/main.gd b/example/main.gd new file mode 100644 index 0000000..51712cd --- /dev/null +++ b/example/main.gd @@ -0,0 +1,22 @@ +extends Node + +const HotbarFactory = preload("res://addons/godot-hotbars/hotbar_factory.gd") + +func _ready(): + var hotbarFactory = HotbarFactory.new() + var hotbars = get_node("hotbars") + + var hotbar1 = hotbarFactory.create(1, 10) + hotbar1.set_name("hotbar_0") + hotbar1.set_global_position(Vector2(128, 128)) + hotbars.add_child(hotbar1) + + var hotbar2 = hotbarFactory.create(1, 10) + hotbar2.set_name("hotbar_1") + hotbar2.set_global_position(Vector2(32, 128)) + hotbars.add_child(hotbar2) + + var hotbar3 = hotbarFactory.create(10, 10) + hotbar3.set_name("hotbar_2") + hotbar3.set_global_position(Vector2(256, 128)) + hotbars.add_child(hotbar3) diff --git a/example/main.tscn b/example/main.tscn new file mode 100644 index 0000000..9bc16a6 --- /dev/null +++ b/example/main.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://main.gd" type="Script" id=1] + +[node name="main" type="Node"] + +script = ExtResource( 1 ) + +[node name="hotbars" type="Control" parent="."] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 40.0 +margin_bottom = 40.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 + + diff --git a/example/project.godot b/example/project.godot new file mode 100644 index 0000000..3115eec --- /dev/null +++ b/example/project.godot @@ -0,0 +1,19 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=3 + +[application] + +config/name="Godot Hotbars" +run/main_scene="res://main.tscn" +config/icon="res://icon.png" + +[rendering] + +environment/default_environment="res://default_env.tres" diff --git a/example/vertical_hotbar.tscn b/example/vertical_hotbar.tscn new file mode 100644 index 0000000..3bb42fb --- /dev/null +++ b/example/vertical_hotbar.tscn @@ -0,0 +1,129 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://addons/godot-hotbars/new_styleboxflat.tres" type="StyleBox" id=1] +[ext_resource path="res://addons/godot-hotbars/move_button.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/godot-hotbars/hotbar_button.tscn" type="PackedScene" id=3] + +[node name="vertical_hotbar" type="Control"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +_sections_unfolded = [ "Rect" ] + +[node name="Panel" type="PanelContainer" parent="."] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 32.0 +margin_bottom = 372.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +custom_styles/panel = ExtResource( 1 ) +_sections_unfolded = [ "Margin", "Rect", "custom_styles" ] + +[node name="buttons" type="GridContainer" parent="Panel"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 32.0 +margin_bottom = 372.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +size_flags_horizontal = 1 +size_flags_vertical = 1 +custom_constants/vseparation = 2 +custom_constants/hseparation = 2 +columns = 1 +_sections_unfolded = [ "Anchor", "Grow Direction", "Hint", "Margin", "Material", "Rect", "Size Flags", "Theme", "Visibility", "custom_constants" ] + +[node name="move_button2" parent="Panel/buttons" instance=ExtResource( 2 )] + +margin_right = 32.0 +margin_bottom = 32.0 +use_snap = false + +[node name="btn1" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 34.0 +margin_right = 32.0 +margin_bottom = 66.0 + +[node name="btn2" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 68.0 +margin_right = 32.0 +margin_bottom = 100.0 +hotbar_text = "2" + +[node name="btn3" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 102.0 +margin_right = 32.0 +margin_bottom = 134.0 +hotbar_text = "3" + +[node name="btn4" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 136.0 +margin_right = 32.0 +margin_bottom = 168.0 +hotbar_text = "4" + +[node name="btn5" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 170.0 +margin_right = 32.0 +margin_bottom = 202.0 +hotbar_text = "5" + +[node name="btn6" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 204.0 +margin_right = 32.0 +margin_bottom = 236.0 +hotbar_text = "6" + +[node name="btn7" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 238.0 +margin_right = 32.0 +margin_bottom = 270.0 +hotbar_text = "7" + +[node name="btn8" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 272.0 +margin_right = 32.0 +margin_bottom = 304.0 +hotbar_text = "8" + +[node name="btn9" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 306.0 +margin_right = 32.0 +margin_bottom = 338.0 +hotbar_text = "9" + +[node name="btn0" parent="Panel/buttons" instance=ExtResource( 3 )] + +margin_top = 340.0 +margin_right = 32.0 +margin_bottom = 372.0 +hotbar_text = "0" + +