├── .gitignore ├── LICENSE.md ├── README.md ├── addons └── gesture_recognizer │ ├── LICENSE.md │ ├── others │ ├── bottom_crear.tscn │ ├── create.tscn │ ├── gesture.tscn │ ├── icon.png │ └── icon.png.import │ ├── plugin.cfg │ ├── plugin.gd │ └── scripts │ ├── BottomCrear.gd │ ├── CloudRecognizer.gd │ ├── ControlGesture.gd │ ├── Create.gd │ └── Gest.gd ├── examples ├── .gitattributes ├── .gitignore ├── addons │ └── gesture_recognizer │ │ ├── LICENSE.md │ │ ├── others │ │ ├── bottom_crear.tscn │ │ ├── create.tscn │ │ ├── gesture.tscn │ │ ├── icon.png │ │ └── icon.png.import │ │ ├── plugin.cfg │ │ ├── plugin.gd │ │ └── scripts │ │ ├── BottomCrear.gd │ │ ├── CloudRecognizer.gd │ │ ├── ControlGesture.gd │ │ ├── Create.gd │ │ └── Gest.gd ├── assets │ ├── 8083d36269b0492d2b91b28abf5b3533.png │ ├── 8083d36269b0492d2b91b28abf5b3533.png.import │ ├── car.png │ ├── car.png.import │ ├── sun.png │ ├── sun.png.import │ ├── watercolor-5062356_1920.jpg │ └── watercolor-5062356_1920.jpg.import ├── gestures │ ├── box_1.tres │ ├── box_2.tres │ ├── box_3.tres │ ├── car_1.tres │ ├── circle_1.tres │ ├── circle_2.tres │ ├── circle_3.tres │ ├── heart_1.tres │ ├── heart_2.tres │ ├── heart_3.tres │ ├── sun_1.tres │ └── tree_1.tres ├── icon.svg ├── icon.svg.import ├── nodEC02.tmp ├── node_2d.tscn.depren ├── objects │ ├── box.tscn │ ├── car.tscn │ ├── circle.tscn │ └── heart.tscn ├── oo │ └── triangle_1.tres ├── project.godot ├── scenes │ ├── appear_objects.tscn │ ├── appear_objects2.tscn │ └── simil_percet.tscn └── scripts │ ├── appear_objects.gd │ ├── appear_objects2.gd │ ├── simil.gd │ └── sun.gd └── pictures ├── 1.1portada.png ├── 2.1Node.png ├── 2.2.1ButtonForClassify.png ├── 2.3.1CreateGesture.png ├── 2.3.2CreateButton.png └── 2.3.2SaveGesture.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | 4 | # Godot-specific ignores 5 | .import/ 6 | export.cfg 7 | export_presets.cfg 8 | 9 | # Imported translations (automatically generated from CSV files) 10 | *.translation 11 | 12 | # Mono-specific ignores 13 | .mono/ 14 | data_*/ 15 | mono_crash.*.json 16 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021-2024, Little Fish 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gesture Recognizer Godot 2 | 3 | ![Addon front page.](/pictures/1.1portada.png) 4 | 5 | ## Whats is? 6 | Gesture recognizer is a godot addon, this addon allows you make and recognize gestures 7 | It's based on [$Q Super-Quick Recognizer](http://depts.washington.edu/acelab/proj/dollar/qdollar.html). 8 | 9 | ## How to use? 10 | Add the `Gesture` node to the scene, this node requires a `CollisionShape2D` as child. 11 | 12 | ![Node in selector node.](/pictures/2.1Node.png) 13 | 14 | ### Classify Gesture 15 | When you have been draw a gesture, you can classify for three differents ways: 16 | 17 | - Call to classify() fuction: 18 | ``` 19 | func test(): 20 | Gesture.classify() 21 | ``` 22 | 23 | - Make true the property Classify Gesture: 24 | ``` 25 | func test(): 26 | Gesture.ClassifyGesture = true 27 | ``` 28 | 29 | - Assign a classify button from inspector. 30 | 31 | ![Classify buttom from inspector.](/pictures/2.2.1ButtonForClassify.png) 32 | 33 | ### Create Gesture 34 | First you must activate Create Gesture on te inspector in the `Gesture` node. 35 | 36 | ![Create gesture from inspector.](/pictures/2.3.1CreateGesture.png) 37 | 38 | Run the scene and draw youy gesture, when you end your gesture, you have to classify with the same ways the Classify Gesture or click on create button. 39 | 40 | ![Classify buttom from run game.](/pictures/2.3.2CreateButton.png) 41 | 42 | And then set name to gesture and save them. 43 | 44 | ![Classify buttom from run game.](/pictures/2.3.2SaveGesture.png) 45 | 46 | 47 | ## Properties 48 | ### Line 49 | 50 | - **Cap Mode**: Round the begins and ends of the lines. 51 | - **Min Length Line**: Length minimum for valid line, if length line is minus than this valor, the line will be erased. 52 | - **Line Width**: Width the line. 53 | - **Smooth**: Smoothing of the line stroke. 54 | - **Line Color**: Color that the line will have. 55 | - **Width Curve**: Makes there are different thicknesses along the line. 56 | 57 | ### Outline 58 | - **Outline**: Add a outline at the line. 59 | - **Outline Width**: Width the outline. 60 | - **Outline Color**: Color that the outline will have. 61 | - **Line Cover Line**: Makes each new line lie on top of the previous lines, only works if outline is true. 62 | 63 | ### Create Gesture 64 | - **Create Gesture**: The Gestures that you draw will be saved. 65 | 66 | You can save multiple gestures with the same name. 67 | 68 | ### Settings 69 | - **Touch**: Use the touch screen for drawing. 70 | - **Custom Button**: Use a custom input for drawing. 71 | - **Custom Buttom UI**: If Custom Button is active, you should put here the ui of the input to use. 72 | 73 | If touch or Custom Button are not active by default the mouse will be used. 74 | 75 | - **Custom Dir**: Make true if you want use a custom gesture directory 76 | - **Custom Dir UI**: Write here the directory without "res://" and the last "/". Example: If you directory folder is "res://gesture/level_1/" you must write "gesture/level_1" 77 | 78 | ### Classify Gesture 79 | - **Button For Classify**: Use a custom input for classify the gesture. 80 | - **Button For Classify UI**: If Button For Classify is active, you should put here the ui of the input to use. 81 | 82 | ## Signals 83 | - **gesture_name(gestureName : StringName, disCloudPoint : floeat)**: When the classified ends, this signal returns the gesture name and the similitud percent. 84 | - **line_disappear(points : Array)**: Just before the line has been erased, return an array with the line points. 85 | - **on_draw_enter()**: When you start to draw the line. 86 | - **on_draw_exit()**: When you finish the current line. 87 | 88 | ## Fuctions 89 | - **classify()**: When you draw a gesture, call this fiction to classify them. 90 | - **isDrawing()**: Check if you are drawing, bool. 91 | 92 | ## Installation 93 | ### Asset Library 94 | - In Godot, open the AssetLib tab. 95 | - Search for and select "Gesture Recognizer". 96 | - Download then install the plugin (be sure to only select the gesture_recognizer directory). 97 | - Enable the plugin inside Project/Project Settings/Plugins. 98 | 99 | 100 | ### Github Releases 101 | - Download a [release build](https://github.com/Little-Fish-hub/Gesture-Recognizer-Godot/releases). 102 | - Extract the zip file and move the addons/gesture_recognizer directory into the project root location. 103 | - Enable the plugin inside Project/Project Settings/Plugins. 104 | 105 | ## Contribution 106 | You can report bugs and request features [Here](https://docs.google.com/forms/d/e/1FAIpQLSeUo-z8ntYPC9lA2XKznybW1dPt7ZbBvssEAo7JZpW-oBeRAw/viewform?usp=sf_link) 107 | 108 | ## Credits 109 | - [Godot](https://godotengine.org/) for their great engine and beautiful community. 110 | - [$Q Super-Quick Recognizer](http://depts.washington.edu/acelab/proj/dollar/qdollar.html) for being the source of this addon. 111 | 112 | 113 | 114 | [BSD License](https://github.com/Little-Fish-hub/Gesture-Recognizer-Godot/blob/main/LICENSE.md) 115 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/LICENSE.md: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021-2024, Little Fish 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /addons/gesture_recognizer/others/bottom_crear.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bs6keo6l4mam1"] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/BottomCrear.gd" id="1_lwkrj"] 4 | 5 | [node name="BottomCrear" type="Control"] 6 | layout_mode = 3 7 | anchors_preset = 0 8 | script = ExtResource("1_lwkrj") 9 | 10 | [node name="crea" type="Button" parent="."] 11 | layout_mode = 0 12 | offset_left = 21.0 13 | offset_top = 22.0 14 | offset_right = 81.0 15 | offset_bottom = 53.0 16 | text = "Create" 17 | 18 | [connection signal="button_up" from="crea" to="." method="_on_crea_button_up"] 19 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/others/create.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dn3jomds7pxs"] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/Create.gd" id="1_sx3a7"] 4 | 5 | [node name="Create" type="Control"] 6 | layout_mode = 3 7 | anchors_preset = 15 8 | anchor_right = 1.0 9 | anchor_bottom = 1.0 10 | grow_horizontal = 2 11 | grow_vertical = 2 12 | script = ExtResource("1_sx3a7") 13 | 14 | [node name="Panel" type="Panel" parent="."] 15 | layout_mode = 1 16 | anchors_preset = 15 17 | anchor_right = 1.0 18 | anchor_bottom = 1.0 19 | grow_horizontal = 2 20 | grow_vertical = 2 21 | 22 | [node name="VBoxContainer" type="VBoxContainer" parent="Panel"] 23 | layout_mode = 1 24 | anchors_preset = 14 25 | anchor_top = 0.5 26 | anchor_right = 1.0 27 | anchor_bottom = 0.5 28 | offset_top = -124.0 29 | offset_bottom = 177.0 30 | grow_horizontal = 2 31 | grow_vertical = 2 32 | 33 | [node name="Label" type="Label" parent="Panel/VBoxContainer"] 34 | layout_mode = 2 35 | text = "Name:" 36 | 37 | [node name="TextEdit" type="TextEdit" parent="Panel/VBoxContainer"] 38 | layout_mode = 2 39 | size_flags_vertical = 3 40 | placeholder_text = "Enter the name of the gesture without spaces" 41 | 42 | [node name="Button" type="Button" parent="Panel/VBoxContainer"] 43 | layout_mode = 2 44 | text = "Save" 45 | 46 | [node name="Button2" type="Button" parent="Panel/VBoxContainer"] 47 | layout_mode = 2 48 | text = "Cancel" 49 | 50 | [node name="Popup" type="Panel" parent="Panel"] 51 | visible = false 52 | layout_mode = 1 53 | anchors_preset = 14 54 | anchor_top = 0.5 55 | anchor_right = 1.0 56 | anchor_bottom = 0.5 57 | offset_top = -135.0 58 | offset_bottom = 190.0 59 | grow_horizontal = 2 60 | grow_vertical = 2 61 | 62 | [node name="Label" type="Label" parent="Panel/Popup"] 63 | layout_mode = 1 64 | anchors_preset = 15 65 | anchor_right = 1.0 66 | anchor_bottom = 1.0 67 | grow_horizontal = 2 68 | grow_vertical = 2 69 | 70 | [connection signal="gui_input" from="Panel/VBoxContainer/TextEdit" to="." method="_on_text_edit_gui_input"] 71 | [connection signal="button_up" from="Panel/VBoxContainer/Button" to="." method="_on_button_button_up"] 72 | [connection signal="button_up" from="Panel/VBoxContainer/Button2" to="." method="_on_button_2_button_up"] 73 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/others/gesture.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://cumbq2cnvkmnr"] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/ControlGesture.gd" id="1_gh2dv"] 4 | 5 | [sub_resource type="Curve" id="Curve_c2dq5"] 6 | max_value = 3.0 7 | _data = [Vector2(0.1, 1.3), 0.0, 0.0, 0, 0, Vector2(0.5, 2.5), 0.0, 0.0, 0, 0, Vector2(0.9, 0.8), 0.0, 0.0, 0, 0] 8 | point_count = 3 9 | 10 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_1dlrd"] 11 | size = Vector2(611, 1223) 12 | 13 | [node name="Gesture" type="Area2D"] 14 | script = ExtResource("1_gh2dv") 15 | widthCurve = SubResource("Curve_c2dq5") 16 | outlineColor = Color(0.717647, 0, 0, 1) 17 | createGesture = true 18 | 19 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 20 | position = Vector2(295.5, 601.5) 21 | shape = SubResource("RectangleShape2D_1dlrd") 22 | 23 | [node name="Node" type="Node" parent="."] 24 | 25 | [connection signal="input_event" from="." to="." method="_on_input_event"] 26 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/others/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/addons/gesture_recognizer/others/icon.png -------------------------------------------------------------------------------- /addons/gesture_recognizer/others/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bbav2t48mmthk" 6 | path="res://.godot/imported/icon.png-5b0a778377f8fad902e91d57c27132cb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/gesture_recognizer/others/icon.png" 14 | dest_files=["res://.godot/imported/icon.png-5b0a778377f8fad902e91d57c27132cb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="Gesture Recognizer" 4 | description="Create and identify gestures." 5 | author="Little Fish" 6 | version="0.2" 7 | script="plugin.gd" 8 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/plugin.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorPlugin 3 | 4 | var autoloadName : String = "CloudRecognizer" 5 | 6 | func _enter_tree() -> void: 7 | add_custom_type("Gesture", "Area2D", preload("res://addons/gesture_recognizer/scripts/ControlGesture.gd"), preload("res://addons/gesture_recognizer/others/icon.png")) 8 | add_autoload_singleton(autoloadName, "res://addons/gesture_recognizer/scripts/CloudRecognizer.gd") 9 | 10 | func _exit_tree() -> void: 11 | remove_custom_type("Gesture") 12 | remove_autoload_singleton(autoloadName) 13 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/scripts/BottomCrear.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | var ss 3 | 4 | # Called when the node enters the scene tree for the first time. 5 | func _ready() -> void: 6 | ss = get_parent().get_node("Create") 7 | pass # Replace with function body. 8 | 9 | 10 | # Called every frame. 'delta' is the elapsed time since the previous frame. 11 | func _process(delta: float) -> void: 12 | if ss.visible: 13 | self.visible = false 14 | else: 15 | self.visible = true 16 | pass 17 | 18 | 19 | func _on_crea_button_up() -> void: 20 | get_parent().get_parent().classify() 21 | pass # Replace with function body. 22 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/scripts/CloudRecognizer.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | var gestureSet : Array 4 | 5 | var earlyAbandoning : bool = true 6 | var lowerBounding : bool = true 7 | 8 | signal classified_gesture(gestureName : StringName) 9 | 10 | #Construct LUT 11 | var maxCoords : int = 1024 12 | var LUTSize : int = 64 13 | var LUTScale : int = maxCoords / LUTSize 14 | 15 | var distCloud : float; 16 | 17 | var customDirCheck : bool = false 18 | var customDir : bool = false 19 | var customDirUI : String 20 | 21 | func _init() -> void: 22 | var dir = DirAccess.open("res://gestures") 23 | if dir: 24 | dir.list_dir_begin() 25 | var name = dir.get_next() 26 | while name != "": 27 | var rName = "res://gestures/" + str(name) 28 | gestureSet.append(ResourceLoader.load(rName)) 29 | name = dir.get_next() 30 | 31 | func _process(delta: float) -> void: 32 | 33 | if customDir and customDirUI != "" and !customDirCheck: 34 | gestureSet = [] 35 | var dir = DirAccess.open("res://" + customDirUI + "/") 36 | if dir: 37 | dir.list_dir_begin() 38 | var name = dir.get_next() 39 | while name != "": 40 | var rName = "res://" + customDirUI + "/" + str(name) 41 | gestureSet.append(ResourceLoader.load(rName)) 42 | name = dir.get_next() 43 | customDirCheck = true 44 | 45 | func classify(candidate : Gest): 46 | var minDistance : float = INF 47 | var gestureClass : StringName = ""; 48 | for template : Gest in gestureSet: 49 | var dist : float = greedy_cloud_match(candidate, template, minDistance) 50 | if dist < minDistance: 51 | minDistance = dist 52 | distCloud = dist 53 | gestureClass = template.gestureName 54 | prints("recognized gesture:", gestureClass) 55 | classified_gesture.emit(gestureClass) 56 | return gestureClass 57 | 58 | func dist(): 59 | var dd : float 60 | dd = 1 - (distCloud/pow(64, 4)) 61 | dd *= 100 62 | dd = max(0.1, dd) 63 | return dd 64 | 65 | func greedy_cloud_match(gesture1 : Gest, gesture2 : Gest, minSoFar : float): 66 | var n : int = gesture1.pointsInt.size() 67 | var eps : float = 0.5 68 | var step : int = floor(pow(n, 1.0 - eps)) 69 | 70 | if lowerBounding: 71 | var LB1 : Array = compute_lower_bound(gesture1, gesture2, gesture2.LUT, step) 72 | var LB2 : Array = compute_lower_bound(gesture2, gesture1, gesture1.LUT, step) 73 | 74 | var indexLB : int = 0 75 | for i in range(0, n, step): 76 | if LB1[indexLB] < minSoFar: 77 | minSoFar = min(minSoFar, cloud_distance(gesture1.pointsInt, gesture2.pointsInt, i, minSoFar)) 78 | if LB2[indexLB] < minSoFar: 79 | minSoFar = min(minSoFar, cloud_distance(gesture2.pointsInt, gesture1.pointsInt, i, minSoFar)) 80 | indexLB += 1 81 | else: 82 | for i in range(0, n, step): 83 | minSoFar = min(minSoFar, cloud_distance(gesture1.pointsInt, gesture2.pointsInt, i, minSoFar)) 84 | minSoFar = min(minSoFar, cloud_distance(gesture2.pointsInt, gesture1.pointsInt, i, minSoFar)) 85 | 86 | return minSoFar 87 | 88 | func compute_lower_bound(gesture1 : Gest, gesture2 : Gest, LUT, step : int): 89 | var n : int = gesture1.points.size() 90 | var LB : Array[float] 91 | LB.resize(n / step + 1) 92 | var SAT : Array[float] 93 | SAT.resize(n) 94 | 95 | LB[0] = 0 96 | 97 | for i in range(0, n): 98 | #print(gesture1.pointsInt[i]) 99 | var index : int = LUT[Vector2(int(gesture1.pointsInt[i].x / LUTScale), int(gesture1.pointsInt[i].y / LUTScale) )] 100 | var dist : float = sq_euclidean_distance(gesture1.points[i], gesture2.points[index]) 101 | if (i == 0): 102 | SAT[i] = dist 103 | else: 104 | SAT[i] = SAT[i-1] + dist 105 | LB[0] += (n-i) * dist 106 | 107 | var indexLB = 1 108 | 109 | for j in range(step, n, step): 110 | LB[indexLB] = LB[0] + j * SAT[n - 1] - n * SAT[j - 1] 111 | indexLB += 1 112 | pass 113 | return LB 114 | 115 | 116 | func cloud_distance(points1 : Array, points2 : Array, startIndex : int, minSoFar : float): 117 | var n : int = points1.size() 118 | var indexesNotMatched : Array 119 | indexesNotMatched.resize(n) 120 | for j in range(0, n): 121 | indexesNotMatched[j] = j 122 | 123 | var sum : float = 0 124 | var i : int = startIndex 125 | var weight : int = n 126 | var indexNotMatched : int = 0 127 | 128 | while weight > 0: 129 | var index : int = -1 130 | var minDistance : float = INF 131 | for j in range(indexNotMatched, n): 132 | var dist : float = sq_euclidean_distance(points1[i], points2[indexesNotMatched[j]]) 133 | if dist < minDistance: 134 | minDistance = dist 135 | index = j 136 | indexesNotMatched[index] = indexesNotMatched[indexNotMatched] 137 | sum += weight * minDistance 138 | weight -= 1 139 | 140 | if earlyAbandoning: 141 | if sum >= minSoFar: 142 | return sum 143 | 144 | i = (i + 1) % n 145 | indexNotMatched += 1 146 | 147 | return sum 148 | 149 | func euclidean_distance(a : Vector3, b : Vector3): 150 | return float(sqrt(sq_euclidean_distance(a, b))) 151 | 152 | func sq_euclidean_distance(a : Vector3, b : Vector3): 153 | var z : float = pow((a.x-b.x),2) + pow((a.y-b.y), 2) 154 | return z 155 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/scripts/ControlGesture.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | class_name Gesture 3 | 4 | @export_category("Line") 5 | 6 | #Variables de linea 7 | var line = null 8 | @export var capMode : int = 2 9 | @export var minLengthLine : int = 15 10 | @export var lineWidth : int = 6 11 | @export var smooth : int = 3; 12 | @export var lineColor : Color = Color.ALICE_BLUE 13 | @export var widthCurve : Curve = null 14 | 15 | @export_subgroup("Outline") 16 | var outline = null 17 | @export var Outline : bool = true 18 | @export var outlineWidth : int = 6 19 | @export var outlineColor : Color = Color.BLACK 20 | @export var lineCoverLine : bool = false 21 | 22 | var onDrawing : bool = false 23 | #puntos 24 | var gestureResource : Gest 25 | var pointsArray 26 | var pointsNorm : Array 27 | var pointsIntegers : Array 28 | const steps : int = 64 29 | 30 | #Construct LUT 31 | var LUT: Dictionary 32 | const maxCoords : int = 1024 33 | const LUTSize : int = 64 34 | const LUTScale : int = maxCoords / LUTSize 35 | 36 | #Guardado 37 | @export_subgroup("Create Gesture") 38 | @export var createGesture : bool = false 39 | var create 40 | 41 | #Opciones 42 | @export_subgroup("Settings") 43 | @export var touch : bool = false 44 | @export var customButton : bool = false 45 | @export var customButtomUI : String 46 | var earlyAbandoning : bool = true 47 | var lowerBounding : bool = true 48 | @export var customDir : bool = false 49 | @export var customDirUI : String = "" 50 | 51 | @export_subgroup("Classify Gesture") 52 | @export var buttonForClassify : bool = false 53 | @export var buttonForClassifyUI : String 54 | @export var ClassifyGesture : bool = false 55 | 56 | #Señales 57 | var nameGest 58 | signal gesture_name(gestureName : StringName, disCloudPoint : float) 59 | signal on_draw_enter() 60 | signal on_draw_exit() 61 | signal line_disappear(points : Array) 62 | var pointsDissapear 63 | 64 | #error 65 | var error : bool = false 66 | 67 | 68 | 69 | func classify(): 70 | set_gesture() 71 | reset_gesture() 72 | if createGesture: # and line != null: 73 | create.visible = true 74 | else: 75 | if !LUT.is_empty(): 76 | if !error: 77 | nameGest = CloudRecognizer.classify(gestureResource) 78 | var distCloud = CloudRecognizer.dist() 79 | gesture_name.emit(nameGest, distCloud) 80 | reset_gesture_data() 81 | pass 82 | 83 | func _ready(): 84 | 85 | if customDir: 86 | CloudRecognizer.customDir = true 87 | CloudRecognizer.customDirUI = customDirUI 88 | 89 | smooth = maxi(smooth, 1) 90 | 91 | connect("input_event", _on_input_event) 92 | ClassifyGesture = false 93 | LUT.clear() 94 | gestureResource = Gest.new() 95 | 96 | if touch: 97 | customButton = false 98 | 99 | CloudRecognizer.earlyAbandoning = earlyAbandoning 100 | CloudRecognizer.lowerBounding = lowerBounding 101 | CloudRecognizer.maxCoords = maxCoords 102 | CloudRecognizer.LUTSize = LUTSize 103 | CloudRecognizer.LUTScale = LUTScale 104 | 105 | if createGesture: 106 | var node = CanvasLayer.new() 107 | add_child(node) 108 | var nn = get_children()[-1] 109 | var crea = preload("res://addons/gesture_recognizer/others/create.tscn") 110 | var createInst = crea.instantiate() 111 | nn.add_child(createInst) 112 | create = nn.get_node("Create") 113 | create.visible = false 114 | var crea2 = preload("res://addons/gesture_recognizer/others/bottom_crear.tscn") 115 | var create2Inst = crea2.instantiate() 116 | nn.add_child(create2Inst) 117 | 118 | if Outline and !lineCoverLine: 119 | var outlineNode = Node.new() 120 | outlineNode.set_name("Outline") 121 | add_child(outlineNode) 122 | 123 | var lineNode = Node.new() 124 | lineNode.set_name("Line") 125 | add_child(lineNode) 126 | pass 127 | 128 | func _process(delta): 129 | 130 | if ClassifyGesture: 131 | ClassifyGesture = false 132 | classify() 133 | 134 | if customButton: 135 | if Input.is_action_just_pressed(customButtomUI): 136 | drawing() 137 | if Input.is_action_just_released(customButtomUI): 138 | stop_drawing() 139 | 140 | if onDrawing: # and ( != get_global_mouse_position()): 141 | var a : Array = line.get_points(); 142 | if !a.is_empty(): 143 | if a.back() != get_global_mouse_position(): 144 | line.add_point(get_global_mouse_position()) 145 | if Outline: 146 | outline.add_point(get_global_mouse_position()) 147 | else: 148 | line.add_point(get_global_mouse_position()) 149 | if Outline: 150 | outline.add_point(get_global_mouse_position()) 151 | 152 | if buttonForClassify and Input.is_action_just_pressed(buttonForClassifyUI): 153 | classify() 154 | 155 | func _on_input_event(viewport, event, shape_idx): 156 | if touch: 157 | if event is InputEventScreenTouch and event.pressed: 158 | drawing() 159 | if event is InputEventScreenTouch and !event.pressed: 160 | stop_drawing() 161 | 162 | 163 | elif !customButton: 164 | if event is InputEventMouseButton and event.pressed and event.button_index == 1: 165 | drawing() 166 | if event is InputEventMouseButton and !event.pressed and event.button_index == 1: 167 | stop_drawing() 168 | 169 | pass 170 | 171 | func drawing(): 172 | on_draw_enter.emit() 173 | error = false 174 | 175 | onDrawing = true 176 | line = Line2D.new() 177 | line.set_default_color(lineColor) 178 | line.set_begin_cap_mode(capMode) 179 | line.set_end_cap_mode(capMode) 180 | line.set_antialiased(true) 181 | line.set_width(lineWidth) 182 | if widthCurve != null: 183 | line.set_curve(widthCurve) 184 | if Outline: 185 | outline = Line2D.new() 186 | outline.set_default_color(outlineColor) 187 | outline.set_begin_cap_mode(capMode) 188 | outline.set_end_cap_mode(capMode) 189 | outline.set_antialiased(true) 190 | outline.set_width(lineWidth + outlineWidth) 191 | if widthCurve != null: 192 | outline.set_curve(widthCurve) 193 | if !lineCoverLine: 194 | get_node("Outline").add_child(outline) 195 | else: 196 | get_node("Line").add_child(outline) 197 | get_node("Line").add_child(line) 198 | 199 | pass 200 | 201 | func stop_drawing(): 202 | onDrawing = false; 203 | on_draw_exit.emit() 204 | 205 | if line != null: 206 | var smoothedPoints = smooth_points(line.get_points()); 207 | line.set_points(smoothedPoints) 208 | var length : float = 0; 209 | for i in smoothedPoints.size(): 210 | if i != 0: 211 | length += distance(smoothedPoints[i - 1], smoothedPoints[i]) 212 | if Outline: 213 | outline.set_points(smoothedPoints) 214 | 215 | if length < minLengthLine: 216 | outline.queue_free() 217 | outline = null 218 | if length < minLengthLine: 219 | line.queue_free() 220 | line = null 221 | pass 222 | 223 | func smooth_points(points): 224 | # Suavizado de Puntos 225 | var smoothedPoints = [] 226 | var windowSize = smooth 227 | 228 | for i in range(points.size()): 229 | var sumx = 0.0 230 | var sumy = 0.0 231 | var count = 0 232 | 233 | for j in range(max(0, i - windowSize), min(points.size(), i + windowSize)): 234 | sumx += points[j].x 235 | sumy += points[j].y 236 | count += 1 237 | 238 | smoothedPoints.append(Vector2(sumx / count, sumy / count)) 239 | 240 | 241 | queue_redraw(); 242 | return smoothedPoints 243 | 244 | 245 | func set_gesture(): 246 | if get_node("Line").get_child_count() > 0: 247 | var children = get_node("Line").get_children() 248 | for i in range(children.size()): 249 | pointsArray = append_vec3_array(children[i], i) 250 | resize_points(pointsArray) 251 | normalize_points(pointsArray) 252 | integers_points(pointsNorm) 253 | LUT_construct() 254 | 255 | 256 | 257 | func append_vec3_array(line, index): 258 | var points : Array = [] 259 | if pointsArray != null: 260 | points = pointsArray 261 | for point in line.points: 262 | var vec3 : Vector3 = Vector3(point.x, point.y, index) 263 | points.append(vec3) 264 | return points 265 | 266 | func resize_points(points): 267 | var newPoints : Array[Vector3] 268 | newPoints.resize(steps) 269 | newPoints[0] = points[0] 270 | var numPoints : int = 1 271 | 272 | var length : float = 0 273 | 274 | for i : int in range(1, points.size()): 275 | if points[i].z == points[i-1].z: 276 | length += distance(points[i-1], points[i]) 277 | 278 | var lengthStep = length / (steps -1) 279 | 280 | var dist : float 281 | var sumDist : float 282 | for i in range(1, points.size()): 283 | if points[i - 1].z == points[i].z and numPoints < steps - 1: 284 | dist = distance(points[i - 1], points[i]) 285 | 286 | if (dist + sumDist) > lengthStep: 287 | var lastPoint = points[i - 1] 288 | while (dist + sumDist) > lengthStep: 289 | var prom = (lengthStep - sumDist) / dist 290 | prom = clamp(prom, 0, 1) 291 | if is_nan(prom): 292 | prom = 0.5 293 | var newPoint = Vector3((1.0 - prom) * lastPoint.x + prom * points[i].x, (1.0 - prom) * lastPoint.y + prom * points[i].y, points[i].z) 294 | #newPoints[numPoints] = points[i] 295 | 296 | dist = dist + sumDist - lengthStep 297 | sumDist = 0 298 | 299 | newPoints[numPoints] = newPoint 300 | numPoints += 1 301 | sumDist = dist 302 | else: 303 | sumDist += dist 304 | if numPoints == steps - 1: 305 | newPoints[numPoints] = Vector3(points.back().x, points.back().y, points.back().z) 306 | 307 | pointsArray = newPoints 308 | pointsDissapear = pointsArray 309 | pass 310 | 311 | func normalize_points(points): 312 | # Normalización de Puntos 313 | var minx = INF 314 | var maxx = -INF 315 | var miny = INF 316 | var maxy = -INF 317 | 318 | for point in points: 319 | if point.x < minx: 320 | minx = point.x 321 | if point.x > maxx: 322 | maxx = point.x 323 | if point.y < miny: 324 | miny = point.y 325 | if point.y > maxy: 326 | maxy = point.y 327 | 328 | var normalizedPoints = [] 329 | var scalex = 1.0 / (maxx - minx) 330 | var scaley = 1.0 / (maxy - miny) 331 | 332 | for point in points: 333 | var normx = (point.x - minx) * scalex 334 | var normy = (point.y - miny) * scaley 335 | normalizedPoints.append(Vector3(normx, normy, point.z)) 336 | 337 | for point in normalizedPoints: 338 | if is_nan(point.x) or is_nan(point.y): 339 | reset_gesture() 340 | reset_gesture_data() 341 | error = true 342 | return 343 | 344 | pointsNorm = normalizedPoints 345 | gestureResource.points = normalizedPoints 346 | #return normalizedPoints 347 | 348 | func integers_points(points): 349 | pointsIntegers.resize(points.size()) 350 | for i in range(points.size()): 351 | var px = int((points[i].x + 1.0) / 2.0 * (maxCoords - 1)) 352 | var py = int((points[i].y + 1.0) / 2.0 * (maxCoords - 1)) 353 | var pz = points[i].z 354 | pointsIntegers[i] = Vector3(px, py, pz) 355 | gestureResource.pointsInt = pointsIntegers 356 | pass 357 | 358 | func LUT_construct(): 359 | 360 | for i in LUTSize: 361 | for j in LUTSize: 362 | var minDist : int = INF 363 | var index : int = -1 364 | for k : int in range(pointsIntegers.size()): 365 | var fila : int = pointsIntegers[k].y / LUTScale 366 | var col : int = pointsIntegers[k].x / LUTScale 367 | var dist : int = pow((fila-i),2) + pow((col-j), 2) 368 | if dist < minDist: 369 | minDist = dist 370 | index = k 371 | LUT[Vector2(i, j)] = index 372 | gestureResource.LUT = LUT 373 | pass 374 | 375 | func reset_gesture(): 376 | line_disappear.emit(pointsDissapear) 377 | 378 | for childs in get_node("Line").get_children(): 379 | childs.queue_free() 380 | if Outline: 381 | for childs in get_node("Outline").get_children(): 382 | childs.queue_free() 383 | 384 | 385 | func reset_gesture_data(): 386 | if pointsArray != null: 387 | pointsArray.clear() 388 | if pointsNorm != null: 389 | pointsNorm.clear() 390 | if pointsIntegers != null: 391 | pointsIntegers.clear() 392 | if LUT != null: 393 | LUT.clear() 394 | 395 | func distance(ubi1, ubi2): 396 | var dist : float; 397 | dist = Vector2(ubi1.x, ubi1.y).distance_to(Vector2(ubi2.x, ubi2.y)) 398 | return dist 399 | pass 400 | 401 | func isDrawing() -> bool: 402 | if onDrawing: 403 | return true 404 | else: 405 | return false 406 | return false 407 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/scripts/Create.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | 3 | var grab = null 4 | 5 | #Guardado 6 | var gestureResource : Gest 7 | var gestureName : String 8 | var nameEmpty : String 9 | 10 | 11 | func _ready() -> void: 12 | gestureName = $Panel/VBoxContainer/TextEdit.text 13 | nameEmpty = gestureName 14 | 15 | func _process(delta: float) -> void: 16 | if grab != null: 17 | grab.grab_focus() 18 | gestureName = $Panel/VBoxContainer/TextEdit.text 19 | pass 20 | 21 | 22 | func _on_text_edit_gui_input(event: InputEvent) -> void: 23 | 24 | if event is InputEventMouseButton and event.pressed: 25 | grab = $Panel/VBoxContainer/TextEdit 26 | pass # Replace with function body. 27 | 28 | 29 | func save_gesture(): 30 | gestureResource = Gest.new() 31 | gestureResource.pointsInt = get_parent().get_parent().pointsIntegers 32 | gestureResource.points = get_parent().get_parent().pointsNorm 33 | gestureResource.LUT = get_parent().get_parent().LUT 34 | if gestureName != nameEmpty and !get_parent().get_parent().pointsIntegers.is_empty(): 35 | gestureResource.gestureName = gestureName 36 | save_resource() 37 | $Panel/Popup/Label.text = "Gesture " + gestureName + " saved" 38 | $Panel/Popup.visible = true 39 | $Panel/VBoxContainer.visible = false 40 | await get_tree().create_timer(1).timeout 41 | $Panel/Popup.visible = false 42 | $Panel/VBoxContainer.visible = true 43 | self.visible = false 44 | get_parent().get_parent().reset_gesture_data() 45 | elif get_parent().get_parent().pointsIntegers.is_empty(): 46 | $Panel/Popup/Label.text = "Draw a gesture" 47 | $Panel/Popup.visible = true 48 | $Panel/VBoxContainer.visible = false 49 | await get_tree().create_timer(1).timeout 50 | $Panel/Popup.visible = false 51 | $Panel/VBoxContainer.visible = true 52 | self.visible = false 53 | elif gestureName == nameEmpty: 54 | $Panel/Popup/Label.text = "Write a name" 55 | $Panel/Popup.visible = true 56 | $Panel/VBoxContainer.visible = false 57 | await get_tree().create_timer(1).timeout 58 | $Panel/VBoxContainer.visible = true 59 | $Panel/Popup.visible = false 60 | pass 61 | 62 | 63 | func save_resource(): 64 | var savePath = "res://gestures/" 65 | var count : int = 1 66 | var gestureFilename = gestureName + "_" + str(count) 67 | var dir 68 | 69 | if DirAccess.dir_exists_absolute(savePath): 70 | dir = DirAccess.open(savePath) 71 | else: 72 | DirAccess.make_dir_absolute(savePath) 73 | dir = DirAccess.open(savePath) 74 | 75 | if dir.file_exists(savePath + gestureFilename + ".tres"): 76 | while dir.file_exists(savePath + gestureFilename + ".tres"): 77 | count += 1 78 | gestureFilename = gestureName + "_" + str(count) 79 | 80 | ResourceSaver.save(gestureResource, savePath + gestureFilename + ".tres") 81 | print("Gestro creado con el nombre de: " + gestureFilename) 82 | 83 | ResourceLoader.load(savePath + gestureFilename + ".tres") 84 | get_parent().get_parent().reset_gesture_data() 85 | 86 | func _on_button_button_up() -> void: 87 | save_gesture() 88 | pass # Replace with function body. 89 | 90 | 91 | func _on_button_2_button_up() -> void: 92 | get_parent().get_parent().reset_gesture_data() 93 | self.visible = false 94 | pass # Replace with function body. 95 | -------------------------------------------------------------------------------- /addons/gesture_recognizer/scripts/Gest.gd: -------------------------------------------------------------------------------- 1 | extends Resource 2 | class_name Gest 3 | 4 | @export var gestureName : String 5 | @export var points : Array 6 | @export var pointsInt : Array 7 | @export var LUT : Dictionary 8 | -------------------------------------------------------------------------------- /examples/.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | /android/ 4 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/LICENSE.md: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021-2024, Little Fish 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/others/bottom_crear.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bs6keo6l4mam1"] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/BottomCrear.gd" id="1_lwkrj"] 4 | 5 | [node name="BottomCrear" type="Control"] 6 | layout_mode = 3 7 | anchors_preset = 0 8 | script = ExtResource("1_lwkrj") 9 | 10 | [node name="crea" type="Button" parent="."] 11 | layout_mode = 0 12 | offset_left = 21.0 13 | offset_top = 22.0 14 | offset_right = 81.0 15 | offset_bottom = 53.0 16 | text = "Create" 17 | 18 | [connection signal="button_up" from="crea" to="." method="_on_crea_button_up"] 19 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/others/create.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dn3jomds7pxs"] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/Create.gd" id="1_sx3a7"] 4 | 5 | [node name="Create" type="Control"] 6 | layout_mode = 3 7 | anchors_preset = 15 8 | anchor_right = 1.0 9 | anchor_bottom = 1.0 10 | grow_horizontal = 2 11 | grow_vertical = 2 12 | script = ExtResource("1_sx3a7") 13 | 14 | [node name="Panel" type="Panel" parent="."] 15 | layout_mode = 1 16 | anchors_preset = 15 17 | anchor_right = 1.0 18 | anchor_bottom = 1.0 19 | grow_horizontal = 2 20 | grow_vertical = 2 21 | 22 | [node name="VBoxContainer" type="VBoxContainer" parent="Panel"] 23 | layout_mode = 1 24 | anchors_preset = 14 25 | anchor_top = 0.5 26 | anchor_right = 1.0 27 | anchor_bottom = 0.5 28 | offset_top = -124.0 29 | offset_bottom = 177.0 30 | grow_horizontal = 2 31 | grow_vertical = 2 32 | 33 | [node name="Label" type="Label" parent="Panel/VBoxContainer"] 34 | layout_mode = 2 35 | text = "Name:" 36 | 37 | [node name="TextEdit" type="TextEdit" parent="Panel/VBoxContainer"] 38 | layout_mode = 2 39 | size_flags_vertical = 3 40 | placeholder_text = "Enter the name of the gesture without spaces" 41 | 42 | [node name="Button" type="Button" parent="Panel/VBoxContainer"] 43 | layout_mode = 2 44 | text = "Save" 45 | 46 | [node name="Button2" type="Button" parent="Panel/VBoxContainer"] 47 | layout_mode = 2 48 | text = "Cancel" 49 | 50 | [node name="Popup" type="Panel" parent="Panel"] 51 | visible = false 52 | layout_mode = 1 53 | anchors_preset = 14 54 | anchor_top = 0.5 55 | anchor_right = 1.0 56 | anchor_bottom = 0.5 57 | offset_top = -135.0 58 | offset_bottom = 190.0 59 | grow_horizontal = 2 60 | grow_vertical = 2 61 | 62 | [node name="Label" type="Label" parent="Panel/Popup"] 63 | layout_mode = 1 64 | anchors_preset = 15 65 | anchor_right = 1.0 66 | anchor_bottom = 1.0 67 | grow_horizontal = 2 68 | grow_vertical = 2 69 | 70 | [connection signal="gui_input" from="Panel/VBoxContainer/TextEdit" to="." method="_on_text_edit_gui_input"] 71 | [connection signal="button_up" from="Panel/VBoxContainer/Button" to="." method="_on_button_button_up"] 72 | [connection signal="button_up" from="Panel/VBoxContainer/Button2" to="." method="_on_button_2_button_up"] 73 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/others/gesture.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://cumbq2cnvkmnr"] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/ControlGesture.gd" id="1_gh2dv"] 4 | 5 | [sub_resource type="Curve" id="Curve_c2dq5"] 6 | max_value = 3.0 7 | _data = [Vector2(0.1, 1.3), 0.0, 0.0, 0, 0, Vector2(0.5, 2.5), 0.0, 0.0, 0, 0, Vector2(0.9, 0.8), 0.0, 0.0, 0, 0] 8 | point_count = 3 9 | 10 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_1dlrd"] 11 | size = Vector2(611, 1223) 12 | 13 | [node name="Gesture" type="Area2D"] 14 | script = ExtResource("1_gh2dv") 15 | widthCurve = SubResource("Curve_c2dq5") 16 | outlineColor = Color(0.717647, 0, 0, 1) 17 | createGesture = true 18 | 19 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 20 | position = Vector2(295.5, 601.5) 21 | shape = SubResource("RectangleShape2D_1dlrd") 22 | 23 | [node name="Node" type="Node" parent="."] 24 | 25 | [connection signal="input_event" from="." to="." method="_on_input_event"] 26 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/others/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/examples/addons/gesture_recognizer/others/icon.png -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/others/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bbav2t48mmthk" 6 | path="res://.godot/imported/icon.png-5b0a778377f8fad902e91d57c27132cb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/gesture_recognizer/others/icon.png" 14 | dest_files=["res://.godot/imported/icon.png-5b0a778377f8fad902e91d57c27132cb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="Gesture Recognizer" 4 | description="Create and identify gestures." 5 | author="Little Fish" 6 | version="0.2" 7 | script="plugin.gd" 8 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/plugin.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorPlugin 3 | 4 | var autoloadName : String = "CloudRecognizer" 5 | 6 | func _enter_tree() -> void: 7 | add_custom_type("Gesture", "Area2D", preload("res://addons/gesture_recognizer/scripts/ControlGesture.gd"), preload("res://addons/gesture_recognizer/others/icon.png")) 8 | add_autoload_singleton(autoloadName, "res://addons/gesture_recognizer/scripts/CloudRecognizer.gd") 9 | 10 | func _exit_tree() -> void: 11 | remove_custom_type("Gesture") 12 | remove_autoload_singleton(autoloadName) 13 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/scripts/BottomCrear.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | var ss 3 | 4 | # Called when the node enters the scene tree for the first time. 5 | func _ready() -> void: 6 | ss = get_parent().get_node("Create") 7 | pass # Replace with function body. 8 | 9 | 10 | # Called every frame. 'delta' is the elapsed time since the previous frame. 11 | func _process(delta: float) -> void: 12 | if ss.visible: 13 | self.visible = false 14 | else: 15 | self.visible = true 16 | pass 17 | 18 | 19 | func _on_crea_button_up() -> void: 20 | get_parent().get_parent().classify() 21 | pass # Replace with function body. 22 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/scripts/CloudRecognizer.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | var gestureSet : Array 4 | 5 | var earlyAbandoning : bool = true 6 | var lowerBounding : bool = true 7 | 8 | signal classified_gesture(gestureName : StringName) 9 | 10 | #Construct LUT 11 | var maxCoords : int = 1024 12 | var LUTSize : int = 64 13 | var LUTScale : int = maxCoords / LUTSize 14 | 15 | var distCloud : float; 16 | 17 | var customDirCheck : bool = false 18 | var customDir : bool = false 19 | var customDirUI : String 20 | 21 | func _init() -> void: 22 | var dir = DirAccess.open("res://gestures") 23 | if dir: 24 | dir.list_dir_begin() 25 | var name = dir.get_next() 26 | while name != "": 27 | var rName = "res://gestures/" + str(name) 28 | gestureSet.append(ResourceLoader.load(rName)) 29 | name = dir.get_next() 30 | 31 | func _process(delta: float) -> void: 32 | 33 | if customDir and customDirUI != "" and !customDirCheck: 34 | gestureSet = [] 35 | var dir = DirAccess.open("res://" + customDirUI + "/") 36 | if dir: 37 | dir.list_dir_begin() 38 | var name = dir.get_next() 39 | while name != "": 40 | var rName = "res://" + customDirUI + "/" + str(name) 41 | gestureSet.append(ResourceLoader.load(rName)) 42 | name = dir.get_next() 43 | customDirCheck = true 44 | 45 | func classify(candidate : Gest): 46 | var minDistance : float = INF 47 | var gestureClass : StringName = ""; 48 | for template : Gest in gestureSet: 49 | var dist : float = greedy_cloud_match(candidate, template, minDistance) 50 | if dist < minDistance: 51 | minDistance = dist 52 | distCloud = dist 53 | gestureClass = template.gestureName 54 | prints("recognized gesture:", gestureClass) 55 | classified_gesture.emit(gestureClass) 56 | return gestureClass 57 | 58 | func dist(): 59 | var dd : float 60 | dd = 1 - (distCloud/pow(64, 4)) 61 | dd *= 100 62 | dd = max(0.1, dd) 63 | return dd 64 | 65 | func greedy_cloud_match(gesture1 : Gest, gesture2 : Gest, minSoFar : float): 66 | var n : int = gesture1.pointsInt.size() 67 | var eps : float = 0.5 68 | var step : int = floor(pow(n, 1.0 - eps)) 69 | 70 | if lowerBounding: 71 | var LB1 : Array = compute_lower_bound(gesture1, gesture2, gesture2.LUT, step) 72 | var LB2 : Array = compute_lower_bound(gesture2, gesture1, gesture1.LUT, step) 73 | 74 | var indexLB : int = 0 75 | for i in range(0, n, step): 76 | if LB1[indexLB] < minSoFar: 77 | minSoFar = min(minSoFar, cloud_distance(gesture1.pointsInt, gesture2.pointsInt, i, minSoFar)) 78 | if LB2[indexLB] < minSoFar: 79 | minSoFar = min(minSoFar, cloud_distance(gesture2.pointsInt, gesture1.pointsInt, i, minSoFar)) 80 | indexLB += 1 81 | else: 82 | for i in range(0, n, step): 83 | minSoFar = min(minSoFar, cloud_distance(gesture1.pointsInt, gesture2.pointsInt, i, minSoFar)) 84 | minSoFar = min(minSoFar, cloud_distance(gesture2.pointsInt, gesture1.pointsInt, i, minSoFar)) 85 | 86 | return minSoFar 87 | 88 | func compute_lower_bound(gesture1 : Gest, gesture2 : Gest, LUT, step : int): 89 | var n : int = gesture1.points.size() 90 | var LB : Array[float] 91 | LB.resize(n / step + 1) 92 | var SAT : Array[float] 93 | SAT.resize(n) 94 | 95 | LB[0] = 0 96 | 97 | for i in range(0, n): 98 | #print(gesture1.pointsInt[i]) 99 | var index : int = LUT[Vector2(int(gesture1.pointsInt[i].x / LUTScale), int(gesture1.pointsInt[i].y / LUTScale) )] 100 | var dist : float = sq_euclidean_distance(gesture1.points[i], gesture2.points[index]) 101 | if (i == 0): 102 | SAT[i] = dist 103 | else: 104 | SAT[i] = SAT[i-1] + dist 105 | LB[0] += (n-i) * dist 106 | 107 | var indexLB = 1 108 | 109 | for j in range(step, n, step): 110 | LB[indexLB] = LB[0] + j * SAT[n - 1] - n * SAT[j - 1] 111 | indexLB += 1 112 | pass 113 | return LB 114 | 115 | 116 | func cloud_distance(points1 : Array, points2 : Array, startIndex : int, minSoFar : float): 117 | var n : int = points1.size() 118 | var indexesNotMatched : Array 119 | indexesNotMatched.resize(n) 120 | for j in range(0, n): 121 | indexesNotMatched[j] = j 122 | 123 | var sum : float = 0 124 | var i : int = startIndex 125 | var weight : int = n 126 | var indexNotMatched : int = 0 127 | 128 | while weight > 0: 129 | var index : int = -1 130 | var minDistance : float = INF 131 | for j in range(indexNotMatched, n): 132 | var dist : float = sq_euclidean_distance(points1[i], points2[indexesNotMatched[j]]) 133 | if dist < minDistance: 134 | minDistance = dist 135 | index = j 136 | indexesNotMatched[index] = indexesNotMatched[indexNotMatched] 137 | sum += weight * minDistance 138 | weight -= 1 139 | 140 | if earlyAbandoning: 141 | if sum >= minSoFar: 142 | return sum 143 | 144 | i = (i + 1) % n 145 | indexNotMatched += 1 146 | 147 | return sum 148 | 149 | func euclidean_distance(a : Vector3, b : Vector3): 150 | return float(sqrt(sq_euclidean_distance(a, b))) 151 | 152 | func sq_euclidean_distance(a : Vector3, b : Vector3): 153 | var z : float = pow((a.x-b.x),2) + pow((a.y-b.y), 2) 154 | return z 155 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/scripts/ControlGesture.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | class_name Gesture 3 | 4 | @export_category("Line") 5 | 6 | #Variables de linea 7 | var line = null 8 | @export var capMode : int = 2 9 | @export var minLengthLine : int = 15 10 | @export var lineWidth : int = 6 11 | @export var smooth : int = 3; 12 | @export var lineColor : Color = Color.ALICE_BLUE 13 | @export var widthCurve : Curve = null 14 | 15 | @export_subgroup("Outline") 16 | var outline = null 17 | @export var Outline : bool = true 18 | @export var outlineWidth : int = 6 19 | @export var outlineColor : Color = Color.BLACK 20 | @export var lineCoverLine : bool = false 21 | 22 | var onDrawing : bool = false 23 | #puntos 24 | var gestureResource : Gest 25 | var pointsArray 26 | var pointsNorm : Array 27 | var pointsIntegers : Array 28 | const steps : int = 64 29 | 30 | #Construct LUT 31 | var LUT: Dictionary 32 | const maxCoords : int = 1024 33 | const LUTSize : int = 64 34 | const LUTScale : int = maxCoords / LUTSize 35 | 36 | #Guardado 37 | @export_subgroup("Create Gesture") 38 | @export var createGesture : bool = false 39 | var create 40 | 41 | #Opciones 42 | @export_subgroup("Settings") 43 | @export var touch : bool = false 44 | @export var customButton : bool = false 45 | @export var customButtomUI : String 46 | var earlyAbandoning : bool = true 47 | var lowerBounding : bool = true 48 | @export var customDir : bool = false 49 | @export var customDirUI : String = "" 50 | 51 | @export_subgroup("Classify Gesture") 52 | @export var buttonForClassify : bool = false 53 | @export var buttonForClassifyUI : String 54 | @export var ClassifyGesture : bool = false 55 | 56 | #Señales 57 | var nameGest 58 | signal gesture_name(gestureName : StringName, disCloudPoint : float) 59 | signal on_draw_enter() 60 | signal on_draw_exit() 61 | signal line_disappear(points : Array) 62 | var pointsDissapear 63 | 64 | #error 65 | var error : bool = false 66 | 67 | 68 | 69 | func classify(): 70 | set_gesture() 71 | reset_gesture() 72 | if createGesture: # and line != null: 73 | create.visible = true 74 | else: 75 | if !LUT.is_empty(): 76 | if !error: 77 | nameGest = CloudRecognizer.classify(gestureResource) 78 | var distCloud = CloudRecognizer.dist() 79 | gesture_name.emit(nameGest, distCloud) 80 | reset_gesture_data() 81 | pass 82 | 83 | func _ready(): 84 | 85 | if customDir: 86 | CloudRecognizer.customDir = true 87 | CloudRecognizer.customDirUI = customDirUI 88 | 89 | smooth = maxi(smooth, 1) 90 | 91 | connect("input_event", _on_input_event) 92 | ClassifyGesture = false 93 | LUT.clear() 94 | gestureResource = Gest.new() 95 | 96 | if touch: 97 | customButton = false 98 | 99 | CloudRecognizer.earlyAbandoning = earlyAbandoning 100 | CloudRecognizer.lowerBounding = lowerBounding 101 | CloudRecognizer.maxCoords = maxCoords 102 | CloudRecognizer.LUTSize = LUTSize 103 | CloudRecognizer.LUTScale = LUTScale 104 | 105 | if createGesture: 106 | var node = CanvasLayer.new() 107 | add_child(node) 108 | var nn = get_children()[-1] 109 | var crea = preload("res://addons/gesture_recognizer/others/create.tscn") 110 | var createInst = crea.instantiate() 111 | nn.add_child(createInst) 112 | create = nn.get_node("Create") 113 | create.visible = false 114 | var crea2 = preload("res://addons/gesture_recognizer/others/bottom_crear.tscn") 115 | var create2Inst = crea2.instantiate() 116 | nn.add_child(create2Inst) 117 | 118 | if Outline and !lineCoverLine: 119 | var outlineNode = Node.new() 120 | outlineNode.set_name("Outline") 121 | add_child(outlineNode) 122 | 123 | var lineNode = Node.new() 124 | lineNode.set_name("Line") 125 | add_child(lineNode) 126 | pass 127 | 128 | func _process(delta): 129 | 130 | if ClassifyGesture: 131 | ClassifyGesture = false 132 | classify() 133 | 134 | if customButton: 135 | if Input.is_action_just_pressed(customButtomUI): 136 | drawing() 137 | if Input.is_action_just_released(customButtomUI): 138 | stop_drawing() 139 | 140 | if onDrawing: # and ( != get_global_mouse_position()): 141 | var a : Array = line.get_points(); 142 | if !a.is_empty(): 143 | if a.back() != get_global_mouse_position(): 144 | line.add_point(get_global_mouse_position()) 145 | if Outline: 146 | outline.add_point(get_global_mouse_position()) 147 | else: 148 | line.add_point(get_global_mouse_position()) 149 | if Outline: 150 | outline.add_point(get_global_mouse_position()) 151 | 152 | if buttonForClassify and Input.is_action_just_pressed(buttonForClassifyUI): 153 | classify() 154 | 155 | func _on_input_event(viewport, event, shape_idx): 156 | if touch: 157 | if event is InputEventScreenTouch and event.pressed: 158 | drawing() 159 | if event is InputEventScreenTouch and !event.pressed: 160 | stop_drawing() 161 | 162 | 163 | elif !customButton: 164 | if event is InputEventMouseButton and event.pressed and event.button_index == 1: 165 | drawing() 166 | if event is InputEventMouseButton and !event.pressed and event.button_index == 1: 167 | stop_drawing() 168 | 169 | pass 170 | 171 | func drawing(): 172 | on_draw_enter.emit() 173 | error = false 174 | 175 | onDrawing = true 176 | line = Line2D.new() 177 | line.set_default_color(lineColor) 178 | line.set_begin_cap_mode(capMode) 179 | line.set_end_cap_mode(capMode) 180 | line.set_antialiased(true) 181 | line.set_width(lineWidth) 182 | if widthCurve != null: 183 | line.set_curve(widthCurve) 184 | if Outline: 185 | outline = Line2D.new() 186 | outline.set_default_color(outlineColor) 187 | outline.set_begin_cap_mode(capMode) 188 | outline.set_end_cap_mode(capMode) 189 | outline.set_antialiased(true) 190 | outline.set_width(lineWidth + outlineWidth) 191 | if widthCurve != null: 192 | outline.set_curve(widthCurve) 193 | if !lineCoverLine: 194 | get_node("Outline").add_child(outline) 195 | else: 196 | get_node("Line").add_child(outline) 197 | get_node("Line").add_child(line) 198 | 199 | pass 200 | 201 | func stop_drawing(): 202 | onDrawing = false; 203 | on_draw_exit.emit() 204 | 205 | if line != null: 206 | var smoothedPoints = smooth_points(line.get_points()); 207 | line.set_points(smoothedPoints) 208 | var length : float = 0; 209 | for i in smoothedPoints.size(): 210 | if i != 0: 211 | length += distance(smoothedPoints[i - 1], smoothedPoints[i]) 212 | if Outline: 213 | outline.set_points(smoothedPoints) 214 | 215 | if length < minLengthLine: 216 | outline.queue_free() 217 | outline = null 218 | if length < minLengthLine: 219 | line.queue_free() 220 | line = null 221 | pass 222 | 223 | func smooth_points(points): 224 | # Suavizado de Puntos 225 | var smoothedPoints = [] 226 | var windowSize = smooth 227 | 228 | for i in range(points.size()): 229 | var sumx = 0.0 230 | var sumy = 0.0 231 | var count = 0 232 | 233 | for j in range(max(0, i - windowSize), min(points.size(), i + windowSize)): 234 | sumx += points[j].x 235 | sumy += points[j].y 236 | count += 1 237 | 238 | smoothedPoints.append(Vector2(sumx / count, sumy / count)) 239 | 240 | 241 | queue_redraw(); 242 | return smoothedPoints 243 | 244 | 245 | func set_gesture(): 246 | if get_node("Line").get_child_count() > 0: 247 | var children = get_node("Line").get_children() 248 | for i in range(children.size()): 249 | pointsArray = append_vec3_array(children[i], i) 250 | resize_points(pointsArray) 251 | normalize_points(pointsArray) 252 | integers_points(pointsNorm) 253 | LUT_construct() 254 | 255 | 256 | 257 | func append_vec3_array(line, index): 258 | var points : Array = [] 259 | if pointsArray != null: 260 | points = pointsArray 261 | for point in line.points: 262 | var vec3 : Vector3 = Vector3(point.x, point.y, index) 263 | points.append(vec3) 264 | return points 265 | 266 | func resize_points(points): 267 | var newPoints : Array[Vector3] 268 | newPoints.resize(steps) 269 | newPoints[0] = points[0] 270 | var numPoints : int = 1 271 | 272 | var length : float = 0 273 | 274 | for i : int in range(1, points.size()): 275 | if points[i].z == points[i-1].z: 276 | length += distance(points[i-1], points[i]) 277 | 278 | var lengthStep = length / (steps -1) 279 | 280 | var dist : float 281 | var sumDist : float 282 | for i in range(1, points.size()): 283 | if points[i - 1].z == points[i].z and numPoints < steps - 1: 284 | dist = distance(points[i - 1], points[i]) 285 | 286 | if (dist + sumDist) > lengthStep: 287 | var lastPoint = points[i - 1] 288 | while (dist + sumDist) > lengthStep: 289 | var prom = (lengthStep - sumDist) / dist 290 | prom = clamp(prom, 0, 1) 291 | if is_nan(prom): 292 | prom = 0.5 293 | var newPoint = Vector3((1.0 - prom) * lastPoint.x + prom * points[i].x, (1.0 - prom) * lastPoint.y + prom * points[i].y, points[i].z) 294 | #newPoints[numPoints] = points[i] 295 | 296 | dist = dist + sumDist - lengthStep 297 | sumDist = 0 298 | 299 | newPoints[numPoints] = newPoint 300 | numPoints += 1 301 | sumDist = dist 302 | else: 303 | sumDist += dist 304 | if numPoints == steps - 1: 305 | newPoints[numPoints] = Vector3(points.back().x, points.back().y, points.back().z) 306 | 307 | pointsArray = newPoints 308 | pointsDissapear = pointsArray 309 | pass 310 | 311 | func normalize_points(points): 312 | # Normalización de Puntos 313 | var minx = INF 314 | var maxx = -INF 315 | var miny = INF 316 | var maxy = -INF 317 | 318 | for point in points: 319 | if point.x < minx: 320 | minx = point.x 321 | if point.x > maxx: 322 | maxx = point.x 323 | if point.y < miny: 324 | miny = point.y 325 | if point.y > maxy: 326 | maxy = point.y 327 | 328 | var normalizedPoints = [] 329 | var scalex = 1.0 / (maxx - minx) 330 | var scaley = 1.0 / (maxy - miny) 331 | 332 | for point in points: 333 | var normx = (point.x - minx) * scalex 334 | var normy = (point.y - miny) * scaley 335 | normalizedPoints.append(Vector3(normx, normy, point.z)) 336 | 337 | for point in normalizedPoints: 338 | if is_nan(point.x) or is_nan(point.y): 339 | reset_gesture() 340 | reset_gesture_data() 341 | error = true 342 | return 343 | 344 | pointsNorm = normalizedPoints 345 | gestureResource.points = normalizedPoints 346 | #return normalizedPoints 347 | 348 | func integers_points(points): 349 | pointsIntegers.resize(points.size()) 350 | for i in range(points.size()): 351 | var px = int((points[i].x + 1.0) / 2.0 * (maxCoords - 1)) 352 | var py = int((points[i].y + 1.0) / 2.0 * (maxCoords - 1)) 353 | var pz = points[i].z 354 | pointsIntegers[i] = Vector3(px, py, pz) 355 | gestureResource.pointsInt = pointsIntegers 356 | pass 357 | 358 | func LUT_construct(): 359 | 360 | for i in LUTSize: 361 | for j in LUTSize: 362 | var minDist : int = INF 363 | var index : int = -1 364 | for k : int in range(pointsIntegers.size()): 365 | var fila : int = pointsIntegers[k].y / LUTScale 366 | var col : int = pointsIntegers[k].x / LUTScale 367 | var dist : int = pow((fila-i),2) + pow((col-j), 2) 368 | if dist < minDist: 369 | minDist = dist 370 | index = k 371 | LUT[Vector2(i, j)] = index 372 | gestureResource.LUT = LUT 373 | pass 374 | 375 | func reset_gesture(): 376 | line_disappear.emit(pointsDissapear) 377 | 378 | for childs in get_node("Line").get_children(): 379 | childs.queue_free() 380 | if Outline: 381 | for childs in get_node("Outline").get_children(): 382 | childs.queue_free() 383 | 384 | 385 | func reset_gesture_data(): 386 | if pointsArray != null: 387 | pointsArray.clear() 388 | if pointsNorm != null: 389 | pointsNorm.clear() 390 | if pointsIntegers != null: 391 | pointsIntegers.clear() 392 | if LUT != null: 393 | LUT.clear() 394 | 395 | func distance(ubi1, ubi2): 396 | var dist : float; 397 | dist = Vector2(ubi1.x, ubi1.y).distance_to(Vector2(ubi2.x, ubi2.y)) 398 | return dist 399 | pass 400 | 401 | func isDrawing() -> bool: 402 | if onDrawing: 403 | return true 404 | else: 405 | return false 406 | return false 407 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/scripts/Create.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | 3 | var grab = null 4 | 5 | #Guardado 6 | var gestureResource : Gest 7 | var gestureName : String 8 | var nameEmpty : String 9 | 10 | 11 | func _ready() -> void: 12 | gestureName = $Panel/VBoxContainer/TextEdit.text 13 | nameEmpty = gestureName 14 | 15 | func _process(delta: float) -> void: 16 | if grab != null: 17 | grab.grab_focus() 18 | gestureName = $Panel/VBoxContainer/TextEdit.text 19 | pass 20 | 21 | 22 | func _on_text_edit_gui_input(event: InputEvent) -> void: 23 | 24 | if event is InputEventMouseButton and event.pressed: 25 | grab = $Panel/VBoxContainer/TextEdit 26 | pass # Replace with function body. 27 | 28 | 29 | func save_gesture(): 30 | gestureResource = Gest.new() 31 | gestureResource.pointsInt = get_parent().get_parent().pointsIntegers 32 | gestureResource.points = get_parent().get_parent().pointsNorm 33 | gestureResource.LUT = get_parent().get_parent().LUT 34 | if gestureName != nameEmpty and !get_parent().get_parent().pointsIntegers.is_empty(): 35 | gestureResource.gestureName = gestureName 36 | save_resource() 37 | $Panel/Popup/Label.text = "Gesture " + gestureName + " saved" 38 | $Panel/Popup.visible = true 39 | $Panel/VBoxContainer.visible = false 40 | await get_tree().create_timer(1).timeout 41 | $Panel/Popup.visible = false 42 | $Panel/VBoxContainer.visible = true 43 | self.visible = false 44 | get_parent().get_parent().reset_gesture_data() 45 | elif get_parent().get_parent().pointsIntegers.is_empty(): 46 | $Panel/Popup/Label.text = "Draw a gesture" 47 | $Panel/Popup.visible = true 48 | $Panel/VBoxContainer.visible = false 49 | await get_tree().create_timer(1).timeout 50 | $Panel/Popup.visible = false 51 | $Panel/VBoxContainer.visible = true 52 | self.visible = false 53 | elif gestureName == nameEmpty: 54 | $Panel/Popup/Label.text = "Write a name" 55 | $Panel/Popup.visible = true 56 | $Panel/VBoxContainer.visible = false 57 | await get_tree().create_timer(1).timeout 58 | $Panel/VBoxContainer.visible = true 59 | $Panel/Popup.visible = false 60 | pass 61 | 62 | 63 | func save_resource(): 64 | var savePath = "res://gestures/" 65 | var count : int = 1 66 | var gestureFilename = gestureName + "_" + str(count) 67 | var dir 68 | 69 | if DirAccess.dir_exists_absolute(savePath): 70 | dir = DirAccess.open(savePath) 71 | else: 72 | DirAccess.make_dir_absolute(savePath) 73 | dir = DirAccess.open(savePath) 74 | 75 | if dir.file_exists(savePath + gestureFilename + ".tres"): 76 | while dir.file_exists(savePath + gestureFilename + ".tres"): 77 | count += 1 78 | gestureFilename = gestureName + "_" + str(count) 79 | 80 | ResourceSaver.save(gestureResource, savePath + gestureFilename + ".tres") 81 | print("Gestro creado con el nombre de: " + gestureFilename) 82 | 83 | ResourceLoader.load(savePath + gestureFilename + ".tres") 84 | get_parent().get_parent().reset_gesture_data() 85 | 86 | func _on_button_button_up() -> void: 87 | save_gesture() 88 | pass # Replace with function body. 89 | 90 | 91 | func _on_button_2_button_up() -> void: 92 | get_parent().get_parent().reset_gesture_data() 93 | self.visible = false 94 | pass # Replace with function body. 95 | -------------------------------------------------------------------------------- /examples/addons/gesture_recognizer/scripts/Gest.gd: -------------------------------------------------------------------------------- 1 | extends Resource 2 | class_name Gest 3 | 4 | @export var gestureName : String 5 | @export var points : Array 6 | @export var pointsInt : Array 7 | @export var LUT : Dictionary 8 | -------------------------------------------------------------------------------- /examples/assets/8083d36269b0492d2b91b28abf5b3533.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/examples/assets/8083d36269b0492d2b91b28abf5b3533.png -------------------------------------------------------------------------------- /examples/assets/8083d36269b0492d2b91b28abf5b3533.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bec2gx83qa22w" 6 | path="res://.godot/imported/8083d36269b0492d2b91b28abf5b3533.png-e2f3e02e79164e8ec4a7ad71779b7dc6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/8083d36269b0492d2b91b28abf5b3533.png" 14 | dest_files=["res://.godot/imported/8083d36269b0492d2b91b28abf5b3533.png-e2f3e02e79164e8ec4a7ad71779b7dc6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/examples/assets/car.png -------------------------------------------------------------------------------- /examples/assets/car.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dognhpkaijowt" 6 | path="res://.godot/imported/car.png-d32f5b1402097a8b34a6ade6a9b7d527.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/car.png" 14 | dest_files=["res://.godot/imported/car.png-d32f5b1402097a8b34a6ade6a9b7d527.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/examples/assets/sun.png -------------------------------------------------------------------------------- /examples/assets/sun.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c60dqqxan2i05" 6 | path="res://.godot/imported/sun.png-96654e2514e117453f5b519ac98c70c7.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/sun.png" 14 | dest_files=["res://.godot/imported/sun.png-96654e2514e117453f5b519ac98c70c7.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/watercolor-5062356_1920.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/examples/assets/watercolor-5062356_1920.jpg -------------------------------------------------------------------------------- /examples/assets/watercolor-5062356_1920.jpg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b5sy04vdq6q0t" 6 | path="res://.godot/imported/watercolor-5062356_1920.jpg-4cd428e1b5e5d4bdbb8ede367d3b0cb6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/watercolor-5062356_1920.jpg" 14 | dest_files=["res://.godot/imported/watercolor-5062356_1920.jpg-4cd428e1b5e5d4bdbb8ede367d3b0cb6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/gestures/box_3.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="Gest" load_steps=2 format=3] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/Gest.gd" id="1_ix1sj"] 4 | 5 | [resource] 6 | script = ExtResource("1_ix1sj") 7 | gestureName = "box" 8 | points = [Vector3(0.0609523, 0.0818363, 0), Vector3(0.0524037, 0.142206, 0), Vector3(0.0460346, 0.20289, 0), Vector3(0.0414633, 0.263766, 0), Vector3(0.0362662, 0.324582, 0), Vector3(0.0316408, 0.385447, 0), Vector3(0.0257049, 0.446186, 0), Vector3(0.0165442, 0.506444, 0), Vector3(0.00998221, 0.567016, 0), Vector3(0.00441598, 0.62765, 0), Vector3(0, 0.6884, 0), Vector3(0, 0.749464, 0), Vector3(0, 0.810529, 0), Vector3(0, 0.871593, 0), Vector3(0, 0.932658, 0), Vector3(0.0102815, 0.988207, 0), Vector3(0.0681227, 0.994012, 0), Vector3(0.126396, 0.994012, 0), Vector3(0.184668, 0.994012, 0), Vector3(0.242942, 0.994012, 0), Vector3(0.301214, 0.994012, 0), Vector3(0.359487, 0.994012, 0), Vector3(0.41776, 0.994012, 0), Vector3(0.476033, 0.994012, 0), Vector3(0.534306, 0.994012, 0), Vector3(0.592579, 0.994012, 0), Vector3(0.650779, 0.996362, 0), Vector3(0.708946, 1, 0), Vector3(0.767219, 1, 0), Vector3(0.825491, 1, 0), Vector3(0.883765, 1, 0), Vector3(0.942038, 1, 0), Vector3(0.97712, 0.962896, 0), Vector3(0.98514, 0.902418, 0), Vector3(0.99205, 0.841793, 0), Vector3(0.996857, 0.780942, 0), Vector3(0.999986, 0.719974, 0), Vector3(1, 0.65891, 0), Vector3(1, 0.597845, 0), Vector3(1, 0.536781, 0), Vector3(1, 0.475717, 0), Vector3(1, 0.414652, 0), Vector3(0.997477, 0.353648, 0), Vector3(0.991876, 0.292877, 0), Vector3(0.985691, 0.232193, 0), Vector3(0.98059, 0.171372, 0), Vector3(0.969095, 0.111528, 0), Vector3(0.960315, 0.0512217, 0), Vector3(0.933838, 0.00276815, 0), Vector3(0.875722, 0, 0), Vector3(0.817449, 0, 0), Vector3(0.759176, 0, 0), Vector3(0.700903, 0, 0), Vector3(0.64263, 0, 0), Vector3(0.584357, 0, 0), Vector3(0.526084, 0, 0), Vector3(0.467811, 0, 0), Vector3(0.409538, 0, 0), Vector3(0.351265, 0, 0), Vector3(0.292992, 0, 0), Vector3(0.234719, 0, 0), Vector3(0.176447, 0, 0), Vector3(0.118173, 0, 0), Vector3(0.06, 0.00149701, 0)] 9 | pointsInt = [Vector3(542, 553, 0), Vector3(538, 584, 0), Vector3(535, 615, 0), Vector3(532, 646, 0), Vector3(530, 677, 0), Vector3(527, 708, 0), Vector3(524, 739, 0), Vector3(519, 770, 0), Vector3(516, 801, 0), Vector3(513, 832, 0), Vector3(511, 863, 0), Vector3(511, 894, 0), Vector3(511, 926, 0), Vector3(511, 957, 0), Vector3(511, 988, 0), Vector3(516, 1016, 0), Vector3(546, 1019, 0), Vector3(576, 1019, 0), Vector3(605, 1019, 0), Vector3(635, 1019, 0), Vector3(665, 1019, 0), Vector3(695, 1019, 0), Vector3(725, 1019, 0), Vector3(754, 1019, 0), Vector3(784, 1019, 0), Vector3(814, 1019, 0), Vector3(844, 1021, 0), Vector3(874, 1023, 0), Vector3(903, 1023, 0), Vector3(933, 1023, 0), Vector3(963, 1023, 0), Vector3(993, 1023, 0), Vector3(1011, 1004, 0), Vector3(1015, 973, 0), Vector3(1018, 942, 0), Vector3(1021, 910, 0), Vector3(1022, 879, 0), Vector3(1023, 848, 0), Vector3(1023, 817, 0), Vector3(1023, 786, 0), Vector3(1023, 754, 0), Vector3(1023, 723, 0), Vector3(1021, 692, 0), Vector3(1018, 661, 0), Vector3(1015, 630, 0), Vector3(1013, 599, 0), Vector3(1007, 568, 0), Vector3(1002, 537, 0), Vector3(989, 512, 0), Vector3(959, 511, 0), Vector3(929, 511, 0), Vector3(899, 511, 0), Vector3(870, 511, 0), Vector3(840, 511, 0), Vector3(810, 511, 0), Vector3(780, 511, 0), Vector3(750, 511, 0), Vector3(720, 511, 0), Vector3(691, 511, 0), Vector3(661, 511, 0), Vector3(631, 511, 0), Vector3(601, 511, 0), Vector3(571, 511, 0), Vector3(542, 512, 0)] 10 | LUT = { 11 | Vector2(0, 0): -1, 12 | Vector2(0, 1): -1, 13 | Vector2(0, 2): -1, 14 | Vector2(0, 3): -1, 15 | Vector2(0, 4): -1, 16 | Vector2(0, 5): -1, 17 | Vector2(0, 6): -1, 18 | Vector2(0, 7): -1, 19 | Vector2(0, 8): -1, 20 | Vector2(0, 9): -1, 21 | Vector2(0, 10): -1, 22 | Vector2(0, 11): -1, 23 | Vector2(0, 12): -1, 24 | Vector2(0, 13): -1, 25 | Vector2(0, 14): -1, 26 | Vector2(0, 15): -1, 27 | Vector2(0, 16): -1, 28 | Vector2(0, 17): -1, 29 | Vector2(0, 18): -1, 30 | Vector2(0, 19): -1, 31 | Vector2(0, 20): -1, 32 | Vector2(0, 21): -1, 33 | Vector2(0, 22): -1, 34 | Vector2(0, 23): -1, 35 | Vector2(0, 24): -1, 36 | Vector2(0, 25): -1, 37 | Vector2(0, 26): -1, 38 | Vector2(0, 27): -1, 39 | Vector2(0, 28): -1, 40 | Vector2(0, 29): -1, 41 | Vector2(0, 30): -1, 42 | Vector2(0, 31): -1, 43 | Vector2(0, 32): -1, 44 | Vector2(0, 33): -1, 45 | Vector2(0, 34): -1, 46 | Vector2(0, 35): -1, 47 | Vector2(0, 36): -1, 48 | Vector2(0, 37): -1, 49 | Vector2(0, 38): -1, 50 | Vector2(0, 39): -1, 51 | Vector2(0, 40): -1, 52 | Vector2(0, 41): -1, 53 | Vector2(0, 42): -1, 54 | Vector2(0, 43): -1, 55 | Vector2(0, 44): -1, 56 | Vector2(0, 45): -1, 57 | Vector2(0, 46): -1, 58 | Vector2(0, 47): -1, 59 | Vector2(0, 48): -1, 60 | Vector2(0, 49): -1, 61 | Vector2(0, 50): -1, 62 | Vector2(0, 51): -1, 63 | Vector2(0, 52): -1, 64 | Vector2(0, 53): -1, 65 | Vector2(0, 54): -1, 66 | Vector2(0, 55): -1, 67 | Vector2(0, 56): -1, 68 | Vector2(0, 57): -1, 69 | Vector2(0, 58): -1, 70 | Vector2(0, 59): -1, 71 | Vector2(0, 60): -1, 72 | Vector2(0, 61): -1, 73 | Vector2(0, 62): -1, 74 | Vector2(0, 63): -1, 75 | Vector2(1, 0): -1, 76 | Vector2(1, 1): -1, 77 | Vector2(1, 2): -1, 78 | Vector2(1, 3): -1, 79 | Vector2(1, 4): -1, 80 | Vector2(1, 5): -1, 81 | Vector2(1, 6): -1, 82 | Vector2(1, 7): -1, 83 | Vector2(1, 8): -1, 84 | Vector2(1, 9): -1, 85 | Vector2(1, 10): -1, 86 | Vector2(1, 11): -1, 87 | Vector2(1, 12): -1, 88 | Vector2(1, 13): -1, 89 | Vector2(1, 14): -1, 90 | Vector2(1, 15): -1, 91 | Vector2(1, 16): -1, 92 | Vector2(1, 17): -1, 93 | Vector2(1, 18): -1, 94 | Vector2(1, 19): -1, 95 | Vector2(1, 20): -1, 96 | Vector2(1, 21): -1, 97 | Vector2(1, 22): -1, 98 | Vector2(1, 23): -1, 99 | Vector2(1, 24): -1, 100 | Vector2(1, 25): -1, 101 | Vector2(1, 26): -1, 102 | Vector2(1, 27): -1, 103 | Vector2(1, 28): -1, 104 | Vector2(1, 29): -1, 105 | Vector2(1, 30): -1, 106 | Vector2(1, 31): -1, 107 | Vector2(1, 32): -1, 108 | Vector2(1, 33): -1, 109 | Vector2(1, 34): -1, 110 | Vector2(1, 35): -1, 111 | Vector2(1, 36): -1, 112 | Vector2(1, 37): -1, 113 | Vector2(1, 38): -1, 114 | Vector2(1, 39): -1, 115 | Vector2(1, 40): -1, 116 | Vector2(1, 41): -1, 117 | Vector2(1, 42): -1, 118 | Vector2(1, 43): -1, 119 | Vector2(1, 44): -1, 120 | Vector2(1, 45): -1, 121 | Vector2(1, 46): -1, 122 | Vector2(1, 47): -1, 123 | Vector2(1, 48): -1, 124 | Vector2(1, 49): -1, 125 | Vector2(1, 50): -1, 126 | Vector2(1, 51): -1, 127 | Vector2(1, 52): -1, 128 | Vector2(1, 53): -1, 129 | Vector2(1, 54): -1, 130 | Vector2(1, 55): -1, 131 | Vector2(1, 56): -1, 132 | Vector2(1, 57): -1, 133 | Vector2(1, 58): -1, 134 | Vector2(1, 59): -1, 135 | Vector2(1, 60): -1, 136 | Vector2(1, 61): -1, 137 | Vector2(1, 62): -1, 138 | Vector2(1, 63): -1, 139 | Vector2(2, 0): -1, 140 | Vector2(2, 1): -1, 141 | Vector2(2, 2): -1, 142 | Vector2(2, 3): -1, 143 | Vector2(2, 4): -1, 144 | Vector2(2, 5): -1, 145 | Vector2(2, 6): -1, 146 | Vector2(2, 7): -1, 147 | Vector2(2, 8): -1, 148 | Vector2(2, 9): -1, 149 | Vector2(2, 10): -1, 150 | Vector2(2, 11): -1, 151 | Vector2(2, 12): -1, 152 | Vector2(2, 13): -1, 153 | Vector2(2, 14): -1, 154 | Vector2(2, 15): -1, 155 | Vector2(2, 16): -1, 156 | Vector2(2, 17): -1, 157 | Vector2(2, 18): -1, 158 | Vector2(2, 19): -1, 159 | Vector2(2, 20): -1, 160 | Vector2(2, 21): -1, 161 | Vector2(2, 22): -1, 162 | Vector2(2, 23): -1, 163 | Vector2(2, 24): -1, 164 | Vector2(2, 25): -1, 165 | Vector2(2, 26): -1, 166 | Vector2(2, 27): -1, 167 | Vector2(2, 28): -1, 168 | Vector2(2, 29): -1, 169 | Vector2(2, 30): -1, 170 | Vector2(2, 31): -1, 171 | Vector2(2, 32): -1, 172 | Vector2(2, 33): -1, 173 | Vector2(2, 34): -1, 174 | Vector2(2, 35): -1, 175 | Vector2(2, 36): -1, 176 | Vector2(2, 37): -1, 177 | Vector2(2, 38): -1, 178 | Vector2(2, 39): -1, 179 | Vector2(2, 40): -1, 180 | Vector2(2, 41): -1, 181 | Vector2(2, 42): -1, 182 | Vector2(2, 43): -1, 183 | Vector2(2, 44): -1, 184 | Vector2(2, 45): -1, 185 | Vector2(2, 46): -1, 186 | Vector2(2, 47): -1, 187 | Vector2(2, 48): -1, 188 | Vector2(2, 49): -1, 189 | Vector2(2, 50): -1, 190 | Vector2(2, 51): -1, 191 | Vector2(2, 52): -1, 192 | Vector2(2, 53): -1, 193 | Vector2(2, 54): -1, 194 | Vector2(2, 55): -1, 195 | Vector2(2, 56): -1, 196 | Vector2(2, 57): -1, 197 | Vector2(2, 58): -1, 198 | Vector2(2, 59): -1, 199 | Vector2(2, 60): -1, 200 | Vector2(2, 61): -1, 201 | Vector2(2, 62): -1, 202 | Vector2(2, 63): -1, 203 | Vector2(3, 0): -1, 204 | Vector2(3, 1): -1, 205 | Vector2(3, 2): -1, 206 | Vector2(3, 3): -1, 207 | Vector2(3, 4): -1, 208 | Vector2(3, 5): -1, 209 | Vector2(3, 6): -1, 210 | Vector2(3, 7): -1, 211 | Vector2(3, 8): -1, 212 | Vector2(3, 9): -1, 213 | Vector2(3, 10): -1, 214 | Vector2(3, 11): -1, 215 | Vector2(3, 12): -1, 216 | Vector2(3, 13): -1, 217 | Vector2(3, 14): -1, 218 | Vector2(3, 15): -1, 219 | Vector2(3, 16): -1, 220 | Vector2(3, 17): -1, 221 | Vector2(3, 18): -1, 222 | Vector2(3, 19): -1, 223 | Vector2(3, 20): -1, 224 | Vector2(3, 21): -1, 225 | Vector2(3, 22): -1, 226 | Vector2(3, 23): -1, 227 | Vector2(3, 24): -1, 228 | Vector2(3, 25): -1, 229 | Vector2(3, 26): -1, 230 | Vector2(3, 27): -1, 231 | Vector2(3, 28): -1, 232 | Vector2(3, 29): -1, 233 | Vector2(3, 30): -1, 234 | Vector2(3, 31): -1, 235 | Vector2(3, 32): -1, 236 | Vector2(3, 33): -1, 237 | Vector2(3, 34): -1, 238 | Vector2(3, 35): -1, 239 | Vector2(3, 36): -1, 240 | Vector2(3, 37): -1, 241 | Vector2(3, 38): -1, 242 | Vector2(3, 39): -1, 243 | Vector2(3, 40): -1, 244 | Vector2(3, 41): -1, 245 | Vector2(3, 42): -1, 246 | Vector2(3, 43): -1, 247 | Vector2(3, 44): -1, 248 | Vector2(3, 45): -1, 249 | Vector2(3, 46): -1, 250 | Vector2(3, 47): -1, 251 | Vector2(3, 48): -1, 252 | Vector2(3, 49): -1, 253 | Vector2(3, 50): -1, 254 | Vector2(3, 51): -1, 255 | Vector2(3, 52): -1, 256 | Vector2(3, 53): -1, 257 | Vector2(3, 54): -1, 258 | Vector2(3, 55): -1, 259 | Vector2(3, 56): -1, 260 | Vector2(3, 57): -1, 261 | Vector2(3, 58): -1, 262 | Vector2(3, 59): -1, 263 | Vector2(3, 60): -1, 264 | Vector2(3, 61): -1, 265 | Vector2(3, 62): -1, 266 | Vector2(3, 63): -1, 267 | Vector2(4, 0): -1, 268 | Vector2(4, 1): -1, 269 | Vector2(4, 2): -1, 270 | Vector2(4, 3): -1, 271 | Vector2(4, 4): -1, 272 | Vector2(4, 5): -1, 273 | Vector2(4, 6): -1, 274 | Vector2(4, 7): -1, 275 | Vector2(4, 8): -1, 276 | Vector2(4, 9): -1, 277 | Vector2(4, 10): -1, 278 | Vector2(4, 11): -1, 279 | Vector2(4, 12): -1, 280 | Vector2(4, 13): -1, 281 | Vector2(4, 14): -1, 282 | Vector2(4, 15): -1, 283 | Vector2(4, 16): -1, 284 | Vector2(4, 17): -1, 285 | Vector2(4, 18): -1, 286 | Vector2(4, 19): -1, 287 | Vector2(4, 20): -1, 288 | Vector2(4, 21): -1, 289 | Vector2(4, 22): -1, 290 | Vector2(4, 23): -1, 291 | Vector2(4, 24): -1, 292 | Vector2(4, 25): -1, 293 | Vector2(4, 26): -1, 294 | Vector2(4, 27): -1, 295 | Vector2(4, 28): -1, 296 | Vector2(4, 29): -1, 297 | Vector2(4, 30): -1, 298 | Vector2(4, 31): -1, 299 | Vector2(4, 32): -1, 300 | Vector2(4, 33): -1, 301 | Vector2(4, 34): -1, 302 | Vector2(4, 35): -1, 303 | Vector2(4, 36): -1, 304 | Vector2(4, 37): -1, 305 | Vector2(4, 38): -1, 306 | Vector2(4, 39): -1, 307 | Vector2(4, 40): -1, 308 | Vector2(4, 41): -1, 309 | Vector2(4, 42): -1, 310 | Vector2(4, 43): -1, 311 | Vector2(4, 44): -1, 312 | Vector2(4, 45): -1, 313 | Vector2(4, 46): -1, 314 | Vector2(4, 47): -1, 315 | Vector2(4, 48): -1, 316 | Vector2(4, 49): -1, 317 | Vector2(4, 50): -1, 318 | Vector2(4, 51): -1, 319 | Vector2(4, 52): -1, 320 | Vector2(4, 53): -1, 321 | Vector2(4, 54): -1, 322 | Vector2(4, 55): -1, 323 | Vector2(4, 56): -1, 324 | Vector2(4, 57): -1, 325 | Vector2(4, 58): -1, 326 | Vector2(4, 59): -1, 327 | Vector2(4, 60): -1, 328 | Vector2(4, 61): -1, 329 | Vector2(4, 62): -1, 330 | Vector2(4, 63): -1, 331 | Vector2(5, 0): -1, 332 | Vector2(5, 1): -1, 333 | Vector2(5, 2): -1, 334 | Vector2(5, 3): -1, 335 | Vector2(5, 4): -1, 336 | Vector2(5, 5): -1, 337 | Vector2(5, 6): -1, 338 | Vector2(5, 7): -1, 339 | Vector2(5, 8): -1, 340 | Vector2(5, 9): -1, 341 | Vector2(5, 10): -1, 342 | Vector2(5, 11): -1, 343 | Vector2(5, 12): -1, 344 | Vector2(5, 13): -1, 345 | Vector2(5, 14): -1, 346 | Vector2(5, 15): -1, 347 | Vector2(5, 16): -1, 348 | Vector2(5, 17): -1, 349 | Vector2(5, 18): -1, 350 | Vector2(5, 19): -1, 351 | Vector2(5, 20): -1, 352 | Vector2(5, 21): -1, 353 | Vector2(5, 22): -1, 354 | Vector2(5, 23): -1, 355 | Vector2(5, 24): -1, 356 | Vector2(5, 25): -1, 357 | Vector2(5, 26): -1, 358 | Vector2(5, 27): -1, 359 | Vector2(5, 28): -1, 360 | Vector2(5, 29): -1, 361 | Vector2(5, 30): -1, 362 | Vector2(5, 31): -1, 363 | Vector2(5, 32): -1, 364 | Vector2(5, 33): -1, 365 | Vector2(5, 34): -1, 366 | Vector2(5, 35): -1, 367 | Vector2(5, 36): -1, 368 | Vector2(5, 37): -1, 369 | Vector2(5, 38): -1, 370 | Vector2(5, 39): -1, 371 | Vector2(5, 40): -1, 372 | Vector2(5, 41): -1, 373 | Vector2(5, 42): -1, 374 | Vector2(5, 43): -1, 375 | Vector2(5, 44): -1, 376 | Vector2(5, 45): -1, 377 | Vector2(5, 46): -1, 378 | Vector2(5, 47): -1, 379 | Vector2(5, 48): -1, 380 | Vector2(5, 49): -1, 381 | Vector2(5, 50): -1, 382 | Vector2(5, 51): -1, 383 | Vector2(5, 52): -1, 384 | Vector2(5, 53): -1, 385 | Vector2(5, 54): -1, 386 | Vector2(5, 55): -1, 387 | Vector2(5, 56): -1, 388 | Vector2(5, 57): -1, 389 | Vector2(5, 58): -1, 390 | Vector2(5, 59): -1, 391 | Vector2(5, 60): -1, 392 | Vector2(5, 61): -1, 393 | Vector2(5, 62): -1, 394 | Vector2(5, 63): -1, 395 | Vector2(6, 0): -1, 396 | Vector2(6, 1): -1, 397 | Vector2(6, 2): -1, 398 | Vector2(6, 3): -1, 399 | Vector2(6, 4): -1, 400 | Vector2(6, 5): -1, 401 | Vector2(6, 6): -1, 402 | Vector2(6, 7): -1, 403 | Vector2(6, 8): -1, 404 | Vector2(6, 9): -1, 405 | Vector2(6, 10): -1, 406 | Vector2(6, 11): -1, 407 | Vector2(6, 12): -1, 408 | Vector2(6, 13): -1, 409 | Vector2(6, 14): -1, 410 | Vector2(6, 15): -1, 411 | Vector2(6, 16): -1, 412 | Vector2(6, 17): -1, 413 | Vector2(6, 18): -1, 414 | Vector2(6, 19): -1, 415 | Vector2(6, 20): -1, 416 | Vector2(6, 21): -1, 417 | Vector2(6, 22): -1, 418 | Vector2(6, 23): -1, 419 | Vector2(6, 24): -1, 420 | Vector2(6, 25): -1, 421 | Vector2(6, 26): -1, 422 | Vector2(6, 27): -1, 423 | Vector2(6, 28): -1, 424 | Vector2(6, 29): -1, 425 | Vector2(6, 30): -1, 426 | Vector2(6, 31): -1, 427 | Vector2(6, 32): -1, 428 | Vector2(6, 33): -1, 429 | Vector2(6, 34): -1, 430 | Vector2(6, 35): -1, 431 | Vector2(6, 36): -1, 432 | Vector2(6, 37): -1, 433 | Vector2(6, 38): -1, 434 | Vector2(6, 39): -1, 435 | Vector2(6, 40): -1, 436 | Vector2(6, 41): -1, 437 | Vector2(6, 42): -1, 438 | Vector2(6, 43): -1, 439 | Vector2(6, 44): -1, 440 | Vector2(6, 45): -1, 441 | Vector2(6, 46): -1, 442 | Vector2(6, 47): -1, 443 | Vector2(6, 48): -1, 444 | Vector2(6, 49): -1, 445 | Vector2(6, 50): -1, 446 | Vector2(6, 51): -1, 447 | Vector2(6, 52): -1, 448 | Vector2(6, 53): -1, 449 | Vector2(6, 54): -1, 450 | Vector2(6, 55): -1, 451 | Vector2(6, 56): -1, 452 | Vector2(6, 57): -1, 453 | Vector2(6, 58): -1, 454 | Vector2(6, 59): -1, 455 | Vector2(6, 60): -1, 456 | Vector2(6, 61): -1, 457 | Vector2(6, 62): -1, 458 | Vector2(6, 63): -1, 459 | Vector2(7, 0): -1, 460 | Vector2(7, 1): -1, 461 | Vector2(7, 2): -1, 462 | Vector2(7, 3): -1, 463 | Vector2(7, 4): -1, 464 | Vector2(7, 5): -1, 465 | Vector2(7, 6): -1, 466 | Vector2(7, 7): -1, 467 | Vector2(7, 8): -1, 468 | Vector2(7, 9): -1, 469 | Vector2(7, 10): -1, 470 | Vector2(7, 11): -1, 471 | Vector2(7, 12): -1, 472 | Vector2(7, 13): -1, 473 | Vector2(7, 14): -1, 474 | Vector2(7, 15): -1, 475 | Vector2(7, 16): -1, 476 | Vector2(7, 17): -1, 477 | Vector2(7, 18): -1, 478 | Vector2(7, 19): -1, 479 | Vector2(7, 20): -1, 480 | Vector2(7, 21): -1, 481 | Vector2(7, 22): -1, 482 | Vector2(7, 23): -1, 483 | Vector2(7, 24): -1, 484 | Vector2(7, 25): -1, 485 | Vector2(7, 26): -1, 486 | Vector2(7, 27): -1, 487 | Vector2(7, 28): -1, 488 | Vector2(7, 29): -1, 489 | Vector2(7, 30): -1, 490 | Vector2(7, 31): -1, 491 | Vector2(7, 32): -1, 492 | Vector2(7, 33): -1, 493 | Vector2(7, 34): -1, 494 | Vector2(7, 35): -1, 495 | Vector2(7, 36): -1, 496 | Vector2(7, 37): -1, 497 | Vector2(7, 38): -1, 498 | Vector2(7, 39): -1, 499 | Vector2(7, 40): -1, 500 | Vector2(7, 41): -1, 501 | Vector2(7, 42): -1, 502 | Vector2(7, 43): -1, 503 | Vector2(7, 44): -1, 504 | Vector2(7, 45): -1, 505 | Vector2(7, 46): -1, 506 | Vector2(7, 47): -1, 507 | Vector2(7, 48): -1, 508 | Vector2(7, 49): -1, 509 | Vector2(7, 50): -1, 510 | Vector2(7, 51): -1, 511 | Vector2(7, 52): -1, 512 | Vector2(7, 53): -1, 513 | Vector2(7, 54): -1, 514 | Vector2(7, 55): -1, 515 | Vector2(7, 56): -1, 516 | Vector2(7, 57): -1, 517 | Vector2(7, 58): -1, 518 | Vector2(7, 59): -1, 519 | Vector2(7, 60): -1, 520 | Vector2(7, 61): -1, 521 | Vector2(7, 62): -1, 522 | Vector2(7, 63): -1, 523 | Vector2(8, 0): -1, 524 | Vector2(8, 1): -1, 525 | Vector2(8, 2): -1, 526 | Vector2(8, 3): -1, 527 | Vector2(8, 4): -1, 528 | Vector2(8, 5): -1, 529 | Vector2(8, 6): -1, 530 | Vector2(8, 7): -1, 531 | Vector2(8, 8): -1, 532 | Vector2(8, 9): -1, 533 | Vector2(8, 10): -1, 534 | Vector2(8, 11): -1, 535 | Vector2(8, 12): -1, 536 | Vector2(8, 13): -1, 537 | Vector2(8, 14): -1, 538 | Vector2(8, 15): -1, 539 | Vector2(8, 16): -1, 540 | Vector2(8, 17): -1, 541 | Vector2(8, 18): -1, 542 | Vector2(8, 19): -1, 543 | Vector2(8, 20): -1, 544 | Vector2(8, 21): -1, 545 | Vector2(8, 22): -1, 546 | Vector2(8, 23): -1, 547 | Vector2(8, 24): -1, 548 | Vector2(8, 25): -1, 549 | Vector2(8, 26): -1, 550 | Vector2(8, 27): -1, 551 | Vector2(8, 28): -1, 552 | Vector2(8, 29): -1, 553 | Vector2(8, 30): -1, 554 | Vector2(8, 31): -1, 555 | Vector2(8, 32): -1, 556 | Vector2(8, 33): -1, 557 | Vector2(8, 34): -1, 558 | Vector2(8, 35): -1, 559 | Vector2(8, 36): -1, 560 | Vector2(8, 37): -1, 561 | Vector2(8, 38): -1, 562 | Vector2(8, 39): -1, 563 | Vector2(8, 40): -1, 564 | Vector2(8, 41): -1, 565 | Vector2(8, 42): -1, 566 | Vector2(8, 43): -1, 567 | Vector2(8, 44): -1, 568 | Vector2(8, 45): -1, 569 | Vector2(8, 46): -1, 570 | Vector2(8, 47): -1, 571 | Vector2(8, 48): -1, 572 | Vector2(8, 49): -1, 573 | Vector2(8, 50): -1, 574 | Vector2(8, 51): -1, 575 | Vector2(8, 52): -1, 576 | Vector2(8, 53): -1, 577 | Vector2(8, 54): -1, 578 | Vector2(8, 55): -1, 579 | Vector2(8, 56): -1, 580 | Vector2(8, 57): -1, 581 | Vector2(8, 58): -1, 582 | Vector2(8, 59): -1, 583 | Vector2(8, 60): -1, 584 | Vector2(8, 61): -1, 585 | Vector2(8, 62): -1, 586 | Vector2(8, 63): -1, 587 | Vector2(9, 0): -1, 588 | Vector2(9, 1): -1, 589 | Vector2(9, 2): -1, 590 | Vector2(9, 3): -1, 591 | Vector2(9, 4): -1, 592 | Vector2(9, 5): -1, 593 | Vector2(9, 6): -1, 594 | Vector2(9, 7): -1, 595 | Vector2(9, 8): -1, 596 | Vector2(9, 9): -1, 597 | Vector2(9, 10): -1, 598 | Vector2(9, 11): -1, 599 | Vector2(9, 12): -1, 600 | Vector2(9, 13): -1, 601 | Vector2(9, 14): -1, 602 | Vector2(9, 15): -1, 603 | Vector2(9, 16): -1, 604 | Vector2(9, 17): -1, 605 | Vector2(9, 18): -1, 606 | Vector2(9, 19): -1, 607 | Vector2(9, 20): -1, 608 | Vector2(9, 21): -1, 609 | Vector2(9, 22): -1, 610 | Vector2(9, 23): -1, 611 | Vector2(9, 24): -1, 612 | Vector2(9, 25): -1, 613 | Vector2(9, 26): -1, 614 | Vector2(9, 27): -1, 615 | Vector2(9, 28): -1, 616 | Vector2(9, 29): -1, 617 | Vector2(9, 30): -1, 618 | Vector2(9, 31): -1, 619 | Vector2(9, 32): -1, 620 | Vector2(9, 33): -1, 621 | Vector2(9, 34): -1, 622 | Vector2(9, 35): -1, 623 | Vector2(9, 36): -1, 624 | Vector2(9, 37): -1, 625 | Vector2(9, 38): -1, 626 | Vector2(9, 39): -1, 627 | Vector2(9, 40): -1, 628 | Vector2(9, 41): -1, 629 | Vector2(9, 42): -1, 630 | Vector2(9, 43): -1, 631 | Vector2(9, 44): -1, 632 | Vector2(9, 45): -1, 633 | Vector2(9, 46): -1, 634 | Vector2(9, 47): -1, 635 | Vector2(9, 48): -1, 636 | Vector2(9, 49): -1, 637 | Vector2(9, 50): -1, 638 | Vector2(9, 51): -1, 639 | Vector2(9, 52): -1, 640 | Vector2(9, 53): -1, 641 | Vector2(9, 54): -1, 642 | Vector2(9, 55): -1, 643 | Vector2(9, 56): -1, 644 | Vector2(9, 57): -1, 645 | Vector2(9, 58): -1, 646 | Vector2(9, 59): -1, 647 | Vector2(9, 60): -1, 648 | Vector2(9, 61): -1, 649 | Vector2(9, 62): -1, 650 | Vector2(9, 63): -1, 651 | Vector2(10, 0): -1, 652 | Vector2(10, 1): -1, 653 | Vector2(10, 2): -1, 654 | Vector2(10, 3): -1, 655 | Vector2(10, 4): -1, 656 | Vector2(10, 5): -1, 657 | Vector2(10, 6): -1, 658 | Vector2(10, 7): -1, 659 | Vector2(10, 8): -1, 660 | Vector2(10, 9): -1, 661 | Vector2(10, 10): -1, 662 | Vector2(10, 11): -1, 663 | Vector2(10, 12): -1, 664 | Vector2(10, 13): -1, 665 | Vector2(10, 14): -1, 666 | Vector2(10, 15): -1, 667 | Vector2(10, 16): -1, 668 | Vector2(10, 17): -1, 669 | Vector2(10, 18): -1, 670 | Vector2(10, 19): -1, 671 | Vector2(10, 20): -1, 672 | Vector2(10, 21): -1, 673 | Vector2(10, 22): -1, 674 | Vector2(10, 23): -1, 675 | Vector2(10, 24): -1, 676 | Vector2(10, 25): -1, 677 | Vector2(10, 26): -1, 678 | Vector2(10, 27): -1, 679 | Vector2(10, 28): -1, 680 | Vector2(10, 29): -1, 681 | Vector2(10, 30): -1, 682 | Vector2(10, 31): -1, 683 | Vector2(10, 32): -1, 684 | Vector2(10, 33): -1, 685 | Vector2(10, 34): -1, 686 | Vector2(10, 35): -1, 687 | Vector2(10, 36): -1, 688 | Vector2(10, 37): -1, 689 | Vector2(10, 38): -1, 690 | Vector2(10, 39): -1, 691 | Vector2(10, 40): -1, 692 | Vector2(10, 41): -1, 693 | Vector2(10, 42): -1, 694 | Vector2(10, 43): -1, 695 | Vector2(10, 44): -1, 696 | Vector2(10, 45): -1, 697 | Vector2(10, 46): -1, 698 | Vector2(10, 47): -1, 699 | Vector2(10, 48): -1, 700 | Vector2(10, 49): -1, 701 | Vector2(10, 50): -1, 702 | Vector2(10, 51): -1, 703 | Vector2(10, 52): -1, 704 | Vector2(10, 53): -1, 705 | Vector2(10, 54): -1, 706 | Vector2(10, 55): -1, 707 | Vector2(10, 56): -1, 708 | Vector2(10, 57): -1, 709 | Vector2(10, 58): -1, 710 | Vector2(10, 59): -1, 711 | Vector2(10, 60): -1, 712 | Vector2(10, 61): -1, 713 | Vector2(10, 62): -1, 714 | Vector2(10, 63): -1, 715 | Vector2(11, 0): -1, 716 | Vector2(11, 1): -1, 717 | Vector2(11, 2): -1, 718 | Vector2(11, 3): -1, 719 | Vector2(11, 4): -1, 720 | Vector2(11, 5): -1, 721 | Vector2(11, 6): -1, 722 | Vector2(11, 7): -1, 723 | Vector2(11, 8): -1, 724 | Vector2(11, 9): -1, 725 | Vector2(11, 10): -1, 726 | Vector2(11, 11): -1, 727 | Vector2(11, 12): -1, 728 | Vector2(11, 13): -1, 729 | Vector2(11, 14): -1, 730 | Vector2(11, 15): -1, 731 | Vector2(11, 16): -1, 732 | Vector2(11, 17): -1, 733 | Vector2(11, 18): -1, 734 | Vector2(11, 19): -1, 735 | Vector2(11, 20): -1, 736 | Vector2(11, 21): -1, 737 | Vector2(11, 22): -1, 738 | Vector2(11, 23): -1, 739 | Vector2(11, 24): -1, 740 | Vector2(11, 25): -1, 741 | Vector2(11, 26): -1, 742 | Vector2(11, 27): -1, 743 | Vector2(11, 28): -1, 744 | Vector2(11, 29): -1, 745 | Vector2(11, 30): -1, 746 | Vector2(11, 31): -1, 747 | Vector2(11, 32): -1, 748 | Vector2(11, 33): -1, 749 | Vector2(11, 34): -1, 750 | Vector2(11, 35): -1, 751 | Vector2(11, 36): -1, 752 | Vector2(11, 37): -1, 753 | Vector2(11, 38): -1, 754 | Vector2(11, 39): -1, 755 | Vector2(11, 40): -1, 756 | Vector2(11, 41): -1, 757 | Vector2(11, 42): -1, 758 | Vector2(11, 43): -1, 759 | Vector2(11, 44): -1, 760 | Vector2(11, 45): -1, 761 | Vector2(11, 46): -1, 762 | Vector2(11, 47): -1, 763 | Vector2(11, 48): -1, 764 | Vector2(11, 49): -1, 765 | Vector2(11, 50): -1, 766 | Vector2(11, 51): -1, 767 | Vector2(11, 52): -1, 768 | Vector2(11, 53): -1, 769 | Vector2(11, 54): -1, 770 | Vector2(11, 55): -1, 771 | Vector2(11, 56): -1, 772 | Vector2(11, 57): -1, 773 | Vector2(11, 58): -1, 774 | Vector2(11, 59): -1, 775 | Vector2(11, 60): -1, 776 | Vector2(11, 61): -1, 777 | Vector2(11, 62): -1, 778 | Vector2(11, 63): -1, 779 | Vector2(12, 0): -1, 780 | Vector2(12, 1): -1, 781 | Vector2(12, 2): -1, 782 | Vector2(12, 3): -1, 783 | Vector2(12, 4): -1, 784 | Vector2(12, 5): -1, 785 | Vector2(12, 6): -1, 786 | Vector2(12, 7): -1, 787 | Vector2(12, 8): -1, 788 | Vector2(12, 9): -1, 789 | Vector2(12, 10): -1, 790 | Vector2(12, 11): -1, 791 | Vector2(12, 12): -1, 792 | Vector2(12, 13): -1, 793 | Vector2(12, 14): -1, 794 | Vector2(12, 15): -1, 795 | Vector2(12, 16): -1, 796 | Vector2(12, 17): -1, 797 | Vector2(12, 18): -1, 798 | Vector2(12, 19): -1, 799 | Vector2(12, 20): -1, 800 | Vector2(12, 21): -1, 801 | Vector2(12, 22): -1, 802 | Vector2(12, 23): -1, 803 | Vector2(12, 24): -1, 804 | Vector2(12, 25): -1, 805 | Vector2(12, 26): -1, 806 | Vector2(12, 27): -1, 807 | Vector2(12, 28): -1, 808 | Vector2(12, 29): -1, 809 | Vector2(12, 30): -1, 810 | Vector2(12, 31): -1, 811 | Vector2(12, 32): -1, 812 | Vector2(12, 33): -1, 813 | Vector2(12, 34): -1, 814 | Vector2(12, 35): -1, 815 | Vector2(12, 36): -1, 816 | Vector2(12, 37): -1, 817 | Vector2(12, 38): -1, 818 | Vector2(12, 39): -1, 819 | Vector2(12, 40): -1, 820 | Vector2(12, 41): -1, 821 | Vector2(12, 42): -1, 822 | Vector2(12, 43): -1, 823 | Vector2(12, 44): -1, 824 | Vector2(12, 45): -1, 825 | Vector2(12, 46): -1, 826 | Vector2(12, 47): -1, 827 | Vector2(12, 48): -1, 828 | Vector2(12, 49): -1, 829 | Vector2(12, 50): -1, 830 | Vector2(12, 51): -1, 831 | Vector2(12, 52): -1, 832 | Vector2(12, 53): -1, 833 | Vector2(12, 54): -1, 834 | Vector2(12, 55): -1, 835 | Vector2(12, 56): -1, 836 | Vector2(12, 57): -1, 837 | Vector2(12, 58): -1, 838 | Vector2(12, 59): -1, 839 | Vector2(12, 60): -1, 840 | Vector2(12, 61): -1, 841 | Vector2(12, 62): -1, 842 | Vector2(12, 63): -1, 843 | Vector2(13, 0): -1, 844 | Vector2(13, 1): -1, 845 | Vector2(13, 2): -1, 846 | Vector2(13, 3): -1, 847 | Vector2(13, 4): -1, 848 | Vector2(13, 5): -1, 849 | Vector2(13, 6): -1, 850 | Vector2(13, 7): -1, 851 | Vector2(13, 8): -1, 852 | Vector2(13, 9): -1, 853 | Vector2(13, 10): -1, 854 | Vector2(13, 11): -1, 855 | Vector2(13, 12): -1, 856 | Vector2(13, 13): -1, 857 | Vector2(13, 14): -1, 858 | Vector2(13, 15): -1, 859 | Vector2(13, 16): -1, 860 | Vector2(13, 17): -1, 861 | Vector2(13, 18): -1, 862 | Vector2(13, 19): -1, 863 | Vector2(13, 20): -1, 864 | Vector2(13, 21): -1, 865 | Vector2(13, 22): -1, 866 | Vector2(13, 23): -1, 867 | Vector2(13, 24): -1, 868 | Vector2(13, 25): -1, 869 | Vector2(13, 26): -1, 870 | Vector2(13, 27): -1, 871 | Vector2(13, 28): -1, 872 | Vector2(13, 29): -1, 873 | Vector2(13, 30): -1, 874 | Vector2(13, 31): -1, 875 | Vector2(13, 32): -1, 876 | Vector2(13, 33): -1, 877 | Vector2(13, 34): -1, 878 | Vector2(13, 35): -1, 879 | Vector2(13, 36): -1, 880 | Vector2(13, 37): -1, 881 | Vector2(13, 38): -1, 882 | Vector2(13, 39): -1, 883 | Vector2(13, 40): -1, 884 | Vector2(13, 41): -1, 885 | Vector2(13, 42): -1, 886 | Vector2(13, 43): -1, 887 | Vector2(13, 44): -1, 888 | Vector2(13, 45): -1, 889 | Vector2(13, 46): -1, 890 | Vector2(13, 47): -1, 891 | Vector2(13, 48): -1, 892 | Vector2(13, 49): -1, 893 | Vector2(13, 50): -1, 894 | Vector2(13, 51): -1, 895 | Vector2(13, 52): -1, 896 | Vector2(13, 53): -1, 897 | Vector2(13, 54): -1, 898 | Vector2(13, 55): -1, 899 | Vector2(13, 56): -1, 900 | Vector2(13, 57): -1, 901 | Vector2(13, 58): -1, 902 | Vector2(13, 59): -1, 903 | Vector2(13, 60): -1, 904 | Vector2(13, 61): -1, 905 | Vector2(13, 62): -1, 906 | Vector2(13, 63): -1, 907 | Vector2(14, 0): -1, 908 | Vector2(14, 1): -1, 909 | Vector2(14, 2): -1, 910 | Vector2(14, 3): -1, 911 | Vector2(14, 4): -1, 912 | Vector2(14, 5): -1, 913 | Vector2(14, 6): -1, 914 | Vector2(14, 7): -1, 915 | Vector2(14, 8): -1, 916 | Vector2(14, 9): -1, 917 | Vector2(14, 10): -1, 918 | Vector2(14, 11): -1, 919 | Vector2(14, 12): -1, 920 | Vector2(14, 13): -1, 921 | Vector2(14, 14): -1, 922 | Vector2(14, 15): -1, 923 | Vector2(14, 16): -1, 924 | Vector2(14, 17): -1, 925 | Vector2(14, 18): -1, 926 | Vector2(14, 19): -1, 927 | Vector2(14, 20): -1, 928 | Vector2(14, 21): -1, 929 | Vector2(14, 22): -1, 930 | Vector2(14, 23): -1, 931 | Vector2(14, 24): -1, 932 | Vector2(14, 25): -1, 933 | Vector2(14, 26): -1, 934 | Vector2(14, 27): -1, 935 | Vector2(14, 28): -1, 936 | Vector2(14, 29): -1, 937 | Vector2(14, 30): -1, 938 | Vector2(14, 31): -1, 939 | Vector2(14, 32): -1, 940 | Vector2(14, 33): -1, 941 | Vector2(14, 34): -1, 942 | Vector2(14, 35): -1, 943 | Vector2(14, 36): -1, 944 | Vector2(14, 37): -1, 945 | Vector2(14, 38): -1, 946 | Vector2(14, 39): -1, 947 | Vector2(14, 40): -1, 948 | Vector2(14, 41): -1, 949 | Vector2(14, 42): -1, 950 | Vector2(14, 43): -1, 951 | Vector2(14, 44): -1, 952 | Vector2(14, 45): -1, 953 | Vector2(14, 46): -1, 954 | Vector2(14, 47): -1, 955 | Vector2(14, 48): -1, 956 | Vector2(14, 49): -1, 957 | Vector2(14, 50): -1, 958 | Vector2(14, 51): -1, 959 | Vector2(14, 52): -1, 960 | Vector2(14, 53): -1, 961 | Vector2(14, 54): -1, 962 | Vector2(14, 55): -1, 963 | Vector2(14, 56): -1, 964 | Vector2(14, 57): -1, 965 | Vector2(14, 58): -1, 966 | Vector2(14, 59): -1, 967 | Vector2(14, 60): -1, 968 | Vector2(14, 61): -1, 969 | Vector2(14, 62): -1, 970 | Vector2(14, 63): -1, 971 | Vector2(15, 0): -1, 972 | Vector2(15, 1): -1, 973 | Vector2(15, 2): -1, 974 | Vector2(15, 3): -1, 975 | Vector2(15, 4): -1, 976 | Vector2(15, 5): -1, 977 | Vector2(15, 6): -1, 978 | Vector2(15, 7): -1, 979 | Vector2(15, 8): -1, 980 | Vector2(15, 9): -1, 981 | Vector2(15, 10): -1, 982 | Vector2(15, 11): -1, 983 | Vector2(15, 12): -1, 984 | Vector2(15, 13): -1, 985 | Vector2(15, 14): -1, 986 | Vector2(15, 15): -1, 987 | Vector2(15, 16): -1, 988 | Vector2(15, 17): -1, 989 | Vector2(15, 18): -1, 990 | Vector2(15, 19): -1, 991 | Vector2(15, 20): -1, 992 | Vector2(15, 21): -1, 993 | Vector2(15, 22): -1, 994 | Vector2(15, 23): -1, 995 | Vector2(15, 24): -1, 996 | Vector2(15, 25): -1, 997 | Vector2(15, 26): -1, 998 | Vector2(15, 27): -1, 999 | Vector2(15, 28): -1, 1000 | Vector2(15, 29): -1, 1001 | Vector2(15, 30): -1, 1002 | Vector2(15, 31): -1, 1003 | Vector2(15, 32): -1, 1004 | Vector2(15, 33): -1, 1005 | Vector2(15, 34): -1, 1006 | Vector2(15, 35): -1, 1007 | Vector2(15, 36): -1, 1008 | Vector2(15, 37): -1, 1009 | Vector2(15, 38): -1, 1010 | Vector2(15, 39): -1, 1011 | Vector2(15, 40): -1, 1012 | Vector2(15, 41): -1, 1013 | Vector2(15, 42): -1, 1014 | Vector2(15, 43): -1, 1015 | Vector2(15, 44): -1, 1016 | Vector2(15, 45): -1, 1017 | Vector2(15, 46): -1, 1018 | Vector2(15, 47): -1, 1019 | Vector2(15, 48): -1, 1020 | Vector2(15, 49): -1, 1021 | Vector2(15, 50): -1, 1022 | Vector2(15, 51): -1, 1023 | Vector2(15, 52): -1, 1024 | Vector2(15, 53): -1, 1025 | Vector2(15, 54): -1, 1026 | Vector2(15, 55): -1, 1027 | Vector2(15, 56): -1, 1028 | Vector2(15, 57): -1, 1029 | Vector2(15, 58): -1, 1030 | Vector2(15, 59): -1, 1031 | Vector2(15, 60): -1, 1032 | Vector2(15, 61): -1, 1033 | Vector2(15, 62): -1, 1034 | Vector2(15, 63): -1, 1035 | Vector2(16, 0): -1, 1036 | Vector2(16, 1): -1, 1037 | Vector2(16, 2): -1, 1038 | Vector2(16, 3): -1, 1039 | Vector2(16, 4): -1, 1040 | Vector2(16, 5): -1, 1041 | Vector2(16, 6): -1, 1042 | Vector2(16, 7): -1, 1043 | Vector2(16, 8): -1, 1044 | Vector2(16, 9): -1, 1045 | Vector2(16, 10): -1, 1046 | Vector2(16, 11): -1, 1047 | Vector2(16, 12): -1, 1048 | Vector2(16, 13): -1, 1049 | Vector2(16, 14): -1, 1050 | Vector2(16, 15): -1, 1051 | Vector2(16, 16): -1, 1052 | Vector2(16, 17): -1, 1053 | Vector2(16, 18): -1, 1054 | Vector2(16, 19): -1, 1055 | Vector2(16, 20): -1, 1056 | Vector2(16, 21): -1, 1057 | Vector2(16, 22): -1, 1058 | Vector2(16, 23): -1, 1059 | Vector2(16, 24): -1, 1060 | Vector2(16, 25): -1, 1061 | Vector2(16, 26): -1, 1062 | Vector2(16, 27): -1, 1063 | Vector2(16, 28): -1, 1064 | Vector2(16, 29): -1, 1065 | Vector2(16, 30): -1, 1066 | Vector2(16, 31): -1, 1067 | Vector2(16, 32): -1, 1068 | Vector2(16, 33): -1, 1069 | Vector2(16, 34): -1, 1070 | Vector2(16, 35): -1, 1071 | Vector2(16, 36): -1, 1072 | Vector2(16, 37): -1, 1073 | Vector2(16, 38): -1, 1074 | Vector2(16, 39): -1, 1075 | Vector2(16, 40): -1, 1076 | Vector2(16, 41): -1, 1077 | Vector2(16, 42): -1, 1078 | Vector2(16, 43): -1, 1079 | Vector2(16, 44): -1, 1080 | Vector2(16, 45): -1, 1081 | Vector2(16, 46): -1, 1082 | Vector2(16, 47): -1, 1083 | Vector2(16, 48): -1, 1084 | Vector2(16, 49): -1, 1085 | Vector2(16, 50): -1, 1086 | Vector2(16, 51): -1, 1087 | Vector2(16, 52): -1, 1088 | Vector2(16, 53): -1, 1089 | Vector2(16, 54): -1, 1090 | Vector2(16, 55): -1, 1091 | Vector2(16, 56): -1, 1092 | Vector2(16, 57): -1, 1093 | Vector2(16, 58): -1, 1094 | Vector2(16, 59): -1, 1095 | Vector2(16, 60): -1, 1096 | Vector2(16, 61): -1, 1097 | Vector2(16, 62): -1, 1098 | Vector2(16, 63): -1, 1099 | Vector2(17, 0): -1, 1100 | Vector2(17, 1): -1, 1101 | Vector2(17, 2): -1, 1102 | Vector2(17, 3): -1, 1103 | Vector2(17, 4): -1, 1104 | Vector2(17, 5): -1, 1105 | Vector2(17, 6): -1, 1106 | Vector2(17, 7): -1, 1107 | Vector2(17, 8): -1, 1108 | Vector2(17, 9): -1, 1109 | Vector2(17, 10): -1, 1110 | Vector2(17, 11): -1, 1111 | Vector2(17, 12): -1, 1112 | Vector2(17, 13): -1, 1113 | Vector2(17, 14): -1, 1114 | Vector2(17, 15): -1, 1115 | Vector2(17, 16): -1, 1116 | Vector2(17, 17): -1, 1117 | Vector2(17, 18): -1, 1118 | Vector2(17, 19): -1, 1119 | Vector2(17, 20): -1, 1120 | Vector2(17, 21): -1, 1121 | Vector2(17, 22): -1, 1122 | Vector2(17, 23): -1, 1123 | Vector2(17, 24): -1, 1124 | Vector2(17, 25): -1, 1125 | Vector2(17, 26): -1, 1126 | Vector2(17, 27): -1, 1127 | Vector2(17, 28): -1, 1128 | Vector2(17, 29): -1, 1129 | Vector2(17, 30): -1, 1130 | Vector2(17, 31): -1, 1131 | Vector2(17, 32): -1, 1132 | Vector2(17, 33): -1, 1133 | Vector2(17, 34): -1, 1134 | Vector2(17, 35): -1, 1135 | Vector2(17, 36): -1, 1136 | Vector2(17, 37): -1, 1137 | Vector2(17, 38): -1, 1138 | Vector2(17, 39): -1, 1139 | Vector2(17, 40): -1, 1140 | Vector2(17, 41): -1, 1141 | Vector2(17, 42): -1, 1142 | Vector2(17, 43): -1, 1143 | Vector2(17, 44): -1, 1144 | Vector2(17, 45): -1, 1145 | Vector2(17, 46): -1, 1146 | Vector2(17, 47): -1, 1147 | Vector2(17, 48): -1, 1148 | Vector2(17, 49): -1, 1149 | Vector2(17, 50): -1, 1150 | Vector2(17, 51): -1, 1151 | Vector2(17, 52): -1, 1152 | Vector2(17, 53): -1, 1153 | Vector2(17, 54): -1, 1154 | Vector2(17, 55): -1, 1155 | Vector2(17, 56): -1, 1156 | Vector2(17, 57): -1, 1157 | Vector2(17, 58): -1, 1158 | Vector2(17, 59): -1, 1159 | Vector2(17, 60): -1, 1160 | Vector2(17, 61): -1, 1161 | Vector2(17, 62): -1, 1162 | Vector2(17, 63): -1, 1163 | Vector2(18, 0): -1, 1164 | Vector2(18, 1): -1, 1165 | Vector2(18, 2): -1, 1166 | Vector2(18, 3): -1, 1167 | Vector2(18, 4): -1, 1168 | Vector2(18, 5): -1, 1169 | Vector2(18, 6): -1, 1170 | Vector2(18, 7): -1, 1171 | Vector2(18, 8): -1, 1172 | Vector2(18, 9): -1, 1173 | Vector2(18, 10): -1, 1174 | Vector2(18, 11): -1, 1175 | Vector2(18, 12): -1, 1176 | Vector2(18, 13): -1, 1177 | Vector2(18, 14): -1, 1178 | Vector2(18, 15): -1, 1179 | Vector2(18, 16): -1, 1180 | Vector2(18, 17): -1, 1181 | Vector2(18, 18): -1, 1182 | Vector2(18, 19): -1, 1183 | Vector2(18, 20): -1, 1184 | Vector2(18, 21): -1, 1185 | Vector2(18, 22): -1, 1186 | Vector2(18, 23): -1, 1187 | Vector2(18, 24): -1, 1188 | Vector2(18, 25): -1, 1189 | Vector2(18, 26): -1, 1190 | Vector2(18, 27): -1, 1191 | Vector2(18, 28): -1, 1192 | Vector2(18, 29): -1, 1193 | Vector2(18, 30): -1, 1194 | Vector2(18, 31): -1, 1195 | Vector2(18, 32): -1, 1196 | Vector2(18, 33): -1, 1197 | Vector2(18, 34): -1, 1198 | Vector2(18, 35): -1, 1199 | Vector2(18, 36): -1, 1200 | Vector2(18, 37): -1, 1201 | Vector2(18, 38): -1, 1202 | Vector2(18, 39): -1, 1203 | Vector2(18, 40): -1, 1204 | Vector2(18, 41): -1, 1205 | Vector2(18, 42): -1, 1206 | Vector2(18, 43): -1, 1207 | Vector2(18, 44): -1, 1208 | Vector2(18, 45): -1, 1209 | Vector2(18, 46): -1, 1210 | Vector2(18, 47): -1, 1211 | Vector2(18, 48): -1, 1212 | Vector2(18, 49): -1, 1213 | Vector2(18, 50): -1, 1214 | Vector2(18, 51): -1, 1215 | Vector2(18, 52): -1, 1216 | Vector2(18, 53): -1, 1217 | Vector2(18, 54): -1, 1218 | Vector2(18, 55): -1, 1219 | Vector2(18, 56): -1, 1220 | Vector2(18, 57): -1, 1221 | Vector2(18, 58): -1, 1222 | Vector2(18, 59): -1, 1223 | Vector2(18, 60): -1, 1224 | Vector2(18, 61): -1, 1225 | Vector2(18, 62): -1, 1226 | Vector2(18, 63): -1, 1227 | Vector2(19, 0): -1, 1228 | Vector2(19, 1): -1, 1229 | Vector2(19, 2): -1, 1230 | Vector2(19, 3): -1, 1231 | Vector2(19, 4): -1, 1232 | Vector2(19, 5): -1, 1233 | Vector2(19, 6): -1, 1234 | Vector2(19, 7): -1, 1235 | Vector2(19, 8): -1, 1236 | Vector2(19, 9): -1, 1237 | Vector2(19, 10): -1, 1238 | Vector2(19, 11): -1, 1239 | Vector2(19, 12): -1, 1240 | Vector2(19, 13): -1, 1241 | Vector2(19, 14): -1, 1242 | Vector2(19, 15): -1, 1243 | Vector2(19, 16): -1, 1244 | Vector2(19, 17): -1, 1245 | Vector2(19, 18): -1, 1246 | Vector2(19, 19): -1, 1247 | Vector2(19, 20): -1, 1248 | Vector2(19, 21): -1, 1249 | Vector2(19, 22): -1, 1250 | Vector2(19, 23): -1, 1251 | Vector2(19, 24): -1, 1252 | Vector2(19, 25): -1, 1253 | Vector2(19, 26): -1, 1254 | Vector2(19, 27): -1, 1255 | Vector2(19, 28): -1, 1256 | Vector2(19, 29): -1, 1257 | Vector2(19, 30): -1, 1258 | Vector2(19, 31): -1, 1259 | Vector2(19, 32): -1, 1260 | Vector2(19, 33): -1, 1261 | Vector2(19, 34): -1, 1262 | Vector2(19, 35): -1, 1263 | Vector2(19, 36): -1, 1264 | Vector2(19, 37): -1, 1265 | Vector2(19, 38): -1, 1266 | Vector2(19, 39): -1, 1267 | Vector2(19, 40): -1, 1268 | Vector2(19, 41): -1, 1269 | Vector2(19, 42): -1, 1270 | Vector2(19, 43): -1, 1271 | Vector2(19, 44): -1, 1272 | Vector2(19, 45): -1, 1273 | Vector2(19, 46): -1, 1274 | Vector2(19, 47): -1, 1275 | Vector2(19, 48): -1, 1276 | Vector2(19, 49): -1, 1277 | Vector2(19, 50): -1, 1278 | Vector2(19, 51): -1, 1279 | Vector2(19, 52): -1, 1280 | Vector2(19, 53): -1, 1281 | Vector2(19, 54): -1, 1282 | Vector2(19, 55): -1, 1283 | Vector2(19, 56): -1, 1284 | Vector2(19, 57): -1, 1285 | Vector2(19, 58): -1, 1286 | Vector2(19, 59): -1, 1287 | Vector2(19, 60): -1, 1288 | Vector2(19, 61): -1, 1289 | Vector2(19, 62): -1, 1290 | Vector2(19, 63): -1, 1291 | Vector2(20, 0): -1, 1292 | Vector2(20, 1): -1, 1293 | Vector2(20, 2): -1, 1294 | Vector2(20, 3): -1, 1295 | Vector2(20, 4): -1, 1296 | Vector2(20, 5): -1, 1297 | Vector2(20, 6): -1, 1298 | Vector2(20, 7): -1, 1299 | Vector2(20, 8): -1, 1300 | Vector2(20, 9): -1, 1301 | Vector2(20, 10): -1, 1302 | Vector2(20, 11): -1, 1303 | Vector2(20, 12): -1, 1304 | Vector2(20, 13): -1, 1305 | Vector2(20, 14): -1, 1306 | Vector2(20, 15): -1, 1307 | Vector2(20, 16): -1, 1308 | Vector2(20, 17): -1, 1309 | Vector2(20, 18): -1, 1310 | Vector2(20, 19): -1, 1311 | Vector2(20, 20): -1, 1312 | Vector2(20, 21): -1, 1313 | Vector2(20, 22): -1, 1314 | Vector2(20, 23): -1, 1315 | Vector2(20, 24): -1, 1316 | Vector2(20, 25): -1, 1317 | Vector2(20, 26): -1, 1318 | Vector2(20, 27): -1, 1319 | Vector2(20, 28): -1, 1320 | Vector2(20, 29): -1, 1321 | Vector2(20, 30): -1, 1322 | Vector2(20, 31): -1, 1323 | Vector2(20, 32): -1, 1324 | Vector2(20, 33): -1, 1325 | Vector2(20, 34): -1, 1326 | Vector2(20, 35): -1, 1327 | Vector2(20, 36): -1, 1328 | Vector2(20, 37): -1, 1329 | Vector2(20, 38): -1, 1330 | Vector2(20, 39): -1, 1331 | Vector2(20, 40): -1, 1332 | Vector2(20, 41): -1, 1333 | Vector2(20, 42): -1, 1334 | Vector2(20, 43): -1, 1335 | Vector2(20, 44): -1, 1336 | Vector2(20, 45): -1, 1337 | Vector2(20, 46): -1, 1338 | Vector2(20, 47): -1, 1339 | Vector2(20, 48): -1, 1340 | Vector2(20, 49): -1, 1341 | Vector2(20, 50): -1, 1342 | Vector2(20, 51): -1, 1343 | Vector2(20, 52): -1, 1344 | Vector2(20, 53): -1, 1345 | Vector2(20, 54): -1, 1346 | Vector2(20, 55): -1, 1347 | Vector2(20, 56): -1, 1348 | Vector2(20, 57): -1, 1349 | Vector2(20, 58): -1, 1350 | Vector2(20, 59): -1, 1351 | Vector2(20, 60): -1, 1352 | Vector2(20, 61): -1, 1353 | Vector2(20, 62): -1, 1354 | Vector2(20, 63): -1, 1355 | Vector2(21, 0): -1, 1356 | Vector2(21, 1): -1, 1357 | Vector2(21, 2): -1, 1358 | Vector2(21, 3): -1, 1359 | Vector2(21, 4): -1, 1360 | Vector2(21, 5): -1, 1361 | Vector2(21, 6): -1, 1362 | Vector2(21, 7): -1, 1363 | Vector2(21, 8): -1, 1364 | Vector2(21, 9): -1, 1365 | Vector2(21, 10): -1, 1366 | Vector2(21, 11): -1, 1367 | Vector2(21, 12): -1, 1368 | Vector2(21, 13): -1, 1369 | Vector2(21, 14): -1, 1370 | Vector2(21, 15): -1, 1371 | Vector2(21, 16): -1, 1372 | Vector2(21, 17): -1, 1373 | Vector2(21, 18): -1, 1374 | Vector2(21, 19): -1, 1375 | Vector2(21, 20): -1, 1376 | Vector2(21, 21): -1, 1377 | Vector2(21, 22): -1, 1378 | Vector2(21, 23): -1, 1379 | Vector2(21, 24): -1, 1380 | Vector2(21, 25): -1, 1381 | Vector2(21, 26): -1, 1382 | Vector2(21, 27): -1, 1383 | Vector2(21, 28): -1, 1384 | Vector2(21, 29): -1, 1385 | Vector2(21, 30): -1, 1386 | Vector2(21, 31): -1, 1387 | Vector2(21, 32): -1, 1388 | Vector2(21, 33): -1, 1389 | Vector2(21, 34): -1, 1390 | Vector2(21, 35): -1, 1391 | Vector2(21, 36): -1, 1392 | Vector2(21, 37): -1, 1393 | Vector2(21, 38): -1, 1394 | Vector2(21, 39): -1, 1395 | Vector2(21, 40): -1, 1396 | Vector2(21, 41): -1, 1397 | Vector2(21, 42): -1, 1398 | Vector2(21, 43): -1, 1399 | Vector2(21, 44): -1, 1400 | Vector2(21, 45): -1, 1401 | Vector2(21, 46): -1, 1402 | Vector2(21, 47): -1, 1403 | Vector2(21, 48): -1, 1404 | Vector2(21, 49): -1, 1405 | Vector2(21, 50): -1, 1406 | Vector2(21, 51): -1, 1407 | Vector2(21, 52): -1, 1408 | Vector2(21, 53): -1, 1409 | Vector2(21, 54): -1, 1410 | Vector2(21, 55): -1, 1411 | Vector2(21, 56): -1, 1412 | Vector2(21, 57): -1, 1413 | Vector2(21, 58): -1, 1414 | Vector2(21, 59): -1, 1415 | Vector2(21, 60): -1, 1416 | Vector2(21, 61): -1, 1417 | Vector2(21, 62): -1, 1418 | Vector2(21, 63): -1, 1419 | Vector2(22, 0): -1, 1420 | Vector2(22, 1): -1, 1421 | Vector2(22, 2): -1, 1422 | Vector2(22, 3): -1, 1423 | Vector2(22, 4): -1, 1424 | Vector2(22, 5): -1, 1425 | Vector2(22, 6): -1, 1426 | Vector2(22, 7): -1, 1427 | Vector2(22, 8): -1, 1428 | Vector2(22, 9): -1, 1429 | Vector2(22, 10): -1, 1430 | Vector2(22, 11): -1, 1431 | Vector2(22, 12): -1, 1432 | Vector2(22, 13): -1, 1433 | Vector2(22, 14): -1, 1434 | Vector2(22, 15): -1, 1435 | Vector2(22, 16): -1, 1436 | Vector2(22, 17): -1, 1437 | Vector2(22, 18): -1, 1438 | Vector2(22, 19): -1, 1439 | Vector2(22, 20): -1, 1440 | Vector2(22, 21): -1, 1441 | Vector2(22, 22): -1, 1442 | Vector2(22, 23): -1, 1443 | Vector2(22, 24): -1, 1444 | Vector2(22, 25): -1, 1445 | Vector2(22, 26): -1, 1446 | Vector2(22, 27): -1, 1447 | Vector2(22, 28): -1, 1448 | Vector2(22, 29): -1, 1449 | Vector2(22, 30): -1, 1450 | Vector2(22, 31): -1, 1451 | Vector2(22, 32): -1, 1452 | Vector2(22, 33): -1, 1453 | Vector2(22, 34): -1, 1454 | Vector2(22, 35): -1, 1455 | Vector2(22, 36): -1, 1456 | Vector2(22, 37): -1, 1457 | Vector2(22, 38): -1, 1458 | Vector2(22, 39): -1, 1459 | Vector2(22, 40): -1, 1460 | Vector2(22, 41): -1, 1461 | Vector2(22, 42): -1, 1462 | Vector2(22, 43): -1, 1463 | Vector2(22, 44): -1, 1464 | Vector2(22, 45): -1, 1465 | Vector2(22, 46): -1, 1466 | Vector2(22, 47): -1, 1467 | Vector2(22, 48): -1, 1468 | Vector2(22, 49): -1, 1469 | Vector2(22, 50): -1, 1470 | Vector2(22, 51): -1, 1471 | Vector2(22, 52): -1, 1472 | Vector2(22, 53): -1, 1473 | Vector2(22, 54): -1, 1474 | Vector2(22, 55): -1, 1475 | Vector2(22, 56): -1, 1476 | Vector2(22, 57): -1, 1477 | Vector2(22, 58): -1, 1478 | Vector2(22, 59): -1, 1479 | Vector2(22, 60): -1, 1480 | Vector2(22, 61): -1, 1481 | Vector2(22, 62): -1, 1482 | Vector2(22, 63): -1, 1483 | Vector2(23, 0): -1, 1484 | Vector2(23, 1): -1, 1485 | Vector2(23, 2): -1, 1486 | Vector2(23, 3): -1, 1487 | Vector2(23, 4): -1, 1488 | Vector2(23, 5): -1, 1489 | Vector2(23, 6): -1, 1490 | Vector2(23, 7): -1, 1491 | Vector2(23, 8): -1, 1492 | Vector2(23, 9): -1, 1493 | Vector2(23, 10): -1, 1494 | Vector2(23, 11): -1, 1495 | Vector2(23, 12): -1, 1496 | Vector2(23, 13): -1, 1497 | Vector2(23, 14): -1, 1498 | Vector2(23, 15): -1, 1499 | Vector2(23, 16): -1, 1500 | Vector2(23, 17): -1, 1501 | Vector2(23, 18): -1, 1502 | Vector2(23, 19): -1, 1503 | Vector2(23, 20): -1, 1504 | Vector2(23, 21): -1, 1505 | Vector2(23, 22): -1, 1506 | Vector2(23, 23): -1, 1507 | Vector2(23, 24): -1, 1508 | Vector2(23, 25): -1, 1509 | Vector2(23, 26): -1, 1510 | Vector2(23, 27): -1, 1511 | Vector2(23, 28): -1, 1512 | Vector2(23, 29): -1, 1513 | Vector2(23, 30): -1, 1514 | Vector2(23, 31): -1, 1515 | Vector2(23, 32): -1, 1516 | Vector2(23, 33): -1, 1517 | Vector2(23, 34): -1, 1518 | Vector2(23, 35): -1, 1519 | Vector2(23, 36): -1, 1520 | Vector2(23, 37): -1, 1521 | Vector2(23, 38): -1, 1522 | Vector2(23, 39): -1, 1523 | Vector2(23, 40): -1, 1524 | Vector2(23, 41): -1, 1525 | Vector2(23, 42): -1, 1526 | Vector2(23, 43): -1, 1527 | Vector2(23, 44): -1, 1528 | Vector2(23, 45): -1, 1529 | Vector2(23, 46): -1, 1530 | Vector2(23, 47): -1, 1531 | Vector2(23, 48): -1, 1532 | Vector2(23, 49): -1, 1533 | Vector2(23, 50): -1, 1534 | Vector2(23, 51): -1, 1535 | Vector2(23, 52): -1, 1536 | Vector2(23, 53): -1, 1537 | Vector2(23, 54): -1, 1538 | Vector2(23, 55): -1, 1539 | Vector2(23, 56): -1, 1540 | Vector2(23, 57): -1, 1541 | Vector2(23, 58): -1, 1542 | Vector2(23, 59): -1, 1543 | Vector2(23, 60): -1, 1544 | Vector2(23, 61): -1, 1545 | Vector2(23, 62): -1, 1546 | Vector2(23, 63): -1, 1547 | Vector2(24, 0): -1, 1548 | Vector2(24, 1): -1, 1549 | Vector2(24, 2): -1, 1550 | Vector2(24, 3): -1, 1551 | Vector2(24, 4): -1, 1552 | Vector2(24, 5): -1, 1553 | Vector2(24, 6): -1, 1554 | Vector2(24, 7): -1, 1555 | Vector2(24, 8): -1, 1556 | Vector2(24, 9): -1, 1557 | Vector2(24, 10): -1, 1558 | Vector2(24, 11): -1, 1559 | Vector2(24, 12): -1, 1560 | Vector2(24, 13): -1, 1561 | Vector2(24, 14): -1, 1562 | Vector2(24, 15): -1, 1563 | Vector2(24, 16): -1, 1564 | Vector2(24, 17): -1, 1565 | Vector2(24, 18): -1, 1566 | Vector2(24, 19): -1, 1567 | Vector2(24, 20): -1, 1568 | Vector2(24, 21): -1, 1569 | Vector2(24, 22): -1, 1570 | Vector2(24, 23): -1, 1571 | Vector2(24, 24): -1, 1572 | Vector2(24, 25): -1, 1573 | Vector2(24, 26): -1, 1574 | Vector2(24, 27): -1, 1575 | Vector2(24, 28): -1, 1576 | Vector2(24, 29): -1, 1577 | Vector2(24, 30): -1, 1578 | Vector2(24, 31): -1, 1579 | Vector2(24, 32): -1, 1580 | Vector2(24, 33): -1, 1581 | Vector2(24, 34): -1, 1582 | Vector2(24, 35): -1, 1583 | Vector2(24, 36): -1, 1584 | Vector2(24, 37): -1, 1585 | Vector2(24, 38): -1, 1586 | Vector2(24, 39): -1, 1587 | Vector2(24, 40): -1, 1588 | Vector2(24, 41): -1, 1589 | Vector2(24, 42): -1, 1590 | Vector2(24, 43): -1, 1591 | Vector2(24, 44): -1, 1592 | Vector2(24, 45): -1, 1593 | Vector2(24, 46): -1, 1594 | Vector2(24, 47): -1, 1595 | Vector2(24, 48): -1, 1596 | Vector2(24, 49): -1, 1597 | Vector2(24, 50): -1, 1598 | Vector2(24, 51): -1, 1599 | Vector2(24, 52): -1, 1600 | Vector2(24, 53): -1, 1601 | Vector2(24, 54): -1, 1602 | Vector2(24, 55): -1, 1603 | Vector2(24, 56): -1, 1604 | Vector2(24, 57): -1, 1605 | Vector2(24, 58): -1, 1606 | Vector2(24, 59): -1, 1607 | Vector2(24, 60): -1, 1608 | Vector2(24, 61): -1, 1609 | Vector2(24, 62): -1, 1610 | Vector2(24, 63): -1, 1611 | Vector2(25, 0): -1, 1612 | Vector2(25, 1): -1, 1613 | Vector2(25, 2): -1, 1614 | Vector2(25, 3): -1, 1615 | Vector2(25, 4): -1, 1616 | Vector2(25, 5): -1, 1617 | Vector2(25, 6): -1, 1618 | Vector2(25, 7): -1, 1619 | Vector2(25, 8): -1, 1620 | Vector2(25, 9): -1, 1621 | Vector2(25, 10): -1, 1622 | Vector2(25, 11): -1, 1623 | Vector2(25, 12): -1, 1624 | Vector2(25, 13): -1, 1625 | Vector2(25, 14): -1, 1626 | Vector2(25, 15): -1, 1627 | Vector2(25, 16): -1, 1628 | Vector2(25, 17): -1, 1629 | Vector2(25, 18): -1, 1630 | Vector2(25, 19): -1, 1631 | Vector2(25, 20): -1, 1632 | Vector2(25, 21): -1, 1633 | Vector2(25, 22): -1, 1634 | Vector2(25, 23): -1, 1635 | Vector2(25, 24): -1, 1636 | Vector2(25, 25): -1, 1637 | Vector2(25, 26): -1, 1638 | Vector2(25, 27): -1, 1639 | Vector2(25, 28): -1, 1640 | Vector2(25, 29): -1, 1641 | Vector2(25, 30): -1, 1642 | Vector2(25, 31): -1, 1643 | Vector2(25, 32): -1, 1644 | Vector2(25, 33): -1, 1645 | Vector2(25, 34): -1, 1646 | Vector2(25, 35): -1, 1647 | Vector2(25, 36): -1, 1648 | Vector2(25, 37): -1, 1649 | Vector2(25, 38): -1, 1650 | Vector2(25, 39): -1, 1651 | Vector2(25, 40): -1, 1652 | Vector2(25, 41): -1, 1653 | Vector2(25, 42): -1, 1654 | Vector2(25, 43): -1, 1655 | Vector2(25, 44): -1, 1656 | Vector2(25, 45): -1, 1657 | Vector2(25, 46): -1, 1658 | Vector2(25, 47): -1, 1659 | Vector2(25, 48): -1, 1660 | Vector2(25, 49): -1, 1661 | Vector2(25, 50): -1, 1662 | Vector2(25, 51): -1, 1663 | Vector2(25, 52): -1, 1664 | Vector2(25, 53): -1, 1665 | Vector2(25, 54): -1, 1666 | Vector2(25, 55): -1, 1667 | Vector2(25, 56): -1, 1668 | Vector2(25, 57): -1, 1669 | Vector2(25, 58): -1, 1670 | Vector2(25, 59): -1, 1671 | Vector2(25, 60): -1, 1672 | Vector2(25, 61): -1, 1673 | Vector2(25, 62): -1, 1674 | Vector2(25, 63): -1, 1675 | Vector2(26, 0): -1, 1676 | Vector2(26, 1): -1, 1677 | Vector2(26, 2): -1, 1678 | Vector2(26, 3): -1, 1679 | Vector2(26, 4): -1, 1680 | Vector2(26, 5): -1, 1681 | Vector2(26, 6): -1, 1682 | Vector2(26, 7): -1, 1683 | Vector2(26, 8): -1, 1684 | Vector2(26, 9): -1, 1685 | Vector2(26, 10): -1, 1686 | Vector2(26, 11): -1, 1687 | Vector2(26, 12): -1, 1688 | Vector2(26, 13): -1, 1689 | Vector2(26, 14): -1, 1690 | Vector2(26, 15): -1, 1691 | Vector2(26, 16): -1, 1692 | Vector2(26, 17): -1, 1693 | Vector2(26, 18): -1, 1694 | Vector2(26, 19): -1, 1695 | Vector2(26, 20): -1, 1696 | Vector2(26, 21): -1, 1697 | Vector2(26, 22): -1, 1698 | Vector2(26, 23): -1, 1699 | Vector2(26, 24): -1, 1700 | Vector2(26, 25): -1, 1701 | Vector2(26, 26): -1, 1702 | Vector2(26, 27): -1, 1703 | Vector2(26, 28): -1, 1704 | Vector2(26, 29): -1, 1705 | Vector2(26, 30): -1, 1706 | Vector2(26, 31): -1, 1707 | Vector2(26, 32): -1, 1708 | Vector2(26, 33): -1, 1709 | Vector2(26, 34): -1, 1710 | Vector2(26, 35): -1, 1711 | Vector2(26, 36): -1, 1712 | Vector2(26, 37): -1, 1713 | Vector2(26, 38): -1, 1714 | Vector2(26, 39): -1, 1715 | Vector2(26, 40): -1, 1716 | Vector2(26, 41): -1, 1717 | Vector2(26, 42): -1, 1718 | Vector2(26, 43): -1, 1719 | Vector2(26, 44): -1, 1720 | Vector2(26, 45): -1, 1721 | Vector2(26, 46): -1, 1722 | Vector2(26, 47): -1, 1723 | Vector2(26, 48): -1, 1724 | Vector2(26, 49): -1, 1725 | Vector2(26, 50): -1, 1726 | Vector2(26, 51): -1, 1727 | Vector2(26, 52): -1, 1728 | Vector2(26, 53): -1, 1729 | Vector2(26, 54): -1, 1730 | Vector2(26, 55): -1, 1731 | Vector2(26, 56): -1, 1732 | Vector2(26, 57): -1, 1733 | Vector2(26, 58): -1, 1734 | Vector2(26, 59): -1, 1735 | Vector2(26, 60): -1, 1736 | Vector2(26, 61): -1, 1737 | Vector2(26, 62): -1, 1738 | Vector2(26, 63): -1, 1739 | Vector2(27, 0): -1, 1740 | Vector2(27, 1): -1, 1741 | Vector2(27, 2): -1, 1742 | Vector2(27, 3): -1, 1743 | Vector2(27, 4): -1, 1744 | Vector2(27, 5): -1, 1745 | Vector2(27, 6): -1, 1746 | Vector2(27, 7): -1, 1747 | Vector2(27, 8): -1, 1748 | Vector2(27, 9): -1, 1749 | Vector2(27, 10): -1, 1750 | Vector2(27, 11): -1, 1751 | Vector2(27, 12): -1, 1752 | Vector2(27, 13): -1, 1753 | Vector2(27, 14): -1, 1754 | Vector2(27, 15): -1, 1755 | Vector2(27, 16): -1, 1756 | Vector2(27, 17): -1, 1757 | Vector2(27, 18): -1, 1758 | Vector2(27, 19): -1, 1759 | Vector2(27, 20): -1, 1760 | Vector2(27, 21): -1, 1761 | Vector2(27, 22): -1, 1762 | Vector2(27, 23): -1, 1763 | Vector2(27, 24): -1, 1764 | Vector2(27, 25): -1, 1765 | Vector2(27, 26): -1, 1766 | Vector2(27, 27): -1, 1767 | Vector2(27, 28): -1, 1768 | Vector2(27, 29): -1, 1769 | Vector2(27, 30): -1, 1770 | Vector2(27, 31): -1, 1771 | Vector2(27, 32): -1, 1772 | Vector2(27, 33): -1, 1773 | Vector2(27, 34): -1, 1774 | Vector2(27, 35): -1, 1775 | Vector2(27, 36): -1, 1776 | Vector2(27, 37): -1, 1777 | Vector2(27, 38): -1, 1778 | Vector2(27, 39): -1, 1779 | Vector2(27, 40): -1, 1780 | Vector2(27, 41): -1, 1781 | Vector2(27, 42): -1, 1782 | Vector2(27, 43): -1, 1783 | Vector2(27, 44): -1, 1784 | Vector2(27, 45): -1, 1785 | Vector2(27, 46): -1, 1786 | Vector2(27, 47): -1, 1787 | Vector2(27, 48): -1, 1788 | Vector2(27, 49): -1, 1789 | Vector2(27, 50): -1, 1790 | Vector2(27, 51): -1, 1791 | Vector2(27, 52): -1, 1792 | Vector2(27, 53): -1, 1793 | Vector2(27, 54): -1, 1794 | Vector2(27, 55): -1, 1795 | Vector2(27, 56): -1, 1796 | Vector2(27, 57): -1, 1797 | Vector2(27, 58): -1, 1798 | Vector2(27, 59): -1, 1799 | Vector2(27, 60): -1, 1800 | Vector2(27, 61): -1, 1801 | Vector2(27, 62): -1, 1802 | Vector2(27, 63): -1, 1803 | Vector2(28, 0): -1, 1804 | Vector2(28, 1): -1, 1805 | Vector2(28, 2): -1, 1806 | Vector2(28, 3): -1, 1807 | Vector2(28, 4): -1, 1808 | Vector2(28, 5): -1, 1809 | Vector2(28, 6): -1, 1810 | Vector2(28, 7): -1, 1811 | Vector2(28, 8): -1, 1812 | Vector2(28, 9): -1, 1813 | Vector2(28, 10): -1, 1814 | Vector2(28, 11): -1, 1815 | Vector2(28, 12): -1, 1816 | Vector2(28, 13): -1, 1817 | Vector2(28, 14): -1, 1818 | Vector2(28, 15): -1, 1819 | Vector2(28, 16): -1, 1820 | Vector2(28, 17): -1, 1821 | Vector2(28, 18): -1, 1822 | Vector2(28, 19): -1, 1823 | Vector2(28, 20): -1, 1824 | Vector2(28, 21): -1, 1825 | Vector2(28, 22): -1, 1826 | Vector2(28, 23): -1, 1827 | Vector2(28, 24): -1, 1828 | Vector2(28, 25): -1, 1829 | Vector2(28, 26): -1, 1830 | Vector2(28, 27): -1, 1831 | Vector2(28, 28): -1, 1832 | Vector2(28, 29): -1, 1833 | Vector2(28, 30): -1, 1834 | Vector2(28, 31): -1, 1835 | Vector2(28, 32): -1, 1836 | Vector2(28, 33): -1, 1837 | Vector2(28, 34): -1, 1838 | Vector2(28, 35): -1, 1839 | Vector2(28, 36): -1, 1840 | Vector2(28, 37): -1, 1841 | Vector2(28, 38): -1, 1842 | Vector2(28, 39): -1, 1843 | Vector2(28, 40): -1, 1844 | Vector2(28, 41): -1, 1845 | Vector2(28, 42): -1, 1846 | Vector2(28, 43): -1, 1847 | Vector2(28, 44): -1, 1848 | Vector2(28, 45): -1, 1849 | Vector2(28, 46): -1, 1850 | Vector2(28, 47): -1, 1851 | Vector2(28, 48): -1, 1852 | Vector2(28, 49): -1, 1853 | Vector2(28, 50): -1, 1854 | Vector2(28, 51): -1, 1855 | Vector2(28, 52): -1, 1856 | Vector2(28, 53): -1, 1857 | Vector2(28, 54): -1, 1858 | Vector2(28, 55): -1, 1859 | Vector2(28, 56): -1, 1860 | Vector2(28, 57): -1, 1861 | Vector2(28, 58): -1, 1862 | Vector2(28, 59): -1, 1863 | Vector2(28, 60): -1, 1864 | Vector2(28, 61): -1, 1865 | Vector2(28, 62): -1, 1866 | Vector2(28, 63): -1, 1867 | Vector2(29, 0): -1, 1868 | Vector2(29, 1): -1, 1869 | Vector2(29, 2): -1, 1870 | Vector2(29, 3): -1, 1871 | Vector2(29, 4): -1, 1872 | Vector2(29, 5): -1, 1873 | Vector2(29, 6): -1, 1874 | Vector2(29, 7): -1, 1875 | Vector2(29, 8): -1, 1876 | Vector2(29, 9): -1, 1877 | Vector2(29, 10): -1, 1878 | Vector2(29, 11): -1, 1879 | Vector2(29, 12): -1, 1880 | Vector2(29, 13): -1, 1881 | Vector2(29, 14): -1, 1882 | Vector2(29, 15): -1, 1883 | Vector2(29, 16): -1, 1884 | Vector2(29, 17): -1, 1885 | Vector2(29, 18): -1, 1886 | Vector2(29, 19): -1, 1887 | Vector2(29, 20): -1, 1888 | Vector2(29, 21): -1, 1889 | Vector2(29, 22): -1, 1890 | Vector2(29, 23): -1, 1891 | Vector2(29, 24): -1, 1892 | Vector2(29, 25): -1, 1893 | Vector2(29, 26): -1, 1894 | Vector2(29, 27): -1, 1895 | Vector2(29, 28): -1, 1896 | Vector2(29, 29): -1, 1897 | Vector2(29, 30): -1, 1898 | Vector2(29, 31): -1, 1899 | Vector2(29, 32): -1, 1900 | Vector2(29, 33): -1, 1901 | Vector2(29, 34): -1, 1902 | Vector2(29, 35): -1, 1903 | Vector2(29, 36): -1, 1904 | Vector2(29, 37): -1, 1905 | Vector2(29, 38): -1, 1906 | Vector2(29, 39): -1, 1907 | Vector2(29, 40): -1, 1908 | Vector2(29, 41): -1, 1909 | Vector2(29, 42): -1, 1910 | Vector2(29, 43): -1, 1911 | Vector2(29, 44): -1, 1912 | Vector2(29, 45): -1, 1913 | Vector2(29, 46): -1, 1914 | Vector2(29, 47): -1, 1915 | Vector2(29, 48): -1, 1916 | Vector2(29, 49): -1, 1917 | Vector2(29, 50): -1, 1918 | Vector2(29, 51): -1, 1919 | Vector2(29, 52): -1, 1920 | Vector2(29, 53): -1, 1921 | Vector2(29, 54): -1, 1922 | Vector2(29, 55): -1, 1923 | Vector2(29, 56): -1, 1924 | Vector2(29, 57): -1, 1925 | Vector2(29, 58): -1, 1926 | Vector2(29, 59): -1, 1927 | Vector2(29, 60): -1, 1928 | Vector2(29, 61): -1, 1929 | Vector2(29, 62): -1, 1930 | Vector2(29, 63): -1, 1931 | Vector2(30, 0): -1, 1932 | Vector2(30, 1): -1, 1933 | Vector2(30, 2): -1, 1934 | Vector2(30, 3): -1, 1935 | Vector2(30, 4): -1, 1936 | Vector2(30, 5): -1, 1937 | Vector2(30, 6): -1, 1938 | Vector2(30, 7): -1, 1939 | Vector2(30, 8): -1, 1940 | Vector2(30, 9): -1, 1941 | Vector2(30, 10): -1, 1942 | Vector2(30, 11): -1, 1943 | Vector2(30, 12): -1, 1944 | Vector2(30, 13): -1, 1945 | Vector2(30, 14): -1, 1946 | Vector2(30, 15): -1, 1947 | Vector2(30, 16): -1, 1948 | Vector2(30, 17): -1, 1949 | Vector2(30, 18): -1, 1950 | Vector2(30, 19): -1, 1951 | Vector2(30, 20): -1, 1952 | Vector2(30, 21): -1, 1953 | Vector2(30, 22): -1, 1954 | Vector2(30, 23): -1, 1955 | Vector2(30, 24): -1, 1956 | Vector2(30, 25): -1, 1957 | Vector2(30, 26): -1, 1958 | Vector2(30, 27): -1, 1959 | Vector2(30, 28): -1, 1960 | Vector2(30, 29): -1, 1961 | Vector2(30, 30): -1, 1962 | Vector2(30, 31): -1, 1963 | Vector2(30, 32): -1, 1964 | Vector2(30, 33): -1, 1965 | Vector2(30, 34): -1, 1966 | Vector2(30, 35): -1, 1967 | Vector2(30, 36): -1, 1968 | Vector2(30, 37): -1, 1969 | Vector2(30, 38): -1, 1970 | Vector2(30, 39): -1, 1971 | Vector2(30, 40): -1, 1972 | Vector2(30, 41): -1, 1973 | Vector2(30, 42): -1, 1974 | Vector2(30, 43): -1, 1975 | Vector2(30, 44): -1, 1976 | Vector2(30, 45): -1, 1977 | Vector2(30, 46): -1, 1978 | Vector2(30, 47): -1, 1979 | Vector2(30, 48): -1, 1980 | Vector2(30, 49): -1, 1981 | Vector2(30, 50): -1, 1982 | Vector2(30, 51): -1, 1983 | Vector2(30, 52): -1, 1984 | Vector2(30, 53): -1, 1985 | Vector2(30, 54): -1, 1986 | Vector2(30, 55): -1, 1987 | Vector2(30, 56): -1, 1988 | Vector2(30, 57): -1, 1989 | Vector2(30, 58): -1, 1990 | Vector2(30, 59): -1, 1991 | Vector2(30, 60): -1, 1992 | Vector2(30, 61): -1, 1993 | Vector2(30, 62): -1, 1994 | Vector2(30, 63): -1, 1995 | Vector2(31, 0): -1, 1996 | Vector2(31, 1): -1, 1997 | Vector2(31, 2): -1, 1998 | Vector2(31, 3): -1, 1999 | Vector2(31, 4): -1, 2000 | Vector2(31, 5): -1, 2001 | Vector2(31, 6): -1, 2002 | Vector2(31, 7): -1, 2003 | Vector2(31, 8): -1, 2004 | Vector2(31, 9): -1, 2005 | Vector2(31, 10): -1, 2006 | Vector2(31, 11): -1, 2007 | Vector2(31, 12): -1, 2008 | Vector2(31, 13): -1, 2009 | Vector2(31, 14): -1, 2010 | Vector2(31, 15): -1, 2011 | Vector2(31, 16): -1, 2012 | Vector2(31, 17): -1, 2013 | Vector2(31, 18): -1, 2014 | Vector2(31, 19): -1, 2015 | Vector2(31, 20): -1, 2016 | Vector2(31, 21): -1, 2017 | Vector2(31, 22): -1, 2018 | Vector2(31, 23): -1, 2019 | Vector2(31, 24): -1, 2020 | Vector2(31, 25): -1, 2021 | Vector2(31, 26): -1, 2022 | Vector2(31, 27): -1, 2023 | Vector2(31, 28): -1, 2024 | Vector2(31, 29): -1, 2025 | Vector2(31, 30): -1, 2026 | Vector2(31, 31): -1, 2027 | Vector2(31, 32): -1, 2028 | Vector2(31, 33): -1, 2029 | Vector2(31, 34): -1, 2030 | Vector2(31, 35): -1, 2031 | Vector2(31, 36): -1, 2032 | Vector2(31, 37): -1, 2033 | Vector2(31, 38): -1, 2034 | Vector2(31, 39): -1, 2035 | Vector2(31, 40): -1, 2036 | Vector2(31, 41): -1, 2037 | Vector2(31, 42): -1, 2038 | Vector2(31, 43): -1, 2039 | Vector2(31, 44): -1, 2040 | Vector2(31, 45): -1, 2041 | Vector2(31, 46): -1, 2042 | Vector2(31, 47): -1, 2043 | Vector2(31, 48): -1, 2044 | Vector2(31, 49): -1, 2045 | Vector2(31, 50): -1, 2046 | Vector2(31, 51): -1, 2047 | Vector2(31, 52): -1, 2048 | Vector2(31, 53): -1, 2049 | Vector2(31, 54): -1, 2050 | Vector2(31, 55): -1, 2051 | Vector2(31, 56): -1, 2052 | Vector2(31, 57): -1, 2053 | Vector2(31, 58): -1, 2054 | Vector2(31, 59): -1, 2055 | Vector2(31, 60): -1, 2056 | Vector2(31, 61): -1, 2057 | Vector2(31, 62): -1, 2058 | Vector2(31, 63): -1, 2059 | Vector2(32, 0): -1, 2060 | Vector2(32, 1): -1, 2061 | Vector2(32, 2): -1, 2062 | Vector2(32, 3): -1, 2063 | Vector2(32, 4): -1, 2064 | Vector2(32, 5): -1, 2065 | Vector2(32, 6): -1, 2066 | Vector2(32, 7): -1, 2067 | Vector2(32, 8): -1, 2068 | Vector2(32, 9): -1, 2069 | Vector2(32, 10): -1, 2070 | Vector2(32, 11): -1, 2071 | Vector2(32, 12): -1, 2072 | Vector2(32, 13): -1, 2073 | Vector2(32, 14): -1, 2074 | Vector2(32, 15): -1, 2075 | Vector2(32, 16): -1, 2076 | Vector2(32, 17): -1, 2077 | Vector2(32, 18): -1, 2078 | Vector2(32, 19): -1, 2079 | Vector2(32, 20): -1, 2080 | Vector2(32, 21): -1, 2081 | Vector2(32, 22): -1, 2082 | Vector2(32, 23): -1, 2083 | Vector2(32, 24): -1, 2084 | Vector2(32, 25): -1, 2085 | Vector2(32, 26): -1, 2086 | Vector2(32, 27): -1, 2087 | Vector2(32, 28): -1, 2088 | Vector2(32, 29): -1, 2089 | Vector2(32, 30): -1, 2090 | Vector2(32, 31): -1, 2091 | Vector2(32, 32): -1, 2092 | Vector2(32, 33): -1, 2093 | Vector2(32, 34): -1, 2094 | Vector2(32, 35): -1, 2095 | Vector2(32, 36): -1, 2096 | Vector2(32, 37): -1, 2097 | Vector2(32, 38): -1, 2098 | Vector2(32, 39): -1, 2099 | Vector2(32, 40): -1, 2100 | Vector2(32, 41): -1, 2101 | Vector2(32, 42): -1, 2102 | Vector2(32, 43): -1, 2103 | Vector2(32, 44): -1, 2104 | Vector2(32, 45): -1, 2105 | Vector2(32, 46): -1, 2106 | Vector2(32, 47): -1, 2107 | Vector2(32, 48): -1, 2108 | Vector2(32, 49): -1, 2109 | Vector2(32, 50): -1, 2110 | Vector2(32, 51): -1, 2111 | Vector2(32, 52): -1, 2112 | Vector2(32, 53): -1, 2113 | Vector2(32, 54): -1, 2114 | Vector2(32, 55): -1, 2115 | Vector2(32, 56): -1, 2116 | Vector2(32, 57): -1, 2117 | Vector2(32, 58): -1, 2118 | Vector2(32, 59): -1, 2119 | Vector2(32, 60): -1, 2120 | Vector2(32, 61): -1, 2121 | Vector2(32, 62): -1, 2122 | Vector2(32, 63): -1, 2123 | Vector2(33, 0): -1, 2124 | Vector2(33, 1): -1, 2125 | Vector2(33, 2): -1, 2126 | Vector2(33, 3): -1, 2127 | Vector2(33, 4): -1, 2128 | Vector2(33, 5): -1, 2129 | Vector2(33, 6): -1, 2130 | Vector2(33, 7): -1, 2131 | Vector2(33, 8): -1, 2132 | Vector2(33, 9): -1, 2133 | Vector2(33, 10): -1, 2134 | Vector2(33, 11): -1, 2135 | Vector2(33, 12): -1, 2136 | Vector2(33, 13): -1, 2137 | Vector2(33, 14): -1, 2138 | Vector2(33, 15): -1, 2139 | Vector2(33, 16): -1, 2140 | Vector2(33, 17): -1, 2141 | Vector2(33, 18): -1, 2142 | Vector2(33, 19): -1, 2143 | Vector2(33, 20): -1, 2144 | Vector2(33, 21): -1, 2145 | Vector2(33, 22): -1, 2146 | Vector2(33, 23): -1, 2147 | Vector2(33, 24): -1, 2148 | Vector2(33, 25): -1, 2149 | Vector2(33, 26): -1, 2150 | Vector2(33, 27): -1, 2151 | Vector2(33, 28): -1, 2152 | Vector2(33, 29): -1, 2153 | Vector2(33, 30): -1, 2154 | Vector2(33, 31): -1, 2155 | Vector2(33, 32): -1, 2156 | Vector2(33, 33): -1, 2157 | Vector2(33, 34): -1, 2158 | Vector2(33, 35): -1, 2159 | Vector2(33, 36): -1, 2160 | Vector2(33, 37): -1, 2161 | Vector2(33, 38): -1, 2162 | Vector2(33, 39): -1, 2163 | Vector2(33, 40): -1, 2164 | Vector2(33, 41): -1, 2165 | Vector2(33, 42): -1, 2166 | Vector2(33, 43): -1, 2167 | Vector2(33, 44): -1, 2168 | Vector2(33, 45): -1, 2169 | Vector2(33, 46): -1, 2170 | Vector2(33, 47): -1, 2171 | Vector2(33, 48): -1, 2172 | Vector2(33, 49): -1, 2173 | Vector2(33, 50): -1, 2174 | Vector2(33, 51): -1, 2175 | Vector2(33, 52): -1, 2176 | Vector2(33, 53): -1, 2177 | Vector2(33, 54): -1, 2178 | Vector2(33, 55): -1, 2179 | Vector2(33, 56): -1, 2180 | Vector2(33, 57): -1, 2181 | Vector2(33, 58): -1, 2182 | Vector2(33, 59): -1, 2183 | Vector2(33, 60): -1, 2184 | Vector2(33, 61): -1, 2185 | Vector2(33, 62): -1, 2186 | Vector2(33, 63): -1, 2187 | Vector2(34, 0): -1, 2188 | Vector2(34, 1): -1, 2189 | Vector2(34, 2): -1, 2190 | Vector2(34, 3): -1, 2191 | Vector2(34, 4): -1, 2192 | Vector2(34, 5): -1, 2193 | Vector2(34, 6): -1, 2194 | Vector2(34, 7): -1, 2195 | Vector2(34, 8): -1, 2196 | Vector2(34, 9): -1, 2197 | Vector2(34, 10): -1, 2198 | Vector2(34, 11): -1, 2199 | Vector2(34, 12): -1, 2200 | Vector2(34, 13): -1, 2201 | Vector2(34, 14): -1, 2202 | Vector2(34, 15): -1, 2203 | Vector2(34, 16): -1, 2204 | Vector2(34, 17): -1, 2205 | Vector2(34, 18): -1, 2206 | Vector2(34, 19): -1, 2207 | Vector2(34, 20): -1, 2208 | Vector2(34, 21): -1, 2209 | Vector2(34, 22): -1, 2210 | Vector2(34, 23): -1, 2211 | Vector2(34, 24): -1, 2212 | Vector2(34, 25): -1, 2213 | Vector2(34, 26): -1, 2214 | Vector2(34, 27): -1, 2215 | Vector2(34, 28): -1, 2216 | Vector2(34, 29): -1, 2217 | Vector2(34, 30): -1, 2218 | Vector2(34, 31): -1, 2219 | Vector2(34, 32): -1, 2220 | Vector2(34, 33): -1, 2221 | Vector2(34, 34): -1, 2222 | Vector2(34, 35): -1, 2223 | Vector2(34, 36): -1, 2224 | Vector2(34, 37): -1, 2225 | Vector2(34, 38): -1, 2226 | Vector2(34, 39): -1, 2227 | Vector2(34, 40): -1, 2228 | Vector2(34, 41): -1, 2229 | Vector2(34, 42): -1, 2230 | Vector2(34, 43): -1, 2231 | Vector2(34, 44): -1, 2232 | Vector2(34, 45): -1, 2233 | Vector2(34, 46): -1, 2234 | Vector2(34, 47): -1, 2235 | Vector2(34, 48): -1, 2236 | Vector2(34, 49): -1, 2237 | Vector2(34, 50): -1, 2238 | Vector2(34, 51): -1, 2239 | Vector2(34, 52): -1, 2240 | Vector2(34, 53): -1, 2241 | Vector2(34, 54): -1, 2242 | Vector2(34, 55): -1, 2243 | Vector2(34, 56): -1, 2244 | Vector2(34, 57): -1, 2245 | Vector2(34, 58): -1, 2246 | Vector2(34, 59): -1, 2247 | Vector2(34, 60): -1, 2248 | Vector2(34, 61): -1, 2249 | Vector2(34, 62): -1, 2250 | Vector2(34, 63): -1, 2251 | Vector2(35, 0): -1, 2252 | Vector2(35, 1): -1, 2253 | Vector2(35, 2): -1, 2254 | Vector2(35, 3): -1, 2255 | Vector2(35, 4): -1, 2256 | Vector2(35, 5): -1, 2257 | Vector2(35, 6): -1, 2258 | Vector2(35, 7): -1, 2259 | Vector2(35, 8): -1, 2260 | Vector2(35, 9): -1, 2261 | Vector2(35, 10): -1, 2262 | Vector2(35, 11): -1, 2263 | Vector2(35, 12): -1, 2264 | Vector2(35, 13): -1, 2265 | Vector2(35, 14): -1, 2266 | Vector2(35, 15): -1, 2267 | Vector2(35, 16): -1, 2268 | Vector2(35, 17): -1, 2269 | Vector2(35, 18): -1, 2270 | Vector2(35, 19): -1, 2271 | Vector2(35, 20): -1, 2272 | Vector2(35, 21): -1, 2273 | Vector2(35, 22): -1, 2274 | Vector2(35, 23): -1, 2275 | Vector2(35, 24): -1, 2276 | Vector2(35, 25): -1, 2277 | Vector2(35, 26): -1, 2278 | Vector2(35, 27): -1, 2279 | Vector2(35, 28): -1, 2280 | Vector2(35, 29): -1, 2281 | Vector2(35, 30): -1, 2282 | Vector2(35, 31): -1, 2283 | Vector2(35, 32): -1, 2284 | Vector2(35, 33): -1, 2285 | Vector2(35, 34): -1, 2286 | Vector2(35, 35): -1, 2287 | Vector2(35, 36): -1, 2288 | Vector2(35, 37): -1, 2289 | Vector2(35, 38): -1, 2290 | Vector2(35, 39): -1, 2291 | Vector2(35, 40): -1, 2292 | Vector2(35, 41): -1, 2293 | Vector2(35, 42): -1, 2294 | Vector2(35, 43): -1, 2295 | Vector2(35, 44): -1, 2296 | Vector2(35, 45): -1, 2297 | Vector2(35, 46): -1, 2298 | Vector2(35, 47): -1, 2299 | Vector2(35, 48): -1, 2300 | Vector2(35, 49): -1, 2301 | Vector2(35, 50): -1, 2302 | Vector2(35, 51): -1, 2303 | Vector2(35, 52): -1, 2304 | Vector2(35, 53): -1, 2305 | Vector2(35, 54): -1, 2306 | Vector2(35, 55): -1, 2307 | Vector2(35, 56): -1, 2308 | Vector2(35, 57): -1, 2309 | Vector2(35, 58): -1, 2310 | Vector2(35, 59): -1, 2311 | Vector2(35, 60): -1, 2312 | Vector2(35, 61): -1, 2313 | Vector2(35, 62): -1, 2314 | Vector2(35, 63): -1, 2315 | Vector2(36, 0): -1, 2316 | Vector2(36, 1): -1, 2317 | Vector2(36, 2): -1, 2318 | Vector2(36, 3): -1, 2319 | Vector2(36, 4): -1, 2320 | Vector2(36, 5): -1, 2321 | Vector2(36, 6): -1, 2322 | Vector2(36, 7): -1, 2323 | Vector2(36, 8): -1, 2324 | Vector2(36, 9): -1, 2325 | Vector2(36, 10): -1, 2326 | Vector2(36, 11): -1, 2327 | Vector2(36, 12): -1, 2328 | Vector2(36, 13): -1, 2329 | Vector2(36, 14): -1, 2330 | Vector2(36, 15): -1, 2331 | Vector2(36, 16): -1, 2332 | Vector2(36, 17): -1, 2333 | Vector2(36, 18): -1, 2334 | Vector2(36, 19): -1, 2335 | Vector2(36, 20): -1, 2336 | Vector2(36, 21): -1, 2337 | Vector2(36, 22): -1, 2338 | Vector2(36, 23): -1, 2339 | Vector2(36, 24): -1, 2340 | Vector2(36, 25): -1, 2341 | Vector2(36, 26): -1, 2342 | Vector2(36, 27): -1, 2343 | Vector2(36, 28): -1, 2344 | Vector2(36, 29): -1, 2345 | Vector2(36, 30): -1, 2346 | Vector2(36, 31): -1, 2347 | Vector2(36, 32): -1, 2348 | Vector2(36, 33): -1, 2349 | Vector2(36, 34): -1, 2350 | Vector2(36, 35): -1, 2351 | Vector2(36, 36): -1, 2352 | Vector2(36, 37): -1, 2353 | Vector2(36, 38): -1, 2354 | Vector2(36, 39): -1, 2355 | Vector2(36, 40): -1, 2356 | Vector2(36, 41): -1, 2357 | Vector2(36, 42): -1, 2358 | Vector2(36, 43): -1, 2359 | Vector2(36, 44): -1, 2360 | Vector2(36, 45): -1, 2361 | Vector2(36, 46): -1, 2362 | Vector2(36, 47): -1, 2363 | Vector2(36, 48): -1, 2364 | Vector2(36, 49): -1, 2365 | Vector2(36, 50): -1, 2366 | Vector2(36, 51): -1, 2367 | Vector2(36, 52): -1, 2368 | Vector2(36, 53): -1, 2369 | Vector2(36, 54): -1, 2370 | Vector2(36, 55): -1, 2371 | Vector2(36, 56): -1, 2372 | Vector2(36, 57): -1, 2373 | Vector2(36, 58): -1, 2374 | Vector2(36, 59): -1, 2375 | Vector2(36, 60): -1, 2376 | Vector2(36, 61): -1, 2377 | Vector2(36, 62): -1, 2378 | Vector2(36, 63): -1, 2379 | Vector2(37, 0): -1, 2380 | Vector2(37, 1): -1, 2381 | Vector2(37, 2): -1, 2382 | Vector2(37, 3): -1, 2383 | Vector2(37, 4): -1, 2384 | Vector2(37, 5): -1, 2385 | Vector2(37, 6): -1, 2386 | Vector2(37, 7): -1, 2387 | Vector2(37, 8): -1, 2388 | Vector2(37, 9): -1, 2389 | Vector2(37, 10): -1, 2390 | Vector2(37, 11): -1, 2391 | Vector2(37, 12): -1, 2392 | Vector2(37, 13): -1, 2393 | Vector2(37, 14): -1, 2394 | Vector2(37, 15): -1, 2395 | Vector2(37, 16): -1, 2396 | Vector2(37, 17): -1, 2397 | Vector2(37, 18): -1, 2398 | Vector2(37, 19): -1, 2399 | Vector2(37, 20): -1, 2400 | Vector2(37, 21): -1, 2401 | Vector2(37, 22): -1, 2402 | Vector2(37, 23): -1, 2403 | Vector2(37, 24): -1, 2404 | Vector2(37, 25): -1, 2405 | Vector2(37, 26): -1, 2406 | Vector2(37, 27): -1, 2407 | Vector2(37, 28): -1, 2408 | Vector2(37, 29): -1, 2409 | Vector2(37, 30): -1, 2410 | Vector2(37, 31): -1, 2411 | Vector2(37, 32): -1, 2412 | Vector2(37, 33): -1, 2413 | Vector2(37, 34): -1, 2414 | Vector2(37, 35): -1, 2415 | Vector2(37, 36): -1, 2416 | Vector2(37, 37): -1, 2417 | Vector2(37, 38): -1, 2418 | Vector2(37, 39): -1, 2419 | Vector2(37, 40): -1, 2420 | Vector2(37, 41): -1, 2421 | Vector2(37, 42): -1, 2422 | Vector2(37, 43): -1, 2423 | Vector2(37, 44): -1, 2424 | Vector2(37, 45): -1, 2425 | Vector2(37, 46): -1, 2426 | Vector2(37, 47): -1, 2427 | Vector2(37, 48): -1, 2428 | Vector2(37, 49): -1, 2429 | Vector2(37, 50): -1, 2430 | Vector2(37, 51): -1, 2431 | Vector2(37, 52): -1, 2432 | Vector2(37, 53): -1, 2433 | Vector2(37, 54): -1, 2434 | Vector2(37, 55): -1, 2435 | Vector2(37, 56): -1, 2436 | Vector2(37, 57): -1, 2437 | Vector2(37, 58): -1, 2438 | Vector2(37, 59): -1, 2439 | Vector2(37, 60): -1, 2440 | Vector2(37, 61): -1, 2441 | Vector2(37, 62): -1, 2442 | Vector2(37, 63): -1, 2443 | Vector2(38, 0): -1, 2444 | Vector2(38, 1): -1, 2445 | Vector2(38, 2): -1, 2446 | Vector2(38, 3): -1, 2447 | Vector2(38, 4): -1, 2448 | Vector2(38, 5): -1, 2449 | Vector2(38, 6): -1, 2450 | Vector2(38, 7): -1, 2451 | Vector2(38, 8): -1, 2452 | Vector2(38, 9): -1, 2453 | Vector2(38, 10): -1, 2454 | Vector2(38, 11): -1, 2455 | Vector2(38, 12): -1, 2456 | Vector2(38, 13): -1, 2457 | Vector2(38, 14): -1, 2458 | Vector2(38, 15): -1, 2459 | Vector2(38, 16): -1, 2460 | Vector2(38, 17): -1, 2461 | Vector2(38, 18): -1, 2462 | Vector2(38, 19): -1, 2463 | Vector2(38, 20): -1, 2464 | Vector2(38, 21): -1, 2465 | Vector2(38, 22): -1, 2466 | Vector2(38, 23): -1, 2467 | Vector2(38, 24): -1, 2468 | Vector2(38, 25): -1, 2469 | Vector2(38, 26): -1, 2470 | Vector2(38, 27): -1, 2471 | Vector2(38, 28): -1, 2472 | Vector2(38, 29): -1, 2473 | Vector2(38, 30): -1, 2474 | Vector2(38, 31): -1, 2475 | Vector2(38, 32): -1, 2476 | Vector2(38, 33): -1, 2477 | Vector2(38, 34): -1, 2478 | Vector2(38, 35): -1, 2479 | Vector2(38, 36): -1, 2480 | Vector2(38, 37): -1, 2481 | Vector2(38, 38): -1, 2482 | Vector2(38, 39): -1, 2483 | Vector2(38, 40): -1, 2484 | Vector2(38, 41): -1, 2485 | Vector2(38, 42): -1, 2486 | Vector2(38, 43): -1, 2487 | Vector2(38, 44): -1, 2488 | Vector2(38, 45): -1, 2489 | Vector2(38, 46): -1, 2490 | Vector2(38, 47): -1, 2491 | Vector2(38, 48): -1, 2492 | Vector2(38, 49): -1, 2493 | Vector2(38, 50): -1, 2494 | Vector2(38, 51): -1, 2495 | Vector2(38, 52): -1, 2496 | Vector2(38, 53): -1, 2497 | Vector2(38, 54): -1, 2498 | Vector2(38, 55): -1, 2499 | Vector2(38, 56): -1, 2500 | Vector2(38, 57): -1, 2501 | Vector2(38, 58): -1, 2502 | Vector2(38, 59): -1, 2503 | Vector2(38, 60): -1, 2504 | Vector2(38, 61): -1, 2505 | Vector2(38, 62): -1, 2506 | Vector2(38, 63): -1, 2507 | Vector2(39, 0): -1, 2508 | Vector2(39, 1): -1, 2509 | Vector2(39, 2): -1, 2510 | Vector2(39, 3): -1, 2511 | Vector2(39, 4): -1, 2512 | Vector2(39, 5): -1, 2513 | Vector2(39, 6): -1, 2514 | Vector2(39, 7): -1, 2515 | Vector2(39, 8): -1, 2516 | Vector2(39, 9): -1, 2517 | Vector2(39, 10): -1, 2518 | Vector2(39, 11): -1, 2519 | Vector2(39, 12): -1, 2520 | Vector2(39, 13): -1, 2521 | Vector2(39, 14): -1, 2522 | Vector2(39, 15): -1, 2523 | Vector2(39, 16): -1, 2524 | Vector2(39, 17): -1, 2525 | Vector2(39, 18): -1, 2526 | Vector2(39, 19): -1, 2527 | Vector2(39, 20): -1, 2528 | Vector2(39, 21): -1, 2529 | Vector2(39, 22): -1, 2530 | Vector2(39, 23): -1, 2531 | Vector2(39, 24): -1, 2532 | Vector2(39, 25): -1, 2533 | Vector2(39, 26): -1, 2534 | Vector2(39, 27): -1, 2535 | Vector2(39, 28): -1, 2536 | Vector2(39, 29): -1, 2537 | Vector2(39, 30): -1, 2538 | Vector2(39, 31): -1, 2539 | Vector2(39, 32): -1, 2540 | Vector2(39, 33): -1, 2541 | Vector2(39, 34): -1, 2542 | Vector2(39, 35): -1, 2543 | Vector2(39, 36): -1, 2544 | Vector2(39, 37): -1, 2545 | Vector2(39, 38): -1, 2546 | Vector2(39, 39): -1, 2547 | Vector2(39, 40): -1, 2548 | Vector2(39, 41): -1, 2549 | Vector2(39, 42): -1, 2550 | Vector2(39, 43): -1, 2551 | Vector2(39, 44): -1, 2552 | Vector2(39, 45): -1, 2553 | Vector2(39, 46): -1, 2554 | Vector2(39, 47): -1, 2555 | Vector2(39, 48): -1, 2556 | Vector2(39, 49): -1, 2557 | Vector2(39, 50): -1, 2558 | Vector2(39, 51): -1, 2559 | Vector2(39, 52): -1, 2560 | Vector2(39, 53): -1, 2561 | Vector2(39, 54): -1, 2562 | Vector2(39, 55): -1, 2563 | Vector2(39, 56): -1, 2564 | Vector2(39, 57): -1, 2565 | Vector2(39, 58): -1, 2566 | Vector2(39, 59): -1, 2567 | Vector2(39, 60): -1, 2568 | Vector2(39, 61): -1, 2569 | Vector2(39, 62): -1, 2570 | Vector2(39, 63): -1, 2571 | Vector2(40, 0): -1, 2572 | Vector2(40, 1): -1, 2573 | Vector2(40, 2): -1, 2574 | Vector2(40, 3): -1, 2575 | Vector2(40, 4): -1, 2576 | Vector2(40, 5): -1, 2577 | Vector2(40, 6): -1, 2578 | Vector2(40, 7): -1, 2579 | Vector2(40, 8): -1, 2580 | Vector2(40, 9): -1, 2581 | Vector2(40, 10): -1, 2582 | Vector2(40, 11): -1, 2583 | Vector2(40, 12): -1, 2584 | Vector2(40, 13): -1, 2585 | Vector2(40, 14): -1, 2586 | Vector2(40, 15): -1, 2587 | Vector2(40, 16): -1, 2588 | Vector2(40, 17): -1, 2589 | Vector2(40, 18): -1, 2590 | Vector2(40, 19): -1, 2591 | Vector2(40, 20): -1, 2592 | Vector2(40, 21): -1, 2593 | Vector2(40, 22): -1, 2594 | Vector2(40, 23): -1, 2595 | Vector2(40, 24): -1, 2596 | Vector2(40, 25): -1, 2597 | Vector2(40, 26): -1, 2598 | Vector2(40, 27): -1, 2599 | Vector2(40, 28): -1, 2600 | Vector2(40, 29): -1, 2601 | Vector2(40, 30): -1, 2602 | Vector2(40, 31): -1, 2603 | Vector2(40, 32): -1, 2604 | Vector2(40, 33): -1, 2605 | Vector2(40, 34): -1, 2606 | Vector2(40, 35): -1, 2607 | Vector2(40, 36): -1, 2608 | Vector2(40, 37): -1, 2609 | Vector2(40, 38): -1, 2610 | Vector2(40, 39): -1, 2611 | Vector2(40, 40): -1, 2612 | Vector2(40, 41): -1, 2613 | Vector2(40, 42): -1, 2614 | Vector2(40, 43): -1, 2615 | Vector2(40, 44): -1, 2616 | Vector2(40, 45): -1, 2617 | Vector2(40, 46): -1, 2618 | Vector2(40, 47): -1, 2619 | Vector2(40, 48): -1, 2620 | Vector2(40, 49): -1, 2621 | Vector2(40, 50): -1, 2622 | Vector2(40, 51): -1, 2623 | Vector2(40, 52): -1, 2624 | Vector2(40, 53): -1, 2625 | Vector2(40, 54): -1, 2626 | Vector2(40, 55): -1, 2627 | Vector2(40, 56): -1, 2628 | Vector2(40, 57): -1, 2629 | Vector2(40, 58): -1, 2630 | Vector2(40, 59): -1, 2631 | Vector2(40, 60): -1, 2632 | Vector2(40, 61): -1, 2633 | Vector2(40, 62): -1, 2634 | Vector2(40, 63): -1, 2635 | Vector2(41, 0): -1, 2636 | Vector2(41, 1): -1, 2637 | Vector2(41, 2): -1, 2638 | Vector2(41, 3): -1, 2639 | Vector2(41, 4): -1, 2640 | Vector2(41, 5): -1, 2641 | Vector2(41, 6): -1, 2642 | Vector2(41, 7): -1, 2643 | Vector2(41, 8): -1, 2644 | Vector2(41, 9): -1, 2645 | Vector2(41, 10): -1, 2646 | Vector2(41, 11): -1, 2647 | Vector2(41, 12): -1, 2648 | Vector2(41, 13): -1, 2649 | Vector2(41, 14): -1, 2650 | Vector2(41, 15): -1, 2651 | Vector2(41, 16): -1, 2652 | Vector2(41, 17): -1, 2653 | Vector2(41, 18): -1, 2654 | Vector2(41, 19): -1, 2655 | Vector2(41, 20): -1, 2656 | Vector2(41, 21): -1, 2657 | Vector2(41, 22): -1, 2658 | Vector2(41, 23): -1, 2659 | Vector2(41, 24): -1, 2660 | Vector2(41, 25): -1, 2661 | Vector2(41, 26): -1, 2662 | Vector2(41, 27): -1, 2663 | Vector2(41, 28): -1, 2664 | Vector2(41, 29): -1, 2665 | Vector2(41, 30): -1, 2666 | Vector2(41, 31): -1, 2667 | Vector2(41, 32): -1, 2668 | Vector2(41, 33): -1, 2669 | Vector2(41, 34): -1, 2670 | Vector2(41, 35): -1, 2671 | Vector2(41, 36): -1, 2672 | Vector2(41, 37): -1, 2673 | Vector2(41, 38): -1, 2674 | Vector2(41, 39): -1, 2675 | Vector2(41, 40): -1, 2676 | Vector2(41, 41): -1, 2677 | Vector2(41, 42): -1, 2678 | Vector2(41, 43): -1, 2679 | Vector2(41, 44): -1, 2680 | Vector2(41, 45): -1, 2681 | Vector2(41, 46): -1, 2682 | Vector2(41, 47): -1, 2683 | Vector2(41, 48): -1, 2684 | Vector2(41, 49): -1, 2685 | Vector2(41, 50): -1, 2686 | Vector2(41, 51): -1, 2687 | Vector2(41, 52): -1, 2688 | Vector2(41, 53): -1, 2689 | Vector2(41, 54): -1, 2690 | Vector2(41, 55): -1, 2691 | Vector2(41, 56): -1, 2692 | Vector2(41, 57): -1, 2693 | Vector2(41, 58): -1, 2694 | Vector2(41, 59): -1, 2695 | Vector2(41, 60): -1, 2696 | Vector2(41, 61): -1, 2697 | Vector2(41, 62): -1, 2698 | Vector2(41, 63): -1, 2699 | Vector2(42, 0): -1, 2700 | Vector2(42, 1): -1, 2701 | Vector2(42, 2): -1, 2702 | Vector2(42, 3): -1, 2703 | Vector2(42, 4): -1, 2704 | Vector2(42, 5): -1, 2705 | Vector2(42, 6): -1, 2706 | Vector2(42, 7): -1, 2707 | Vector2(42, 8): -1, 2708 | Vector2(42, 9): -1, 2709 | Vector2(42, 10): -1, 2710 | Vector2(42, 11): -1, 2711 | Vector2(42, 12): -1, 2712 | Vector2(42, 13): -1, 2713 | Vector2(42, 14): -1, 2714 | Vector2(42, 15): -1, 2715 | Vector2(42, 16): -1, 2716 | Vector2(42, 17): -1, 2717 | Vector2(42, 18): -1, 2718 | Vector2(42, 19): -1, 2719 | Vector2(42, 20): -1, 2720 | Vector2(42, 21): -1, 2721 | Vector2(42, 22): -1, 2722 | Vector2(42, 23): -1, 2723 | Vector2(42, 24): -1, 2724 | Vector2(42, 25): -1, 2725 | Vector2(42, 26): -1, 2726 | Vector2(42, 27): -1, 2727 | Vector2(42, 28): -1, 2728 | Vector2(42, 29): -1, 2729 | Vector2(42, 30): -1, 2730 | Vector2(42, 31): -1, 2731 | Vector2(42, 32): -1, 2732 | Vector2(42, 33): -1, 2733 | Vector2(42, 34): -1, 2734 | Vector2(42, 35): -1, 2735 | Vector2(42, 36): -1, 2736 | Vector2(42, 37): -1, 2737 | Vector2(42, 38): -1, 2738 | Vector2(42, 39): -1, 2739 | Vector2(42, 40): -1, 2740 | Vector2(42, 41): -1, 2741 | Vector2(42, 42): -1, 2742 | Vector2(42, 43): -1, 2743 | Vector2(42, 44): -1, 2744 | Vector2(42, 45): -1, 2745 | Vector2(42, 46): -1, 2746 | Vector2(42, 47): -1, 2747 | Vector2(42, 48): -1, 2748 | Vector2(42, 49): -1, 2749 | Vector2(42, 50): -1, 2750 | Vector2(42, 51): -1, 2751 | Vector2(42, 52): -1, 2752 | Vector2(42, 53): -1, 2753 | Vector2(42, 54): -1, 2754 | Vector2(42, 55): -1, 2755 | Vector2(42, 56): -1, 2756 | Vector2(42, 57): -1, 2757 | Vector2(42, 58): -1, 2758 | Vector2(42, 59): -1, 2759 | Vector2(42, 60): -1, 2760 | Vector2(42, 61): -1, 2761 | Vector2(42, 62): -1, 2762 | Vector2(42, 63): -1, 2763 | Vector2(43, 0): -1, 2764 | Vector2(43, 1): -1, 2765 | Vector2(43, 2): -1, 2766 | Vector2(43, 3): -1, 2767 | Vector2(43, 4): -1, 2768 | Vector2(43, 5): -1, 2769 | Vector2(43, 6): -1, 2770 | Vector2(43, 7): -1, 2771 | Vector2(43, 8): -1, 2772 | Vector2(43, 9): -1, 2773 | Vector2(43, 10): -1, 2774 | Vector2(43, 11): -1, 2775 | Vector2(43, 12): -1, 2776 | Vector2(43, 13): -1, 2777 | Vector2(43, 14): -1, 2778 | Vector2(43, 15): -1, 2779 | Vector2(43, 16): -1, 2780 | Vector2(43, 17): -1, 2781 | Vector2(43, 18): -1, 2782 | Vector2(43, 19): -1, 2783 | Vector2(43, 20): -1, 2784 | Vector2(43, 21): -1, 2785 | Vector2(43, 22): -1, 2786 | Vector2(43, 23): -1, 2787 | Vector2(43, 24): -1, 2788 | Vector2(43, 25): -1, 2789 | Vector2(43, 26): -1, 2790 | Vector2(43, 27): -1, 2791 | Vector2(43, 28): -1, 2792 | Vector2(43, 29): -1, 2793 | Vector2(43, 30): -1, 2794 | Vector2(43, 31): -1, 2795 | Vector2(43, 32): -1, 2796 | Vector2(43, 33): -1, 2797 | Vector2(43, 34): -1, 2798 | Vector2(43, 35): -1, 2799 | Vector2(43, 36): -1, 2800 | Vector2(43, 37): -1, 2801 | Vector2(43, 38): -1, 2802 | Vector2(43, 39): -1, 2803 | Vector2(43, 40): -1, 2804 | Vector2(43, 41): -1, 2805 | Vector2(43, 42): -1, 2806 | Vector2(43, 43): -1, 2807 | Vector2(43, 44): -1, 2808 | Vector2(43, 45): -1, 2809 | Vector2(43, 46): -1, 2810 | Vector2(43, 47): -1, 2811 | Vector2(43, 48): -1, 2812 | Vector2(43, 49): -1, 2813 | Vector2(43, 50): -1, 2814 | Vector2(43, 51): -1, 2815 | Vector2(43, 52): -1, 2816 | Vector2(43, 53): -1, 2817 | Vector2(43, 54): -1, 2818 | Vector2(43, 55): -1, 2819 | Vector2(43, 56): -1, 2820 | Vector2(43, 57): -1, 2821 | Vector2(43, 58): -1, 2822 | Vector2(43, 59): -1, 2823 | Vector2(43, 60): -1, 2824 | Vector2(43, 61): -1, 2825 | Vector2(43, 62): -1, 2826 | Vector2(43, 63): -1, 2827 | Vector2(44, 0): -1, 2828 | Vector2(44, 1): -1, 2829 | Vector2(44, 2): -1, 2830 | Vector2(44, 3): -1, 2831 | Vector2(44, 4): -1, 2832 | Vector2(44, 5): -1, 2833 | Vector2(44, 6): -1, 2834 | Vector2(44, 7): -1, 2835 | Vector2(44, 8): -1, 2836 | Vector2(44, 9): -1, 2837 | Vector2(44, 10): -1, 2838 | Vector2(44, 11): -1, 2839 | Vector2(44, 12): -1, 2840 | Vector2(44, 13): -1, 2841 | Vector2(44, 14): -1, 2842 | Vector2(44, 15): -1, 2843 | Vector2(44, 16): -1, 2844 | Vector2(44, 17): -1, 2845 | Vector2(44, 18): -1, 2846 | Vector2(44, 19): -1, 2847 | Vector2(44, 20): -1, 2848 | Vector2(44, 21): -1, 2849 | Vector2(44, 22): -1, 2850 | Vector2(44, 23): -1, 2851 | Vector2(44, 24): -1, 2852 | Vector2(44, 25): -1, 2853 | Vector2(44, 26): -1, 2854 | Vector2(44, 27): -1, 2855 | Vector2(44, 28): -1, 2856 | Vector2(44, 29): -1, 2857 | Vector2(44, 30): -1, 2858 | Vector2(44, 31): -1, 2859 | Vector2(44, 32): -1, 2860 | Vector2(44, 33): -1, 2861 | Vector2(44, 34): -1, 2862 | Vector2(44, 35): -1, 2863 | Vector2(44, 36): -1, 2864 | Vector2(44, 37): -1, 2865 | Vector2(44, 38): -1, 2866 | Vector2(44, 39): -1, 2867 | Vector2(44, 40): -1, 2868 | Vector2(44, 41): -1, 2869 | Vector2(44, 42): -1, 2870 | Vector2(44, 43): -1, 2871 | Vector2(44, 44): -1, 2872 | Vector2(44, 45): -1, 2873 | Vector2(44, 46): -1, 2874 | Vector2(44, 47): -1, 2875 | Vector2(44, 48): -1, 2876 | Vector2(44, 49): -1, 2877 | Vector2(44, 50): -1, 2878 | Vector2(44, 51): -1, 2879 | Vector2(44, 52): -1, 2880 | Vector2(44, 53): -1, 2881 | Vector2(44, 54): -1, 2882 | Vector2(44, 55): -1, 2883 | Vector2(44, 56): -1, 2884 | Vector2(44, 57): -1, 2885 | Vector2(44, 58): -1, 2886 | Vector2(44, 59): -1, 2887 | Vector2(44, 60): -1, 2888 | Vector2(44, 61): -1, 2889 | Vector2(44, 62): -1, 2890 | Vector2(44, 63): -1, 2891 | Vector2(45, 0): -1, 2892 | Vector2(45, 1): -1, 2893 | Vector2(45, 2): -1, 2894 | Vector2(45, 3): -1, 2895 | Vector2(45, 4): -1, 2896 | Vector2(45, 5): -1, 2897 | Vector2(45, 6): -1, 2898 | Vector2(45, 7): -1, 2899 | Vector2(45, 8): -1, 2900 | Vector2(45, 9): -1, 2901 | Vector2(45, 10): -1, 2902 | Vector2(45, 11): -1, 2903 | Vector2(45, 12): -1, 2904 | Vector2(45, 13): -1, 2905 | Vector2(45, 14): -1, 2906 | Vector2(45, 15): -1, 2907 | Vector2(45, 16): -1, 2908 | Vector2(45, 17): -1, 2909 | Vector2(45, 18): -1, 2910 | Vector2(45, 19): -1, 2911 | Vector2(45, 20): -1, 2912 | Vector2(45, 21): -1, 2913 | Vector2(45, 22): -1, 2914 | Vector2(45, 23): -1, 2915 | Vector2(45, 24): -1, 2916 | Vector2(45, 25): -1, 2917 | Vector2(45, 26): -1, 2918 | Vector2(45, 27): -1, 2919 | Vector2(45, 28): -1, 2920 | Vector2(45, 29): -1, 2921 | Vector2(45, 30): -1, 2922 | Vector2(45, 31): -1, 2923 | Vector2(45, 32): -1, 2924 | Vector2(45, 33): -1, 2925 | Vector2(45, 34): -1, 2926 | Vector2(45, 35): -1, 2927 | Vector2(45, 36): -1, 2928 | Vector2(45, 37): -1, 2929 | Vector2(45, 38): -1, 2930 | Vector2(45, 39): -1, 2931 | Vector2(45, 40): -1, 2932 | Vector2(45, 41): -1, 2933 | Vector2(45, 42): -1, 2934 | Vector2(45, 43): -1, 2935 | Vector2(45, 44): -1, 2936 | Vector2(45, 45): -1, 2937 | Vector2(45, 46): -1, 2938 | Vector2(45, 47): -1, 2939 | Vector2(45, 48): -1, 2940 | Vector2(45, 49): -1, 2941 | Vector2(45, 50): -1, 2942 | Vector2(45, 51): -1, 2943 | Vector2(45, 52): -1, 2944 | Vector2(45, 53): -1, 2945 | Vector2(45, 54): -1, 2946 | Vector2(45, 55): -1, 2947 | Vector2(45, 56): -1, 2948 | Vector2(45, 57): -1, 2949 | Vector2(45, 58): -1, 2950 | Vector2(45, 59): -1, 2951 | Vector2(45, 60): -1, 2952 | Vector2(45, 61): -1, 2953 | Vector2(45, 62): -1, 2954 | Vector2(45, 63): -1, 2955 | Vector2(46, 0): -1, 2956 | Vector2(46, 1): -1, 2957 | Vector2(46, 2): -1, 2958 | Vector2(46, 3): -1, 2959 | Vector2(46, 4): -1, 2960 | Vector2(46, 5): -1, 2961 | Vector2(46, 6): -1, 2962 | Vector2(46, 7): -1, 2963 | Vector2(46, 8): -1, 2964 | Vector2(46, 9): -1, 2965 | Vector2(46, 10): -1, 2966 | Vector2(46, 11): -1, 2967 | Vector2(46, 12): -1, 2968 | Vector2(46, 13): -1, 2969 | Vector2(46, 14): -1, 2970 | Vector2(46, 15): -1, 2971 | Vector2(46, 16): -1, 2972 | Vector2(46, 17): -1, 2973 | Vector2(46, 18): -1, 2974 | Vector2(46, 19): -1, 2975 | Vector2(46, 20): -1, 2976 | Vector2(46, 21): -1, 2977 | Vector2(46, 22): -1, 2978 | Vector2(46, 23): -1, 2979 | Vector2(46, 24): -1, 2980 | Vector2(46, 25): -1, 2981 | Vector2(46, 26): -1, 2982 | Vector2(46, 27): -1, 2983 | Vector2(46, 28): -1, 2984 | Vector2(46, 29): -1, 2985 | Vector2(46, 30): -1, 2986 | Vector2(46, 31): -1, 2987 | Vector2(46, 32): -1, 2988 | Vector2(46, 33): -1, 2989 | Vector2(46, 34): -1, 2990 | Vector2(46, 35): -1, 2991 | Vector2(46, 36): -1, 2992 | Vector2(46, 37): -1, 2993 | Vector2(46, 38): -1, 2994 | Vector2(46, 39): -1, 2995 | Vector2(46, 40): -1, 2996 | Vector2(46, 41): -1, 2997 | Vector2(46, 42): -1, 2998 | Vector2(46, 43): -1, 2999 | Vector2(46, 44): -1, 3000 | Vector2(46, 45): -1, 3001 | Vector2(46, 46): -1, 3002 | Vector2(46, 47): -1, 3003 | Vector2(46, 48): -1, 3004 | Vector2(46, 49): -1, 3005 | Vector2(46, 50): -1, 3006 | Vector2(46, 51): -1, 3007 | Vector2(46, 52): -1, 3008 | Vector2(46, 53): -1, 3009 | Vector2(46, 54): -1, 3010 | Vector2(46, 55): -1, 3011 | Vector2(46, 56): -1, 3012 | Vector2(46, 57): -1, 3013 | Vector2(46, 58): -1, 3014 | Vector2(46, 59): -1, 3015 | Vector2(46, 60): -1, 3016 | Vector2(46, 61): -1, 3017 | Vector2(46, 62): -1, 3018 | Vector2(46, 63): -1, 3019 | Vector2(47, 0): -1, 3020 | Vector2(47, 1): -1, 3021 | Vector2(47, 2): -1, 3022 | Vector2(47, 3): -1, 3023 | Vector2(47, 4): -1, 3024 | Vector2(47, 5): -1, 3025 | Vector2(47, 6): -1, 3026 | Vector2(47, 7): -1, 3027 | Vector2(47, 8): -1, 3028 | Vector2(47, 9): -1, 3029 | Vector2(47, 10): -1, 3030 | Vector2(47, 11): -1, 3031 | Vector2(47, 12): -1, 3032 | Vector2(47, 13): -1, 3033 | Vector2(47, 14): -1, 3034 | Vector2(47, 15): -1, 3035 | Vector2(47, 16): -1, 3036 | Vector2(47, 17): -1, 3037 | Vector2(47, 18): -1, 3038 | Vector2(47, 19): -1, 3039 | Vector2(47, 20): -1, 3040 | Vector2(47, 21): -1, 3041 | Vector2(47, 22): -1, 3042 | Vector2(47, 23): -1, 3043 | Vector2(47, 24): -1, 3044 | Vector2(47, 25): -1, 3045 | Vector2(47, 26): -1, 3046 | Vector2(47, 27): -1, 3047 | Vector2(47, 28): -1, 3048 | Vector2(47, 29): -1, 3049 | Vector2(47, 30): -1, 3050 | Vector2(47, 31): -1, 3051 | Vector2(47, 32): -1, 3052 | Vector2(47, 33): -1, 3053 | Vector2(47, 34): -1, 3054 | Vector2(47, 35): -1, 3055 | Vector2(47, 36): -1, 3056 | Vector2(47, 37): -1, 3057 | Vector2(47, 38): -1, 3058 | Vector2(47, 39): -1, 3059 | Vector2(47, 40): -1, 3060 | Vector2(47, 41): -1, 3061 | Vector2(47, 42): -1, 3062 | Vector2(47, 43): -1, 3063 | Vector2(47, 44): -1, 3064 | Vector2(47, 45): -1, 3065 | Vector2(47, 46): -1, 3066 | Vector2(47, 47): -1, 3067 | Vector2(47, 48): -1, 3068 | Vector2(47, 49): -1, 3069 | Vector2(47, 50): -1, 3070 | Vector2(47, 51): -1, 3071 | Vector2(47, 52): -1, 3072 | Vector2(47, 53): -1, 3073 | Vector2(47, 54): -1, 3074 | Vector2(47, 55): -1, 3075 | Vector2(47, 56): -1, 3076 | Vector2(47, 57): -1, 3077 | Vector2(47, 58): -1, 3078 | Vector2(47, 59): -1, 3079 | Vector2(47, 60): -1, 3080 | Vector2(47, 61): -1, 3081 | Vector2(47, 62): -1, 3082 | Vector2(47, 63): -1, 3083 | Vector2(48, 0): -1, 3084 | Vector2(48, 1): -1, 3085 | Vector2(48, 2): -1, 3086 | Vector2(48, 3): -1, 3087 | Vector2(48, 4): -1, 3088 | Vector2(48, 5): -1, 3089 | Vector2(48, 6): -1, 3090 | Vector2(48, 7): -1, 3091 | Vector2(48, 8): -1, 3092 | Vector2(48, 9): -1, 3093 | Vector2(48, 10): -1, 3094 | Vector2(48, 11): -1, 3095 | Vector2(48, 12): -1, 3096 | Vector2(48, 13): -1, 3097 | Vector2(48, 14): -1, 3098 | Vector2(48, 15): -1, 3099 | Vector2(48, 16): -1, 3100 | Vector2(48, 17): -1, 3101 | Vector2(48, 18): -1, 3102 | Vector2(48, 19): -1, 3103 | Vector2(48, 20): -1, 3104 | Vector2(48, 21): -1, 3105 | Vector2(48, 22): -1, 3106 | Vector2(48, 23): -1, 3107 | Vector2(48, 24): -1, 3108 | Vector2(48, 25): -1, 3109 | Vector2(48, 26): -1, 3110 | Vector2(48, 27): -1, 3111 | Vector2(48, 28): -1, 3112 | Vector2(48, 29): -1, 3113 | Vector2(48, 30): -1, 3114 | Vector2(48, 31): -1, 3115 | Vector2(48, 32): -1, 3116 | Vector2(48, 33): -1, 3117 | Vector2(48, 34): -1, 3118 | Vector2(48, 35): -1, 3119 | Vector2(48, 36): -1, 3120 | Vector2(48, 37): -1, 3121 | Vector2(48, 38): -1, 3122 | Vector2(48, 39): -1, 3123 | Vector2(48, 40): -1, 3124 | Vector2(48, 41): -1, 3125 | Vector2(48, 42): -1, 3126 | Vector2(48, 43): -1, 3127 | Vector2(48, 44): -1, 3128 | Vector2(48, 45): -1, 3129 | Vector2(48, 46): -1, 3130 | Vector2(48, 47): -1, 3131 | Vector2(48, 48): -1, 3132 | Vector2(48, 49): -1, 3133 | Vector2(48, 50): -1, 3134 | Vector2(48, 51): -1, 3135 | Vector2(48, 52): -1, 3136 | Vector2(48, 53): -1, 3137 | Vector2(48, 54): -1, 3138 | Vector2(48, 55): -1, 3139 | Vector2(48, 56): -1, 3140 | Vector2(48, 57): -1, 3141 | Vector2(48, 58): -1, 3142 | Vector2(48, 59): -1, 3143 | Vector2(48, 60): -1, 3144 | Vector2(48, 61): -1, 3145 | Vector2(48, 62): -1, 3146 | Vector2(48, 63): -1, 3147 | Vector2(49, 0): -1, 3148 | Vector2(49, 1): -1, 3149 | Vector2(49, 2): -1, 3150 | Vector2(49, 3): -1, 3151 | Vector2(49, 4): -1, 3152 | Vector2(49, 5): -1, 3153 | Vector2(49, 6): -1, 3154 | Vector2(49, 7): -1, 3155 | Vector2(49, 8): -1, 3156 | Vector2(49, 9): -1, 3157 | Vector2(49, 10): -1, 3158 | Vector2(49, 11): -1, 3159 | Vector2(49, 12): -1, 3160 | Vector2(49, 13): -1, 3161 | Vector2(49, 14): -1, 3162 | Vector2(49, 15): -1, 3163 | Vector2(49, 16): -1, 3164 | Vector2(49, 17): -1, 3165 | Vector2(49, 18): -1, 3166 | Vector2(49, 19): -1, 3167 | Vector2(49, 20): -1, 3168 | Vector2(49, 21): -1, 3169 | Vector2(49, 22): -1, 3170 | Vector2(49, 23): -1, 3171 | Vector2(49, 24): -1, 3172 | Vector2(49, 25): -1, 3173 | Vector2(49, 26): -1, 3174 | Vector2(49, 27): -1, 3175 | Vector2(49, 28): -1, 3176 | Vector2(49, 29): -1, 3177 | Vector2(49, 30): -1, 3178 | Vector2(49, 31): -1, 3179 | Vector2(49, 32): -1, 3180 | Vector2(49, 33): -1, 3181 | Vector2(49, 34): -1, 3182 | Vector2(49, 35): -1, 3183 | Vector2(49, 36): -1, 3184 | Vector2(49, 37): -1, 3185 | Vector2(49, 38): -1, 3186 | Vector2(49, 39): -1, 3187 | Vector2(49, 40): -1, 3188 | Vector2(49, 41): -1, 3189 | Vector2(49, 42): -1, 3190 | Vector2(49, 43): -1, 3191 | Vector2(49, 44): -1, 3192 | Vector2(49, 45): -1, 3193 | Vector2(49, 46): -1, 3194 | Vector2(49, 47): -1, 3195 | Vector2(49, 48): -1, 3196 | Vector2(49, 49): -1, 3197 | Vector2(49, 50): -1, 3198 | Vector2(49, 51): -1, 3199 | Vector2(49, 52): -1, 3200 | Vector2(49, 53): -1, 3201 | Vector2(49, 54): -1, 3202 | Vector2(49, 55): -1, 3203 | Vector2(49, 56): -1, 3204 | Vector2(49, 57): -1, 3205 | Vector2(49, 58): -1, 3206 | Vector2(49, 59): -1, 3207 | Vector2(49, 60): -1, 3208 | Vector2(49, 61): -1, 3209 | Vector2(49, 62): -1, 3210 | Vector2(49, 63): -1, 3211 | Vector2(50, 0): -1, 3212 | Vector2(50, 1): -1, 3213 | Vector2(50, 2): -1, 3214 | Vector2(50, 3): -1, 3215 | Vector2(50, 4): -1, 3216 | Vector2(50, 5): -1, 3217 | Vector2(50, 6): -1, 3218 | Vector2(50, 7): -1, 3219 | Vector2(50, 8): -1, 3220 | Vector2(50, 9): -1, 3221 | Vector2(50, 10): -1, 3222 | Vector2(50, 11): -1, 3223 | Vector2(50, 12): -1, 3224 | Vector2(50, 13): -1, 3225 | Vector2(50, 14): -1, 3226 | Vector2(50, 15): -1, 3227 | Vector2(50, 16): -1, 3228 | Vector2(50, 17): -1, 3229 | Vector2(50, 18): -1, 3230 | Vector2(50, 19): -1, 3231 | Vector2(50, 20): -1, 3232 | Vector2(50, 21): -1, 3233 | Vector2(50, 22): -1, 3234 | Vector2(50, 23): -1, 3235 | Vector2(50, 24): -1, 3236 | Vector2(50, 25): -1, 3237 | Vector2(50, 26): -1, 3238 | Vector2(50, 27): -1, 3239 | Vector2(50, 28): -1, 3240 | Vector2(50, 29): -1, 3241 | Vector2(50, 30): -1, 3242 | Vector2(50, 31): -1, 3243 | Vector2(50, 32): -1, 3244 | Vector2(50, 33): -1, 3245 | Vector2(50, 34): -1, 3246 | Vector2(50, 35): -1, 3247 | Vector2(50, 36): -1, 3248 | Vector2(50, 37): -1, 3249 | Vector2(50, 38): -1, 3250 | Vector2(50, 39): -1, 3251 | Vector2(50, 40): -1, 3252 | Vector2(50, 41): -1, 3253 | Vector2(50, 42): -1, 3254 | Vector2(50, 43): -1, 3255 | Vector2(50, 44): -1, 3256 | Vector2(50, 45): -1, 3257 | Vector2(50, 46): -1, 3258 | Vector2(50, 47): -1, 3259 | Vector2(50, 48): -1, 3260 | Vector2(50, 49): -1, 3261 | Vector2(50, 50): -1, 3262 | Vector2(50, 51): -1, 3263 | Vector2(50, 52): -1, 3264 | Vector2(50, 53): -1, 3265 | Vector2(50, 54): -1, 3266 | Vector2(50, 55): -1, 3267 | Vector2(50, 56): -1, 3268 | Vector2(50, 57): -1, 3269 | Vector2(50, 58): -1, 3270 | Vector2(50, 59): -1, 3271 | Vector2(50, 60): -1, 3272 | Vector2(50, 61): -1, 3273 | Vector2(50, 62): -1, 3274 | Vector2(50, 63): -1, 3275 | Vector2(51, 0): -1, 3276 | Vector2(51, 1): -1, 3277 | Vector2(51, 2): -1, 3278 | Vector2(51, 3): -1, 3279 | Vector2(51, 4): -1, 3280 | Vector2(51, 5): -1, 3281 | Vector2(51, 6): -1, 3282 | Vector2(51, 7): -1, 3283 | Vector2(51, 8): -1, 3284 | Vector2(51, 9): -1, 3285 | Vector2(51, 10): -1, 3286 | Vector2(51, 11): -1, 3287 | Vector2(51, 12): -1, 3288 | Vector2(51, 13): -1, 3289 | Vector2(51, 14): -1, 3290 | Vector2(51, 15): -1, 3291 | Vector2(51, 16): -1, 3292 | Vector2(51, 17): -1, 3293 | Vector2(51, 18): -1, 3294 | Vector2(51, 19): -1, 3295 | Vector2(51, 20): -1, 3296 | Vector2(51, 21): -1, 3297 | Vector2(51, 22): -1, 3298 | Vector2(51, 23): -1, 3299 | Vector2(51, 24): -1, 3300 | Vector2(51, 25): -1, 3301 | Vector2(51, 26): -1, 3302 | Vector2(51, 27): -1, 3303 | Vector2(51, 28): -1, 3304 | Vector2(51, 29): -1, 3305 | Vector2(51, 30): -1, 3306 | Vector2(51, 31): -1, 3307 | Vector2(51, 32): -1, 3308 | Vector2(51, 33): -1, 3309 | Vector2(51, 34): -1, 3310 | Vector2(51, 35): -1, 3311 | Vector2(51, 36): -1, 3312 | Vector2(51, 37): -1, 3313 | Vector2(51, 38): -1, 3314 | Vector2(51, 39): -1, 3315 | Vector2(51, 40): -1, 3316 | Vector2(51, 41): -1, 3317 | Vector2(51, 42): -1, 3318 | Vector2(51, 43): -1, 3319 | Vector2(51, 44): -1, 3320 | Vector2(51, 45): -1, 3321 | Vector2(51, 46): -1, 3322 | Vector2(51, 47): -1, 3323 | Vector2(51, 48): -1, 3324 | Vector2(51, 49): -1, 3325 | Vector2(51, 50): -1, 3326 | Vector2(51, 51): -1, 3327 | Vector2(51, 52): -1, 3328 | Vector2(51, 53): -1, 3329 | Vector2(51, 54): -1, 3330 | Vector2(51, 55): -1, 3331 | Vector2(51, 56): -1, 3332 | Vector2(51, 57): -1, 3333 | Vector2(51, 58): -1, 3334 | Vector2(51, 59): -1, 3335 | Vector2(51, 60): -1, 3336 | Vector2(51, 61): -1, 3337 | Vector2(51, 62): -1, 3338 | Vector2(51, 63): -1, 3339 | Vector2(52, 0): -1, 3340 | Vector2(52, 1): -1, 3341 | Vector2(52, 2): -1, 3342 | Vector2(52, 3): -1, 3343 | Vector2(52, 4): -1, 3344 | Vector2(52, 5): -1, 3345 | Vector2(52, 6): -1, 3346 | Vector2(52, 7): -1, 3347 | Vector2(52, 8): -1, 3348 | Vector2(52, 9): -1, 3349 | Vector2(52, 10): -1, 3350 | Vector2(52, 11): -1, 3351 | Vector2(52, 12): -1, 3352 | Vector2(52, 13): -1, 3353 | Vector2(52, 14): -1, 3354 | Vector2(52, 15): -1, 3355 | Vector2(52, 16): -1, 3356 | Vector2(52, 17): -1, 3357 | Vector2(52, 18): -1, 3358 | Vector2(52, 19): -1, 3359 | Vector2(52, 20): -1, 3360 | Vector2(52, 21): -1, 3361 | Vector2(52, 22): -1, 3362 | Vector2(52, 23): -1, 3363 | Vector2(52, 24): -1, 3364 | Vector2(52, 25): -1, 3365 | Vector2(52, 26): -1, 3366 | Vector2(52, 27): -1, 3367 | Vector2(52, 28): -1, 3368 | Vector2(52, 29): -1, 3369 | Vector2(52, 30): -1, 3370 | Vector2(52, 31): -1, 3371 | Vector2(52, 32): -1, 3372 | Vector2(52, 33): -1, 3373 | Vector2(52, 34): -1, 3374 | Vector2(52, 35): -1, 3375 | Vector2(52, 36): -1, 3376 | Vector2(52, 37): -1, 3377 | Vector2(52, 38): -1, 3378 | Vector2(52, 39): -1, 3379 | Vector2(52, 40): -1, 3380 | Vector2(52, 41): -1, 3381 | Vector2(52, 42): -1, 3382 | Vector2(52, 43): -1, 3383 | Vector2(52, 44): -1, 3384 | Vector2(52, 45): -1, 3385 | Vector2(52, 46): -1, 3386 | Vector2(52, 47): -1, 3387 | Vector2(52, 48): -1, 3388 | Vector2(52, 49): -1, 3389 | Vector2(52, 50): -1, 3390 | Vector2(52, 51): -1, 3391 | Vector2(52, 52): -1, 3392 | Vector2(52, 53): -1, 3393 | Vector2(52, 54): -1, 3394 | Vector2(52, 55): -1, 3395 | Vector2(52, 56): -1, 3396 | Vector2(52, 57): -1, 3397 | Vector2(52, 58): -1, 3398 | Vector2(52, 59): -1, 3399 | Vector2(52, 60): -1, 3400 | Vector2(52, 61): -1, 3401 | Vector2(52, 62): -1, 3402 | Vector2(52, 63): -1, 3403 | Vector2(53, 0): -1, 3404 | Vector2(53, 1): -1, 3405 | Vector2(53, 2): -1, 3406 | Vector2(53, 3): -1, 3407 | Vector2(53, 4): -1, 3408 | Vector2(53, 5): -1, 3409 | Vector2(53, 6): -1, 3410 | Vector2(53, 7): -1, 3411 | Vector2(53, 8): -1, 3412 | Vector2(53, 9): -1, 3413 | Vector2(53, 10): -1, 3414 | Vector2(53, 11): -1, 3415 | Vector2(53, 12): -1, 3416 | Vector2(53, 13): -1, 3417 | Vector2(53, 14): -1, 3418 | Vector2(53, 15): -1, 3419 | Vector2(53, 16): -1, 3420 | Vector2(53, 17): -1, 3421 | Vector2(53, 18): -1, 3422 | Vector2(53, 19): -1, 3423 | Vector2(53, 20): -1, 3424 | Vector2(53, 21): -1, 3425 | Vector2(53, 22): -1, 3426 | Vector2(53, 23): -1, 3427 | Vector2(53, 24): -1, 3428 | Vector2(53, 25): -1, 3429 | Vector2(53, 26): -1, 3430 | Vector2(53, 27): -1, 3431 | Vector2(53, 28): -1, 3432 | Vector2(53, 29): -1, 3433 | Vector2(53, 30): -1, 3434 | Vector2(53, 31): -1, 3435 | Vector2(53, 32): -1, 3436 | Vector2(53, 33): -1, 3437 | Vector2(53, 34): -1, 3438 | Vector2(53, 35): -1, 3439 | Vector2(53, 36): -1, 3440 | Vector2(53, 37): -1, 3441 | Vector2(53, 38): -1, 3442 | Vector2(53, 39): -1, 3443 | Vector2(53, 40): -1, 3444 | Vector2(53, 41): -1, 3445 | Vector2(53, 42): -1, 3446 | Vector2(53, 43): -1, 3447 | Vector2(53, 44): -1, 3448 | Vector2(53, 45): -1, 3449 | Vector2(53, 46): -1, 3450 | Vector2(53, 47): -1, 3451 | Vector2(53, 48): -1, 3452 | Vector2(53, 49): -1, 3453 | Vector2(53, 50): -1, 3454 | Vector2(53, 51): -1, 3455 | Vector2(53, 52): -1, 3456 | Vector2(53, 53): -1, 3457 | Vector2(53, 54): -1, 3458 | Vector2(53, 55): -1, 3459 | Vector2(53, 56): -1, 3460 | Vector2(53, 57): -1, 3461 | Vector2(53, 58): -1, 3462 | Vector2(53, 59): -1, 3463 | Vector2(53, 60): -1, 3464 | Vector2(53, 61): -1, 3465 | Vector2(53, 62): -1, 3466 | Vector2(53, 63): -1, 3467 | Vector2(54, 0): -1, 3468 | Vector2(54, 1): -1, 3469 | Vector2(54, 2): -1, 3470 | Vector2(54, 3): -1, 3471 | Vector2(54, 4): -1, 3472 | Vector2(54, 5): -1, 3473 | Vector2(54, 6): -1, 3474 | Vector2(54, 7): -1, 3475 | Vector2(54, 8): -1, 3476 | Vector2(54, 9): -1, 3477 | Vector2(54, 10): -1, 3478 | Vector2(54, 11): -1, 3479 | Vector2(54, 12): -1, 3480 | Vector2(54, 13): -1, 3481 | Vector2(54, 14): -1, 3482 | Vector2(54, 15): -1, 3483 | Vector2(54, 16): -1, 3484 | Vector2(54, 17): -1, 3485 | Vector2(54, 18): -1, 3486 | Vector2(54, 19): -1, 3487 | Vector2(54, 20): -1, 3488 | Vector2(54, 21): -1, 3489 | Vector2(54, 22): -1, 3490 | Vector2(54, 23): -1, 3491 | Vector2(54, 24): -1, 3492 | Vector2(54, 25): -1, 3493 | Vector2(54, 26): -1, 3494 | Vector2(54, 27): -1, 3495 | Vector2(54, 28): -1, 3496 | Vector2(54, 29): -1, 3497 | Vector2(54, 30): -1, 3498 | Vector2(54, 31): -1, 3499 | Vector2(54, 32): -1, 3500 | Vector2(54, 33): -1, 3501 | Vector2(54, 34): -1, 3502 | Vector2(54, 35): -1, 3503 | Vector2(54, 36): -1, 3504 | Vector2(54, 37): -1, 3505 | Vector2(54, 38): -1, 3506 | Vector2(54, 39): -1, 3507 | Vector2(54, 40): -1, 3508 | Vector2(54, 41): -1, 3509 | Vector2(54, 42): -1, 3510 | Vector2(54, 43): -1, 3511 | Vector2(54, 44): -1, 3512 | Vector2(54, 45): -1, 3513 | Vector2(54, 46): -1, 3514 | Vector2(54, 47): -1, 3515 | Vector2(54, 48): -1, 3516 | Vector2(54, 49): -1, 3517 | Vector2(54, 50): -1, 3518 | Vector2(54, 51): -1, 3519 | Vector2(54, 52): -1, 3520 | Vector2(54, 53): -1, 3521 | Vector2(54, 54): -1, 3522 | Vector2(54, 55): -1, 3523 | Vector2(54, 56): -1, 3524 | Vector2(54, 57): -1, 3525 | Vector2(54, 58): -1, 3526 | Vector2(54, 59): -1, 3527 | Vector2(54, 60): -1, 3528 | Vector2(54, 61): -1, 3529 | Vector2(54, 62): -1, 3530 | Vector2(54, 63): -1, 3531 | Vector2(55, 0): -1, 3532 | Vector2(55, 1): -1, 3533 | Vector2(55, 2): -1, 3534 | Vector2(55, 3): -1, 3535 | Vector2(55, 4): -1, 3536 | Vector2(55, 5): -1, 3537 | Vector2(55, 6): -1, 3538 | Vector2(55, 7): -1, 3539 | Vector2(55, 8): -1, 3540 | Vector2(55, 9): -1, 3541 | Vector2(55, 10): -1, 3542 | Vector2(55, 11): -1, 3543 | Vector2(55, 12): -1, 3544 | Vector2(55, 13): -1, 3545 | Vector2(55, 14): -1, 3546 | Vector2(55, 15): -1, 3547 | Vector2(55, 16): -1, 3548 | Vector2(55, 17): -1, 3549 | Vector2(55, 18): -1, 3550 | Vector2(55, 19): -1, 3551 | Vector2(55, 20): -1, 3552 | Vector2(55, 21): -1, 3553 | Vector2(55, 22): -1, 3554 | Vector2(55, 23): -1, 3555 | Vector2(55, 24): -1, 3556 | Vector2(55, 25): -1, 3557 | Vector2(55, 26): -1, 3558 | Vector2(55, 27): -1, 3559 | Vector2(55, 28): -1, 3560 | Vector2(55, 29): -1, 3561 | Vector2(55, 30): -1, 3562 | Vector2(55, 31): -1, 3563 | Vector2(55, 32): -1, 3564 | Vector2(55, 33): -1, 3565 | Vector2(55, 34): -1, 3566 | Vector2(55, 35): -1, 3567 | Vector2(55, 36): -1, 3568 | Vector2(55, 37): -1, 3569 | Vector2(55, 38): -1, 3570 | Vector2(55, 39): -1, 3571 | Vector2(55, 40): -1, 3572 | Vector2(55, 41): -1, 3573 | Vector2(55, 42): -1, 3574 | Vector2(55, 43): -1, 3575 | Vector2(55, 44): -1, 3576 | Vector2(55, 45): -1, 3577 | Vector2(55, 46): -1, 3578 | Vector2(55, 47): -1, 3579 | Vector2(55, 48): -1, 3580 | Vector2(55, 49): -1, 3581 | Vector2(55, 50): -1, 3582 | Vector2(55, 51): -1, 3583 | Vector2(55, 52): -1, 3584 | Vector2(55, 53): -1, 3585 | Vector2(55, 54): -1, 3586 | Vector2(55, 55): -1, 3587 | Vector2(55, 56): -1, 3588 | Vector2(55, 57): -1, 3589 | Vector2(55, 58): -1, 3590 | Vector2(55, 59): -1, 3591 | Vector2(55, 60): -1, 3592 | Vector2(55, 61): -1, 3593 | Vector2(55, 62): -1, 3594 | Vector2(55, 63): -1, 3595 | Vector2(56, 0): -1, 3596 | Vector2(56, 1): -1, 3597 | Vector2(56, 2): -1, 3598 | Vector2(56, 3): -1, 3599 | Vector2(56, 4): -1, 3600 | Vector2(56, 5): -1, 3601 | Vector2(56, 6): -1, 3602 | Vector2(56, 7): -1, 3603 | Vector2(56, 8): -1, 3604 | Vector2(56, 9): -1, 3605 | Vector2(56, 10): -1, 3606 | Vector2(56, 11): -1, 3607 | Vector2(56, 12): -1, 3608 | Vector2(56, 13): -1, 3609 | Vector2(56, 14): -1, 3610 | Vector2(56, 15): -1, 3611 | Vector2(56, 16): -1, 3612 | Vector2(56, 17): -1, 3613 | Vector2(56, 18): -1, 3614 | Vector2(56, 19): -1, 3615 | Vector2(56, 20): -1, 3616 | Vector2(56, 21): -1, 3617 | Vector2(56, 22): -1, 3618 | Vector2(56, 23): -1, 3619 | Vector2(56, 24): -1, 3620 | Vector2(56, 25): -1, 3621 | Vector2(56, 26): -1, 3622 | Vector2(56, 27): -1, 3623 | Vector2(56, 28): -1, 3624 | Vector2(56, 29): -1, 3625 | Vector2(56, 30): -1, 3626 | Vector2(56, 31): -1, 3627 | Vector2(56, 32): -1, 3628 | Vector2(56, 33): -1, 3629 | Vector2(56, 34): -1, 3630 | Vector2(56, 35): -1, 3631 | Vector2(56, 36): -1, 3632 | Vector2(56, 37): -1, 3633 | Vector2(56, 38): -1, 3634 | Vector2(56, 39): -1, 3635 | Vector2(56, 40): -1, 3636 | Vector2(56, 41): -1, 3637 | Vector2(56, 42): -1, 3638 | Vector2(56, 43): -1, 3639 | Vector2(56, 44): -1, 3640 | Vector2(56, 45): -1, 3641 | Vector2(56, 46): -1, 3642 | Vector2(56, 47): -1, 3643 | Vector2(56, 48): -1, 3644 | Vector2(56, 49): -1, 3645 | Vector2(56, 50): -1, 3646 | Vector2(56, 51): -1, 3647 | Vector2(56, 52): -1, 3648 | Vector2(56, 53): -1, 3649 | Vector2(56, 54): -1, 3650 | Vector2(56, 55): -1, 3651 | Vector2(56, 56): -1, 3652 | Vector2(56, 57): -1, 3653 | Vector2(56, 58): -1, 3654 | Vector2(56, 59): -1, 3655 | Vector2(56, 60): -1, 3656 | Vector2(56, 61): -1, 3657 | Vector2(56, 62): -1, 3658 | Vector2(56, 63): -1, 3659 | Vector2(57, 0): -1, 3660 | Vector2(57, 1): -1, 3661 | Vector2(57, 2): -1, 3662 | Vector2(57, 3): -1, 3663 | Vector2(57, 4): -1, 3664 | Vector2(57, 5): -1, 3665 | Vector2(57, 6): -1, 3666 | Vector2(57, 7): -1, 3667 | Vector2(57, 8): -1, 3668 | Vector2(57, 9): -1, 3669 | Vector2(57, 10): -1, 3670 | Vector2(57, 11): -1, 3671 | Vector2(57, 12): -1, 3672 | Vector2(57, 13): -1, 3673 | Vector2(57, 14): -1, 3674 | Vector2(57, 15): -1, 3675 | Vector2(57, 16): -1, 3676 | Vector2(57, 17): -1, 3677 | Vector2(57, 18): -1, 3678 | Vector2(57, 19): -1, 3679 | Vector2(57, 20): -1, 3680 | Vector2(57, 21): -1, 3681 | Vector2(57, 22): -1, 3682 | Vector2(57, 23): -1, 3683 | Vector2(57, 24): -1, 3684 | Vector2(57, 25): -1, 3685 | Vector2(57, 26): -1, 3686 | Vector2(57, 27): -1, 3687 | Vector2(57, 28): -1, 3688 | Vector2(57, 29): -1, 3689 | Vector2(57, 30): -1, 3690 | Vector2(57, 31): -1, 3691 | Vector2(57, 32): -1, 3692 | Vector2(57, 33): -1, 3693 | Vector2(57, 34): -1, 3694 | Vector2(57, 35): -1, 3695 | Vector2(57, 36): -1, 3696 | Vector2(57, 37): -1, 3697 | Vector2(57, 38): -1, 3698 | Vector2(57, 39): -1, 3699 | Vector2(57, 40): -1, 3700 | Vector2(57, 41): -1, 3701 | Vector2(57, 42): -1, 3702 | Vector2(57, 43): -1, 3703 | Vector2(57, 44): -1, 3704 | Vector2(57, 45): -1, 3705 | Vector2(57, 46): -1, 3706 | Vector2(57, 47): -1, 3707 | Vector2(57, 48): -1, 3708 | Vector2(57, 49): -1, 3709 | Vector2(57, 50): -1, 3710 | Vector2(57, 51): -1, 3711 | Vector2(57, 52): -1, 3712 | Vector2(57, 53): -1, 3713 | Vector2(57, 54): -1, 3714 | Vector2(57, 55): -1, 3715 | Vector2(57, 56): -1, 3716 | Vector2(57, 57): -1, 3717 | Vector2(57, 58): -1, 3718 | Vector2(57, 59): -1, 3719 | Vector2(57, 60): -1, 3720 | Vector2(57, 61): -1, 3721 | Vector2(57, 62): -1, 3722 | Vector2(57, 63): -1, 3723 | Vector2(58, 0): -1, 3724 | Vector2(58, 1): -1, 3725 | Vector2(58, 2): -1, 3726 | Vector2(58, 3): -1, 3727 | Vector2(58, 4): -1, 3728 | Vector2(58, 5): -1, 3729 | Vector2(58, 6): -1, 3730 | Vector2(58, 7): -1, 3731 | Vector2(58, 8): -1, 3732 | Vector2(58, 9): -1, 3733 | Vector2(58, 10): -1, 3734 | Vector2(58, 11): -1, 3735 | Vector2(58, 12): -1, 3736 | Vector2(58, 13): -1, 3737 | Vector2(58, 14): -1, 3738 | Vector2(58, 15): -1, 3739 | Vector2(58, 16): -1, 3740 | Vector2(58, 17): -1, 3741 | Vector2(58, 18): -1, 3742 | Vector2(58, 19): -1, 3743 | Vector2(58, 20): -1, 3744 | Vector2(58, 21): -1, 3745 | Vector2(58, 22): -1, 3746 | Vector2(58, 23): -1, 3747 | Vector2(58, 24): -1, 3748 | Vector2(58, 25): -1, 3749 | Vector2(58, 26): -1, 3750 | Vector2(58, 27): -1, 3751 | Vector2(58, 28): -1, 3752 | Vector2(58, 29): -1, 3753 | Vector2(58, 30): -1, 3754 | Vector2(58, 31): -1, 3755 | Vector2(58, 32): -1, 3756 | Vector2(58, 33): -1, 3757 | Vector2(58, 34): -1, 3758 | Vector2(58, 35): -1, 3759 | Vector2(58, 36): -1, 3760 | Vector2(58, 37): -1, 3761 | Vector2(58, 38): -1, 3762 | Vector2(58, 39): -1, 3763 | Vector2(58, 40): -1, 3764 | Vector2(58, 41): -1, 3765 | Vector2(58, 42): -1, 3766 | Vector2(58, 43): -1, 3767 | Vector2(58, 44): -1, 3768 | Vector2(58, 45): -1, 3769 | Vector2(58, 46): -1, 3770 | Vector2(58, 47): -1, 3771 | Vector2(58, 48): -1, 3772 | Vector2(58, 49): -1, 3773 | Vector2(58, 50): -1, 3774 | Vector2(58, 51): -1, 3775 | Vector2(58, 52): -1, 3776 | Vector2(58, 53): -1, 3777 | Vector2(58, 54): -1, 3778 | Vector2(58, 55): -1, 3779 | Vector2(58, 56): -1, 3780 | Vector2(58, 57): -1, 3781 | Vector2(58, 58): -1, 3782 | Vector2(58, 59): -1, 3783 | Vector2(58, 60): -1, 3784 | Vector2(58, 61): -1, 3785 | Vector2(58, 62): -1, 3786 | Vector2(58, 63): -1, 3787 | Vector2(59, 0): -1, 3788 | Vector2(59, 1): -1, 3789 | Vector2(59, 2): -1, 3790 | Vector2(59, 3): -1, 3791 | Vector2(59, 4): -1, 3792 | Vector2(59, 5): -1, 3793 | Vector2(59, 6): -1, 3794 | Vector2(59, 7): -1, 3795 | Vector2(59, 8): -1, 3796 | Vector2(59, 9): -1, 3797 | Vector2(59, 10): -1, 3798 | Vector2(59, 11): -1, 3799 | Vector2(59, 12): -1, 3800 | Vector2(59, 13): -1, 3801 | Vector2(59, 14): -1, 3802 | Vector2(59, 15): -1, 3803 | Vector2(59, 16): -1, 3804 | Vector2(59, 17): -1, 3805 | Vector2(59, 18): -1, 3806 | Vector2(59, 19): -1, 3807 | Vector2(59, 20): -1, 3808 | Vector2(59, 21): -1, 3809 | Vector2(59, 22): -1, 3810 | Vector2(59, 23): -1, 3811 | Vector2(59, 24): -1, 3812 | Vector2(59, 25): -1, 3813 | Vector2(59, 26): -1, 3814 | Vector2(59, 27): -1, 3815 | Vector2(59, 28): -1, 3816 | Vector2(59, 29): -1, 3817 | Vector2(59, 30): -1, 3818 | Vector2(59, 31): -1, 3819 | Vector2(59, 32): -1, 3820 | Vector2(59, 33): -1, 3821 | Vector2(59, 34): -1, 3822 | Vector2(59, 35): -1, 3823 | Vector2(59, 36): -1, 3824 | Vector2(59, 37): -1, 3825 | Vector2(59, 38): -1, 3826 | Vector2(59, 39): -1, 3827 | Vector2(59, 40): -1, 3828 | Vector2(59, 41): -1, 3829 | Vector2(59, 42): -1, 3830 | Vector2(59, 43): -1, 3831 | Vector2(59, 44): -1, 3832 | Vector2(59, 45): -1, 3833 | Vector2(59, 46): -1, 3834 | Vector2(59, 47): -1, 3835 | Vector2(59, 48): -1, 3836 | Vector2(59, 49): -1, 3837 | Vector2(59, 50): -1, 3838 | Vector2(59, 51): -1, 3839 | Vector2(59, 52): -1, 3840 | Vector2(59, 53): -1, 3841 | Vector2(59, 54): -1, 3842 | Vector2(59, 55): -1, 3843 | Vector2(59, 56): -1, 3844 | Vector2(59, 57): -1, 3845 | Vector2(59, 58): -1, 3846 | Vector2(59, 59): -1, 3847 | Vector2(59, 60): -1, 3848 | Vector2(59, 61): -1, 3849 | Vector2(59, 62): -1, 3850 | Vector2(59, 63): -1, 3851 | Vector2(60, 0): -1, 3852 | Vector2(60, 1): -1, 3853 | Vector2(60, 2): -1, 3854 | Vector2(60, 3): -1, 3855 | Vector2(60, 4): -1, 3856 | Vector2(60, 5): -1, 3857 | Vector2(60, 6): -1, 3858 | Vector2(60, 7): -1, 3859 | Vector2(60, 8): -1, 3860 | Vector2(60, 9): -1, 3861 | Vector2(60, 10): -1, 3862 | Vector2(60, 11): -1, 3863 | Vector2(60, 12): -1, 3864 | Vector2(60, 13): -1, 3865 | Vector2(60, 14): -1, 3866 | Vector2(60, 15): -1, 3867 | Vector2(60, 16): -1, 3868 | Vector2(60, 17): -1, 3869 | Vector2(60, 18): -1, 3870 | Vector2(60, 19): -1, 3871 | Vector2(60, 20): -1, 3872 | Vector2(60, 21): -1, 3873 | Vector2(60, 22): -1, 3874 | Vector2(60, 23): -1, 3875 | Vector2(60, 24): -1, 3876 | Vector2(60, 25): -1, 3877 | Vector2(60, 26): -1, 3878 | Vector2(60, 27): -1, 3879 | Vector2(60, 28): -1, 3880 | Vector2(60, 29): -1, 3881 | Vector2(60, 30): -1, 3882 | Vector2(60, 31): -1, 3883 | Vector2(60, 32): -1, 3884 | Vector2(60, 33): -1, 3885 | Vector2(60, 34): -1, 3886 | Vector2(60, 35): -1, 3887 | Vector2(60, 36): -1, 3888 | Vector2(60, 37): -1, 3889 | Vector2(60, 38): -1, 3890 | Vector2(60, 39): -1, 3891 | Vector2(60, 40): -1, 3892 | Vector2(60, 41): -1, 3893 | Vector2(60, 42): -1, 3894 | Vector2(60, 43): -1, 3895 | Vector2(60, 44): -1, 3896 | Vector2(60, 45): -1, 3897 | Vector2(60, 46): -1, 3898 | Vector2(60, 47): -1, 3899 | Vector2(60, 48): -1, 3900 | Vector2(60, 49): -1, 3901 | Vector2(60, 50): -1, 3902 | Vector2(60, 51): -1, 3903 | Vector2(60, 52): -1, 3904 | Vector2(60, 53): -1, 3905 | Vector2(60, 54): -1, 3906 | Vector2(60, 55): -1, 3907 | Vector2(60, 56): -1, 3908 | Vector2(60, 57): -1, 3909 | Vector2(60, 58): -1, 3910 | Vector2(60, 59): -1, 3911 | Vector2(60, 60): -1, 3912 | Vector2(60, 61): -1, 3913 | Vector2(60, 62): -1, 3914 | Vector2(60, 63): -1, 3915 | Vector2(61, 0): -1, 3916 | Vector2(61, 1): -1, 3917 | Vector2(61, 2): -1, 3918 | Vector2(61, 3): -1, 3919 | Vector2(61, 4): -1, 3920 | Vector2(61, 5): -1, 3921 | Vector2(61, 6): -1, 3922 | Vector2(61, 7): -1, 3923 | Vector2(61, 8): -1, 3924 | Vector2(61, 9): -1, 3925 | Vector2(61, 10): -1, 3926 | Vector2(61, 11): -1, 3927 | Vector2(61, 12): -1, 3928 | Vector2(61, 13): -1, 3929 | Vector2(61, 14): -1, 3930 | Vector2(61, 15): -1, 3931 | Vector2(61, 16): -1, 3932 | Vector2(61, 17): -1, 3933 | Vector2(61, 18): -1, 3934 | Vector2(61, 19): -1, 3935 | Vector2(61, 20): -1, 3936 | Vector2(61, 21): -1, 3937 | Vector2(61, 22): -1, 3938 | Vector2(61, 23): -1, 3939 | Vector2(61, 24): -1, 3940 | Vector2(61, 25): -1, 3941 | Vector2(61, 26): -1, 3942 | Vector2(61, 27): -1, 3943 | Vector2(61, 28): -1, 3944 | Vector2(61, 29): -1, 3945 | Vector2(61, 30): -1, 3946 | Vector2(61, 31): -1, 3947 | Vector2(61, 32): -1, 3948 | Vector2(61, 33): -1, 3949 | Vector2(61, 34): -1, 3950 | Vector2(61, 35): -1, 3951 | Vector2(61, 36): -1, 3952 | Vector2(61, 37): -1, 3953 | Vector2(61, 38): -1, 3954 | Vector2(61, 39): -1, 3955 | Vector2(61, 40): -1, 3956 | Vector2(61, 41): -1, 3957 | Vector2(61, 42): -1, 3958 | Vector2(61, 43): -1, 3959 | Vector2(61, 44): -1, 3960 | Vector2(61, 45): -1, 3961 | Vector2(61, 46): -1, 3962 | Vector2(61, 47): -1, 3963 | Vector2(61, 48): -1, 3964 | Vector2(61, 49): -1, 3965 | Vector2(61, 50): -1, 3966 | Vector2(61, 51): -1, 3967 | Vector2(61, 52): -1, 3968 | Vector2(61, 53): -1, 3969 | Vector2(61, 54): -1, 3970 | Vector2(61, 55): -1, 3971 | Vector2(61, 56): -1, 3972 | Vector2(61, 57): -1, 3973 | Vector2(61, 58): -1, 3974 | Vector2(61, 59): -1, 3975 | Vector2(61, 60): -1, 3976 | Vector2(61, 61): -1, 3977 | Vector2(61, 62): -1, 3978 | Vector2(61, 63): -1, 3979 | Vector2(62, 0): -1, 3980 | Vector2(62, 1): -1, 3981 | Vector2(62, 2): -1, 3982 | Vector2(62, 3): -1, 3983 | Vector2(62, 4): -1, 3984 | Vector2(62, 5): -1, 3985 | Vector2(62, 6): -1, 3986 | Vector2(62, 7): -1, 3987 | Vector2(62, 8): -1, 3988 | Vector2(62, 9): -1, 3989 | Vector2(62, 10): -1, 3990 | Vector2(62, 11): -1, 3991 | Vector2(62, 12): -1, 3992 | Vector2(62, 13): -1, 3993 | Vector2(62, 14): -1, 3994 | Vector2(62, 15): -1, 3995 | Vector2(62, 16): -1, 3996 | Vector2(62, 17): -1, 3997 | Vector2(62, 18): -1, 3998 | Vector2(62, 19): -1, 3999 | Vector2(62, 20): -1, 4000 | Vector2(62, 21): -1, 4001 | Vector2(62, 22): -1, 4002 | Vector2(62, 23): -1, 4003 | Vector2(62, 24): -1, 4004 | Vector2(62, 25): -1, 4005 | Vector2(62, 26): -1, 4006 | Vector2(62, 27): -1, 4007 | Vector2(62, 28): -1, 4008 | Vector2(62, 29): -1, 4009 | Vector2(62, 30): -1, 4010 | Vector2(62, 31): -1, 4011 | Vector2(62, 32): -1, 4012 | Vector2(62, 33): -1, 4013 | Vector2(62, 34): -1, 4014 | Vector2(62, 35): -1, 4015 | Vector2(62, 36): -1, 4016 | Vector2(62, 37): -1, 4017 | Vector2(62, 38): -1, 4018 | Vector2(62, 39): -1, 4019 | Vector2(62, 40): -1, 4020 | Vector2(62, 41): -1, 4021 | Vector2(62, 42): -1, 4022 | Vector2(62, 43): -1, 4023 | Vector2(62, 44): -1, 4024 | Vector2(62, 45): -1, 4025 | Vector2(62, 46): -1, 4026 | Vector2(62, 47): -1, 4027 | Vector2(62, 48): -1, 4028 | Vector2(62, 49): -1, 4029 | Vector2(62, 50): -1, 4030 | Vector2(62, 51): -1, 4031 | Vector2(62, 52): -1, 4032 | Vector2(62, 53): -1, 4033 | Vector2(62, 54): -1, 4034 | Vector2(62, 55): -1, 4035 | Vector2(62, 56): -1, 4036 | Vector2(62, 57): -1, 4037 | Vector2(62, 58): -1, 4038 | Vector2(62, 59): -1, 4039 | Vector2(62, 60): -1, 4040 | Vector2(62, 61): -1, 4041 | Vector2(62, 62): -1, 4042 | Vector2(62, 63): -1, 4043 | Vector2(63, 0): -1, 4044 | Vector2(63, 1): -1, 4045 | Vector2(63, 2): -1, 4046 | Vector2(63, 3): -1, 4047 | Vector2(63, 4): -1, 4048 | Vector2(63, 5): -1, 4049 | Vector2(63, 6): -1, 4050 | Vector2(63, 7): -1, 4051 | Vector2(63, 8): -1, 4052 | Vector2(63, 9): -1, 4053 | Vector2(63, 10): -1, 4054 | Vector2(63, 11): -1, 4055 | Vector2(63, 12): -1, 4056 | Vector2(63, 13): -1, 4057 | Vector2(63, 14): -1, 4058 | Vector2(63, 15): -1, 4059 | Vector2(63, 16): -1, 4060 | Vector2(63, 17): -1, 4061 | Vector2(63, 18): -1, 4062 | Vector2(63, 19): -1, 4063 | Vector2(63, 20): -1, 4064 | Vector2(63, 21): -1, 4065 | Vector2(63, 22): -1, 4066 | Vector2(63, 23): -1, 4067 | Vector2(63, 24): -1, 4068 | Vector2(63, 25): -1, 4069 | Vector2(63, 26): -1, 4070 | Vector2(63, 27): -1, 4071 | Vector2(63, 28): -1, 4072 | Vector2(63, 29): -1, 4073 | Vector2(63, 30): -1, 4074 | Vector2(63, 31): -1, 4075 | Vector2(63, 32): -1, 4076 | Vector2(63, 33): -1, 4077 | Vector2(63, 34): -1, 4078 | Vector2(63, 35): -1, 4079 | Vector2(63, 36): -1, 4080 | Vector2(63, 37): -1, 4081 | Vector2(63, 38): -1, 4082 | Vector2(63, 39): -1, 4083 | Vector2(63, 40): -1, 4084 | Vector2(63, 41): -1, 4085 | Vector2(63, 42): -1, 4086 | Vector2(63, 43): -1, 4087 | Vector2(63, 44): -1, 4088 | Vector2(63, 45): -1, 4089 | Vector2(63, 46): -1, 4090 | Vector2(63, 47): -1, 4091 | Vector2(63, 48): -1, 4092 | Vector2(63, 49): -1, 4093 | Vector2(63, 50): -1, 4094 | Vector2(63, 51): -1, 4095 | Vector2(63, 52): -1, 4096 | Vector2(63, 53): -1, 4097 | Vector2(63, 54): -1, 4098 | Vector2(63, 55): -1, 4099 | Vector2(63, 56): -1, 4100 | Vector2(63, 57): -1, 4101 | Vector2(63, 58): -1, 4102 | Vector2(63, 59): -1, 4103 | Vector2(63, 60): -1, 4104 | Vector2(63, 61): -1, 4105 | Vector2(63, 62): -1, 4106 | Vector2(63, 63): -1 4107 | } 4108 | -------------------------------------------------------------------------------- /examples/icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://djy1n0alyty5x" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /examples/nodEC02.tmp: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://dqhmoay1vjx8p"] 2 | 3 | [ext_resource type="Script" path="res://addons/GestureRecognizer-0.1/scripts/ControlGesture.gd" id="1_j2x80"] 4 | [ext_resource type="Script" path="res://node_2d.gd" id="1_ulnrq"] 5 | 6 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_6r35x"] 7 | size = Vector2(1178, 676) 8 | 9 | [node name="Node2D" type="Node2D" node_paths=PackedStringArray("gest")] 10 | script = ExtResource("1_ulnrq") 11 | gest = NodePath("Gesture") 12 | 13 | [node name="Camera2D" type="Camera2D" parent="."] 14 | 15 | [node name="Gesture" type="Area2D" parent="."] 16 | script = ExtResource("1_j2x80") 17 | lineWidth = 9 18 | customButtomUI = "ui_a" 19 | 20 | [node name="CollisionShape2D" type="CollisionShape2D" parent="Gesture"] 21 | position = Vector2(5, 7) 22 | shape = SubResource("RectangleShape2D_6r35x") 23 | -------------------------------------------------------------------------------- /examples/node_2d.tscn.depren: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://dqhmoay1vjx8p"] 2 | 3 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/ControlGesture.gd" id="1_j2x80"] 4 | [ext_resource type="Script" path="res://node_2d.gd" id="1_ulnrq"] 5 | 6 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_6r35x"] 7 | size = Vector2(1178, 676) 8 | 9 | [node name="Node2D" type="Node2D" node_paths=PackedStringArray("gest")] 10 | script = ExtResource("1_ulnrq") 11 | gest = NodePath("Gesture") 12 | 13 | [node name="Camera2D" type="Camera2D" parent="."] 14 | 15 | [node name="Gesture" type="Area2D" parent="."] 16 | script = ExtResource("1_j2x80") 17 | lineWidth = 9 18 | customButtomUI = "ui_a" 19 | 20 | [node name="CollisionShape2D" type="CollisionShape2D" parent="Gesture"] 21 | position = Vector2(5, 7) 22 | shape = SubResource("RectangleShape2D_6r35x") 23 | -------------------------------------------------------------------------------- /examples/objects/box.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cketr25x8fskw"] 2 | 3 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_8eiwt"] 4 | size = Vector2(90, 90) 5 | 6 | [sub_resource type="BoxMesh" id="BoxMesh_og8dl"] 7 | size = Vector3(90, 90, 1) 8 | 9 | [node name="Box" type="RigidBody2D"] 10 | position = Vector2(590, 144) 11 | 12 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 13 | shape = SubResource("RectangleShape2D_8eiwt") 14 | 15 | [node name="MeshInstance2D" type="MeshInstance2D" parent="."] 16 | modulate = Color(1, 0.576471, 1, 1) 17 | mesh = SubResource("BoxMesh_og8dl") 18 | -------------------------------------------------------------------------------- /examples/objects/car.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://ds4tryns0s7ve"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dognhpkaijowt" path="res://assets/car.png" id="1_gi5c8"] 4 | 5 | [node name="Car" type="RigidBody2D"] 6 | 7 | [node name="Car" type="Sprite2D" parent="."] 8 | position = Vector2(541, 424) 9 | scale = Vector2(0.6, 0.6) 10 | texture = ExtResource("1_gi5c8") 11 | 12 | [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."] 13 | position = Vector2(1, -1) 14 | polygon = PackedVector2Array(403, 442, 400, 424, 411, 404, 433, 403, 470, 390, 508, 383, 537, 382, 560, 391, 586, 404, 640, 407, 662, 412, 680, 421, 679, 451, 651, 453, 647, 460, 639, 466, 624, 465, 615, 456, 479, 453, 466, 466, 451, 466, 444, 460, 439, 452, 410, 451) 15 | -------------------------------------------------------------------------------- /examples/objects/circle.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cac7ngxaox6k3"] 2 | 3 | [sub_resource type="CircleShape2D" id="CircleShape2D_j8hna"] 4 | radius = 44.0114 5 | 6 | [sub_resource type="SphereMesh" id="SphereMesh_5p23u"] 7 | 8 | [node name="Circle" type="RigidBody2D"] 9 | position = Vector2(563, 297) 10 | 11 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 12 | shape = SubResource("CircleShape2D_j8hna") 13 | 14 | [node name="MeshInstance2D" type="MeshInstance2D" parent="."] 15 | position = Vector2(-3.8147e-06, 1.14441e-05) 16 | scale = Vector2(90, 90) 17 | mesh = SubResource("SphereMesh_5p23u") 18 | -------------------------------------------------------------------------------- /examples/objects/heart.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://bqfixyl7k5afi"] 2 | 3 | [sub_resource type="PrismMesh" id="PrismMesh_5gks7"] 4 | size = Vector3(90, 60, 1) 5 | 6 | [sub_resource type="SphereMesh" id="SphereMesh_b4rrd"] 7 | 8 | [node name="Heart" type="RigidBody2D"] 9 | position = Vector2(589, 275) 10 | 11 | [node name="CollisionShape2D" type="CollisionPolygon2D" parent="."] 12 | polygon = PackedVector2Array(0, 29, 44, -29, 46, -38, 45, -45, 41, -53, 32, -59, 18, -62, 7, -58, -1, -49, -7, -56, -13, -59, -19, -62, -27, -61, -35, -59, -42, -53, -45, -47, -47, -39, -45, -31) 13 | 14 | [node name="MeshInstance2D" type="MeshInstance2D" parent="."] 15 | modulate = Color(0.883086, 0.328972, 0.581524, 1) 16 | mesh = SubResource("PrismMesh_5gks7") 17 | 18 | [node name="MeshInstance2D2" type="MeshInstance2D" parent="."] 19 | modulate = Color(0.882353, 0.329412, 0.580392, 1) 20 | position = Vector2(-22.7373, -39) 21 | scale = Vector2(47.5283, 45) 22 | mesh = SubResource("SphereMesh_b4rrd") 23 | 24 | [node name="MeshInstance2D3" type="MeshInstance2D" parent="."] 25 | modulate = Color(0.882353, 0.329412, 0.580392, 1) 26 | position = Vector2(20.981, -38.4) 27 | scale = Vector2(50.2943, 45) 28 | mesh = SubResource("SphereMesh_b4rrd") 29 | -------------------------------------------------------------------------------- /examples/project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="Addon Gesture" 14 | run/main_scene="res://scenes/appear_objects.tscn" 15 | config/features=PackedStringArray("4.3", "GL Compatibility") 16 | run/max_fps=60 17 | config/icon="res://icon.svg" 18 | 19 | [autoload] 20 | 21 | CloudRecognizer="*res://addons/gesture_recognizer/scripts/CloudRecognizer.gd" 22 | 23 | [display] 24 | 25 | window/stretch/mode="viewport" 26 | 27 | [editor_plugins] 28 | 29 | enabled=PackedStringArray("res://addons/gesture_recognizer/plugin.cfg") 30 | 31 | [input] 32 | 33 | ui_a={ 34 | "deadzone": 0.5, 35 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) 36 | ] 37 | } 38 | ui_click_right_mouse={ 39 | "deadzone": 0.5, 40 | "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null) 41 | ] 42 | } 43 | 44 | [input_devices] 45 | 46 | pointing/emulate_touch_from_mouse=true 47 | 48 | [rendering] 49 | 50 | renderer/rendering_method="gl_compatibility" 51 | renderer/rendering_method.mobile="gl_compatibility" 52 | -------------------------------------------------------------------------------- /examples/scenes/appear_objects.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=14 format=3 uid="uid://bs47pheanp4e3"] 2 | 3 | [ext_resource type="Script" path="res://scripts/appear_objects.gd" id="1_pgfte"] 4 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/ControlGesture.gd" id="1_y42jb"] 5 | [ext_resource type="Texture2D" uid="uid://b5sy04vdq6q0t" path="res://assets/watercolor-5062356_1920.jpg" id="3_q5v1u"] 6 | [ext_resource type="Texture2D" uid="uid://c60dqqxan2i05" path="res://assets/sun.png" id="4_fbs2e"] 7 | [ext_resource type="Script" path="res://scripts/sun.gd" id="5_rty71"] 8 | [ext_resource type="Texture2D" uid="uid://bec2gx83qa22w" path="res://assets/8083d36269b0492d2b91b28abf5b3533.png" id="6_j84f5"] 9 | 10 | [sub_resource type="LabelSettings" id="LabelSettings_y3gqj"] 11 | 12 | [sub_resource type="BoxMesh" id="BoxMesh_vjvgi"] 13 | 14 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_22hja"] 15 | size = Vector2(1232, 60) 16 | 17 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_11hk6"] 18 | albedo_color = Color(0.4204, 0.383178, 0.219727, 1) 19 | 20 | [sub_resource type="BoxMesh" id="BoxMesh_6rigs"] 21 | lightmap_size_hint = Vector2i(14, 21) 22 | material = SubResource("StandardMaterial3D_11hk6") 23 | 24 | [sub_resource type="Curve" id="Curve_nn80n"] 25 | _data = [Vector2(0.169355, 0.406593), 0.0, 0.0, 0, 0, Vector2(0.487903, 0.626374), 0.0, 0.0, 0, 0, Vector2(0.959677, 0.351648), 0.0, 0.0, 0, 0] 26 | point_count = 3 27 | 28 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_7tm1w"] 29 | size = Vector2(1173, 684) 30 | 31 | [node name="AppearObjects" type="Node2D"] 32 | script = ExtResource("1_pgfte") 33 | 34 | [node name="Watercolor-50623561920" type="Sprite2D" parent="."] 35 | position = Vector2(667, 472) 36 | texture = ExtResource("3_q5v1u") 37 | 38 | [node name="CanvasLayer" type="CanvasLayer" parent="."] 39 | 40 | [node name="Panel" type="Panel" parent="CanvasLayer"] 41 | offset_left = 25.0 42 | offset_top = 29.0 43 | offset_right = 212.0 44 | offset_bottom = 170.0 45 | 46 | [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Panel"] 47 | layout_mode = 1 48 | anchors_preset = 15 49 | anchor_right = 1.0 50 | anchor_bottom = 1.0 51 | grow_horizontal = 2 52 | grow_vertical = 2 53 | 54 | [node name="Label" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 55 | layout_mode = 2 56 | text = "Draw a:" 57 | 58 | [node name="Label2" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 59 | layout_mode = 2 60 | text = " - Tree" 61 | label_settings = SubResource("LabelSettings_y3gqj") 62 | 63 | [node name="MeshInstance2D" type="MeshInstance2D" parent="CanvasLayer/Panel/VBoxContainer/Label2"] 64 | visible = false 65 | modulate = Color(1, 1, 1, 0.529412) 66 | position = Vector2(50.2102, 13.3693) 67 | scale = Vector2(-75.3653, 1.08764) 68 | mesh = SubResource("BoxMesh_vjvgi") 69 | 70 | [node name="Label3" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 71 | layout_mode = 2 72 | text = " - Car" 73 | 74 | [node name="MeshInstance2D" type="MeshInstance2D" parent="CanvasLayer/Panel/VBoxContainer/Label3"] 75 | visible = false 76 | modulate = Color(1, 1, 1, 0.529412) 77 | position = Vector2(50.2102, 13.3693) 78 | scale = Vector2(-75.3653, 1.08764) 79 | mesh = SubResource("BoxMesh_vjvgi") 80 | 81 | [node name="Label4" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 82 | layout_mode = 2 83 | text = " - Sun" 84 | 85 | [node name="MeshInstance2D" type="MeshInstance2D" parent="CanvasLayer/Panel/VBoxContainer/Label4"] 86 | visible = false 87 | modulate = Color(1, 1, 1, 0.529412) 88 | position = Vector2(50.2102, 13.3693) 89 | scale = Vector2(-75.3653, 1.08764) 90 | mesh = SubResource("BoxMesh_vjvgi") 91 | 92 | [node name="Label5" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 93 | layout_mode = 2 94 | text = "Press Enter to classify" 95 | 96 | [node name="Camera2D" type="Camera2D" parent="."] 97 | anchor_mode = 0 98 | 99 | [node name="StaticBody2D" type="StaticBody2D" parent="."] 100 | 101 | [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] 102 | position = Vector2(571, 648) 103 | shape = SubResource("RectangleShape2D_22hja") 104 | 105 | [node name="MeshInstance2D" type="MeshInstance2D" parent="StaticBody2D"] 106 | modulate = Color(0.618832, 0.447586, 0.246587, 1) 107 | position = Vector2(570.125, 648.875) 108 | scale = Vector2(1231.75, 60.25) 109 | mesh = SubResource("BoxMesh_6rigs") 110 | 111 | [node name="Gesture" type="Area2D" parent="."] 112 | script = ExtResource("1_y42jb") 113 | lineWidth = 16 114 | lineColor = Color(0.950113, 0.716607, 0.884093, 1) 115 | widthCurve = SubResource("Curve_nn80n") 116 | outlineWidth = 10 117 | buttonForClassify = true 118 | buttonForClassifyUI = "ui_accept" 119 | 120 | [node name="CollisionShape2D" type="CollisionShape2D" parent="Gesture"] 121 | position = Vector2(576.5, 332) 122 | shape = SubResource("RectangleShape2D_7tm1w") 123 | 124 | [node name="ubiAppear" type="Node2D" parent="."] 125 | position = Vector2(581, 47) 126 | 127 | [node name="Sun" type="Sprite2D" parent="."] 128 | visible = false 129 | position = Vector2(1053, 101) 130 | scale = Vector2(0.2, 0.2) 131 | texture = ExtResource("4_fbs2e") 132 | script = ExtResource("5_rty71") 133 | 134 | [node name="Node2D" type="Node2D" parent="."] 135 | position = Vector2(332, 649) 136 | scale = Vector2(1e-05, 1e-05) 137 | 138 | [node name="8083d36269b0492d2b91b28Abf5b3533" type="Sprite2D" parent="Node2D"] 139 | position = Vector2(5, -215) 140 | scale = Vector2(0.7, 0.7) 141 | texture = ExtResource("6_j84f5") 142 | 143 | [connection signal="gesture_name" from="Gesture" to="." method="_on_gesture_gesture_name"] 144 | [connection signal="on_draw_exit" from="Gesture" to="." method="_on_gesture_on_draw_exit"] 145 | -------------------------------------------------------------------------------- /examples/scenes/appear_objects2.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=11 format=3 uid="uid://b3fip2ijnhx4"] 2 | 3 | [ext_resource type="Script" path="res://scripts/appear_objects2.gd" id="1_4ogmh"] 4 | [ext_resource type="Texture2D" uid="uid://b5sy04vdq6q0t" path="res://assets/watercolor-5062356_1920.jpg" id="2_kkd1b"] 5 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/ControlGesture.gd" id="3_8lpow"] 6 | 7 | [sub_resource type="LabelSettings" id="LabelSettings_y3gqj"] 8 | 9 | [sub_resource type="BoxMesh" id="BoxMesh_vjvgi"] 10 | 11 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_22hja"] 12 | size = Vector2(1232, 60) 13 | 14 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_11hk6"] 15 | albedo_color = Color(0.4204, 0.383178, 0.219727, 1) 16 | 17 | [sub_resource type="BoxMesh" id="BoxMesh_6rigs"] 18 | lightmap_size_hint = Vector2i(14, 21) 19 | material = SubResource("StandardMaterial3D_11hk6") 20 | 21 | [sub_resource type="Curve" id="Curve_nn80n"] 22 | _data = [Vector2(0.169355, 0.406593), 0.0, 0.0, 0, 0, Vector2(0.487903, 0.626374), 0.0, 0.0, 0, 0, Vector2(0.959677, 0.351648), 0.0, 0.0, 0, 0] 23 | point_count = 3 24 | 25 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_7tm1w"] 26 | size = Vector2(1173, 684) 27 | 28 | [node name="AppearObjects" type="Node2D"] 29 | script = ExtResource("1_4ogmh") 30 | 31 | [node name="Watercolor-50623561920" type="Sprite2D" parent="."] 32 | position = Vector2(667, 472) 33 | texture = ExtResource("2_kkd1b") 34 | 35 | [node name="CanvasLayer" type="CanvasLayer" parent="."] 36 | 37 | [node name="Panel" type="Panel" parent="CanvasLayer"] 38 | offset_left = 25.0 39 | offset_top = 29.0 40 | offset_right = 212.0 41 | offset_bottom = 143.0 42 | 43 | [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Panel"] 44 | layout_mode = 1 45 | anchors_preset = 15 46 | anchor_right = 1.0 47 | anchor_bottom = 1.0 48 | grow_horizontal = 2 49 | grow_vertical = 2 50 | 51 | [node name="Label" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 52 | layout_mode = 2 53 | text = "Draw a:" 54 | 55 | [node name="Label2" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 56 | layout_mode = 2 57 | text = " - Heart" 58 | label_settings = SubResource("LabelSettings_y3gqj") 59 | 60 | [node name="MeshInstance2D" type="MeshInstance2D" parent="CanvasLayer/Panel/VBoxContainer/Label2"] 61 | visible = false 62 | modulate = Color(1, 1, 1, 0.529412) 63 | position = Vector2(50.2102, 13.3693) 64 | scale = Vector2(-75.3653, 1.08764) 65 | mesh = SubResource("BoxMesh_vjvgi") 66 | 67 | [node name="Label3" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 68 | layout_mode = 2 69 | text = " - Circle" 70 | 71 | [node name="MeshInstance2D" type="MeshInstance2D" parent="CanvasLayer/Panel/VBoxContainer/Label3"] 72 | visible = false 73 | modulate = Color(1, 1, 1, 0.529412) 74 | position = Vector2(50.2102, 13.3693) 75 | scale = Vector2(-75.3653, 1.08764) 76 | mesh = SubResource("BoxMesh_vjvgi") 77 | 78 | [node name="Label4" type="Label" parent="CanvasLayer/Panel/VBoxContainer"] 79 | layout_mode = 2 80 | text = " - Box" 81 | 82 | [node name="MeshInstance2D" type="MeshInstance2D" parent="CanvasLayer/Panel/VBoxContainer/Label4"] 83 | visible = false 84 | modulate = Color(1, 1, 1, 0.529412) 85 | position = Vector2(50.2102, 13.3693) 86 | scale = Vector2(-75.3653, 1.08764) 87 | mesh = SubResource("BoxMesh_vjvgi") 88 | 89 | [node name="Camera2D" type="Camera2D" parent="."] 90 | anchor_mode = 0 91 | 92 | [node name="StaticBody2D" type="StaticBody2D" parent="."] 93 | 94 | [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] 95 | position = Vector2(571, 648) 96 | shape = SubResource("RectangleShape2D_22hja") 97 | 98 | [node name="MeshInstance2D" type="MeshInstance2D" parent="StaticBody2D"] 99 | modulate = Color(0.618832, 0.447586, 0.246587, 1) 100 | position = Vector2(570.125, 648.875) 101 | scale = Vector2(1231.75, 60.25) 102 | mesh = SubResource("BoxMesh_6rigs") 103 | 104 | [node name="Gesture" type="Area2D" parent="."] 105 | script = ExtResource("3_8lpow") 106 | lineWidth = 16 107 | lineColor = Color(0.950113, 0.716607, 0.884093, 1) 108 | widthCurve = SubResource("Curve_nn80n") 109 | outlineWidth = 10 110 | buttonForClassify = true 111 | buttonForClassifyUI = "ui_accept" 112 | 113 | [node name="CollisionShape2D" type="CollisionShape2D" parent="Gesture"] 114 | position = Vector2(576.5, 332) 115 | shape = SubResource("RectangleShape2D_7tm1w") 116 | 117 | [node name="ubiAppear" type="Node2D" parent="."] 118 | position = Vector2(581, 47) 119 | 120 | [connection signal="gesture_name" from="Gesture" to="." method="_on_gesture_gesture_name"] 121 | [connection signal="on_draw_exit" from="Gesture" to="." method="_on_gesture_on_draw_exit"] 122 | -------------------------------------------------------------------------------- /examples/scenes/simil_percet.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=9 format=3 uid="uid://cdxs25hwwftc0"] 2 | 3 | [ext_resource type="Script" path="res://scripts/simil.gd" id="1_1eqe7"] 4 | [ext_resource type="Texture2D" uid="uid://b5sy04vdq6q0t" path="res://assets/watercolor-5062356_1920.jpg" id="2_l4pn8"] 5 | [ext_resource type="Script" path="res://addons/gesture_recognizer/scripts/ControlGesture.gd" id="3_slkwq"] 6 | 7 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_22hja"] 8 | size = Vector2(1232, 60) 9 | 10 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_11hk6"] 11 | albedo_color = Color(0.4204, 0.383178, 0.219727, 1) 12 | 13 | [sub_resource type="BoxMesh" id="BoxMesh_6rigs"] 14 | lightmap_size_hint = Vector2i(14, 21) 15 | material = SubResource("StandardMaterial3D_11hk6") 16 | 17 | [sub_resource type="Curve" id="Curve_nn80n"] 18 | _data = [Vector2(0.169355, 0.406593), 0.0, 0.0, 0, 0, Vector2(0.524194, 1), 0.0, 0.0, 0, 0, Vector2(0.959677, 0.351648), 0.0, 0.0, 0, 0] 19 | point_count = 3 20 | 21 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_7tm1w"] 22 | size = Vector2(1173, 684) 23 | 24 | [node name="AppearObjects" type="Node2D"] 25 | script = ExtResource("1_1eqe7") 26 | 27 | [node name="Watercolor-50623561920" type="Sprite2D" parent="."] 28 | position = Vector2(667, 472) 29 | texture = ExtResource("2_l4pn8") 30 | 31 | [node name="CanvasLayer2" type="CanvasLayer" parent="."] 32 | 33 | [node name="Panel" type="Panel" parent="CanvasLayer2"] 34 | anchors_preset = 5 35 | anchor_left = 0.5 36 | anchor_right = 0.5 37 | offset_left = -252.0 38 | offset_top = 39.0 39 | offset_right = 235.0 40 | offset_bottom = 158.0 41 | grow_horizontal = 2 42 | 43 | [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer2/Panel"] 44 | layout_mode = 1 45 | anchors_preset = 14 46 | anchor_top = 0.5 47 | anchor_right = 1.0 48 | anchor_bottom = 0.5 49 | offset_top = -19.5 50 | offset_bottom = 19.5 51 | grow_horizontal = 2 52 | grow_vertical = 2 53 | 54 | [node name="Label" type="Label" parent="CanvasLayer2/Panel/VBoxContainer"] 55 | layout_mode = 2 56 | theme_override_font_sizes/font_size = 28 57 | text = "Porcentaje de similitud: " 58 | horizontal_alignment = 1 59 | vertical_alignment = 1 60 | 61 | [node name="Label2" type="Label" parent="CanvasLayer2/Panel/VBoxContainer"] 62 | layout_mode = 2 63 | size_flags_horizontal = 4 64 | text = "Press Enter to classify" 65 | 66 | [node name="Camera2D" type="Camera2D" parent="."] 67 | anchor_mode = 0 68 | 69 | [node name="StaticBody2D" type="StaticBody2D" parent="."] 70 | 71 | [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] 72 | position = Vector2(571, 648) 73 | shape = SubResource("RectangleShape2D_22hja") 74 | 75 | [node name="MeshInstance2D" type="MeshInstance2D" parent="StaticBody2D"] 76 | modulate = Color(0.618832, 0.447586, 0.246587, 1) 77 | position = Vector2(570.125, 648.875) 78 | scale = Vector2(1231.75, 60.25) 79 | mesh = SubResource("BoxMesh_6rigs") 80 | 81 | [node name="Gesture" type="Area2D" parent="."] 82 | script = ExtResource("3_slkwq") 83 | lineWidth = 16 84 | lineColor = Color(0.867792, 0.0231687, 3.85046e-07, 1) 85 | widthCurve = SubResource("Curve_nn80n") 86 | outlineWidth = 10 87 | outlineColor = Color(0, 0, 0.988235, 1) 88 | customDir = true 89 | customDirUI = "oo" 90 | buttonForClassify = true 91 | buttonForClassifyUI = "ui_accept" 92 | 93 | [node name="CollisionShape2D" type="CollisionShape2D" parent="Gesture"] 94 | position = Vector2(576.5, 332) 95 | shape = SubResource("RectangleShape2D_7tm1w") 96 | 97 | [node name="Line2D" type="Line2D" parent="."] 98 | points = PackedVector2Array(550, 180, 400, 400, 700, 400) 99 | closed = true 100 | 101 | [connection signal="gesture_name" from="Gesture" to="." method="_on_gesture_gesture_name"] 102 | [connection signal="on_draw_exit" from="Gesture" to="." method="_on_gesture_on_draw_exit"] 103 | -------------------------------------------------------------------------------- /examples/scripts/appear_objects.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | const car = preload("res://objects/car.tscn") 4 | 5 | var ubi : Vector2 6 | var tt: bool = false 7 | 8 | 9 | func _ready() -> void: 10 | ubi = $ubiAppear.global_position 11 | pass 12 | 13 | func _process(delta: float) -> void: 14 | if tt: 15 | $Node2D.scale = $Node2D.scale.lerp(Vector2(1, 1), 0.1) 16 | pass 17 | 18 | func _on_gesture_gesture_name(gestureName: StringName, distCloudPoint : float) -> void: 19 | match gestureName: 20 | "car" : create_car() 21 | "sun" : create_sun() 22 | "tree" : create_tree() 23 | pass 24 | 25 | func create_car(): 26 | var instCar = car.instantiate() 27 | instCar.position = ubi 28 | add_child(instCar) 29 | pass 30 | 31 | func create_sun(): 32 | $Sun.visible = true 33 | pass 34 | 35 | func create_tree(): 36 | tt = true 37 | pass 38 | -------------------------------------------------------------------------------- /examples/scripts/appear_objects2.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | const box = preload("res://objects/box.tscn") 4 | const circle = preload("res://objects/circle.tscn") 5 | const heart = preload("res://objects/heart.tscn") 6 | 7 | var ubi : Vector2 8 | 9 | 10 | func _ready() -> void: 11 | ubi = $ubiAppear.global_position 12 | 13 | pass 14 | 15 | 16 | func _on_gesture_gesture_name(gestureName: StringName, distCloudPoint : float) -> void: 17 | match gestureName: 18 | "box" : create_box() 19 | "circle" : create_circle() 20 | "heart" : create_heart() 21 | 22 | pass 23 | func create_box(): 24 | var instBox = box.instantiate() 25 | instBox.position = ubi 26 | add_child(instBox) 27 | if !$CanvasLayer/Panel/VBoxContainer/Label4/MeshInstance2D.visible: 28 | $CanvasLayer/Panel/VBoxContainer/Label4/MeshInstance2D.visible = true 29 | 30 | func create_circle(): 31 | var instCircle = circle.instantiate() 32 | instCircle.position = ubi 33 | add_child(instCircle) 34 | if !$CanvasLayer/Panel/VBoxContainer/Label3/MeshInstance2D.visible: 35 | $CanvasLayer/Panel/VBoxContainer/Label3/MeshInstance2D.visible = true 36 | 37 | func create_heart(): 38 | var instHeart = heart.instantiate() 39 | instHeart.position = ubi 40 | add_child(instHeart) 41 | if !$CanvasLayer/Panel/VBoxContainer/Label2/MeshInstance2D.visible: 42 | $CanvasLayer/Panel/VBoxContainer/Label2/MeshInstance2D.visible = true 43 | 44 | func _on_gesture_on_draw_exit() -> void: 45 | $Gesture.classify() 46 | pass 47 | -------------------------------------------------------------------------------- /examples/scripts/simil.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | func _ready() -> void: 4 | 5 | pass # Replace with function body. 6 | 7 | func _on_gesture_gesture_name(gestureName: StringName, distCloudPoint : float) -> void: 8 | 9 | $CanvasLayer2/Panel/VBoxContainer/Label.text = "Porcentaje de similitud: " + str(snapped(distCloudPoint, 0.01)) + "%" 10 | print(distCloudPoint) 11 | 12 | pass # Replace with function body. 13 | 14 | func _on_gesture_on_draw_exit() -> void: 15 | #$Gesture.classify() 16 | pass # Replace with function body. 17 | -------------------------------------------------------------------------------- /examples/scripts/sun.gd: -------------------------------------------------------------------------------- 1 | extends Sprite2D 2 | 3 | var cont : float = 1; 4 | 5 | # Called when the node enters the scene tree for the first time. 6 | func _ready() -> void: 7 | 8 | pass # Replace with function body. 9 | 10 | 11 | # Called every frame. 'delta' is the elapsed time since the previous frame. 12 | func _process(delta: float) -> void: 13 | if cont <= 0: 14 | cont = 0.6 15 | if rotation_degrees == 0: 16 | rotation_degrees = 26 17 | elif rotation_degrees == 26: 18 | rotation_degrees = 0 19 | else: 20 | cont -= delta 21 | pass 22 | -------------------------------------------------------------------------------- /pictures/1.1portada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/pictures/1.1portada.png -------------------------------------------------------------------------------- /pictures/2.1Node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/pictures/2.1Node.png -------------------------------------------------------------------------------- /pictures/2.2.1ButtonForClassify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/pictures/2.2.1ButtonForClassify.png -------------------------------------------------------------------------------- /pictures/2.3.1CreateGesture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/pictures/2.3.1CreateGesture.png -------------------------------------------------------------------------------- /pictures/2.3.2CreateButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/pictures/2.3.2CreateButton.png -------------------------------------------------------------------------------- /pictures/2.3.2SaveGesture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Fish-hub/Gesture-Recognizer-Godot/4e2c970be81649de0659745cd5784c833c1da977/pictures/2.3.2SaveGesture.png --------------------------------------------------------------------------------