├── icon.png.flags ├── icon.png ├── DrawObstacles.gd ├── DrawStart.gd ├── DrawPath.gd ├── DrawGrid.gd ├── engine.cfg ├── getValue.gd ├── README.md ├── DrawWeights.gd ├── World.gd ├── HexWorld.gd ├── HexWorld.tscn └── World.tscn /icon.png.flags: -------------------------------------------------------------------------------- 1 | gen_mipmaps=false 2 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cefleet/GodotAstarTutorial/HEAD/icon.png -------------------------------------------------------------------------------- /DrawObstacles.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | var hexes = []#hexes is an array of corners 3 | var color = Color("000000") 4 | 5 | func _draw(): 6 | for h in hexes: 7 | draw_colored_polygon(h,color) 8 | 9 | func drawObstacles(h): 10 | hexes.clear() 11 | hexes = h 12 | update() -------------------------------------------------------------------------------- /DrawStart.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | var color = Color("00FFFF") 3 | var startHex = [] 4 | func _draw(): 5 | if startHex.size() > 2:##its not a polygon if it is less than that size 6 | draw_colored_polygon(startHex,color) 7 | 8 | func drawStart(h): 9 | startHex.clear() 10 | startHex = h 11 | update() -------------------------------------------------------------------------------- /DrawPath.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | var path = [] 3 | var color = Color("00FF00") 4 | 5 | func _draw(): 6 | for p in path: 7 | draw_line(p[0],p[1],color,3,true) 8 | 9 | func drawPath(points): 10 | path.clear() 11 | var p = 0 12 | while p < points.size()-1: 13 | path.push_back([points[p],points[p+1]]) 14 | p += 1 15 | 16 | update() -------------------------------------------------------------------------------- /DrawGrid.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | var hexes = [] 3 | var color = Color("222222") 4 | 5 | func _draw(): 6 | for h in hexes: 7 | for l in h: 8 | draw_line(l[0],l[1],color,2,true) 9 | 10 | func drawGridInstant(): 11 | hexes.clear() 12 | for h in get_parent().hexGrid.get_map(): 13 | hexes.push_back(get_parent().hexGrid.hex_edges(h)) 14 | update() -------------------------------------------------------------------------------- /engine.cfg: -------------------------------------------------------------------------------- 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 | 10 | [application] 11 | 12 | 13 | name="GodotAstarTutorial" 14 | icon="res://icon.png" 15 | -------------------------------------------------------------------------------- /getValue.gd: -------------------------------------------------------------------------------- 1 | extends Panel 2 | 3 | # class member variables go here, for example: 4 | # var a = 2 5 | # var b = "textvar" 6 | signal valueChanged 7 | func colsChanged(value = null): 8 | get_node("colValue").set_text(str(value)) 9 | emit_signal("valueChanged") 10 | 11 | func rowsChanged(value = null): 12 | get_node("rowValue").set_text(str(value)) 13 | emit_signal("valueChanged") 14 | 15 | func _ready(): 16 | get_node("cols").connect("value_changed",self,"colsChanged") 17 | get_node("rows").connect("value_changed",self,"rowsChanged") -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Godot Astar Tutorial 2 | 3 | This project coincides with an online tutorial reguarding Godot's Node-Based Astar pathfinding. 4 | 5 | *Requires godot 2.2* 6 | 7 | ------------------------------------------------------------- 8 | 9 | "THE BEER-WARE LICENSE" (Revision clint's revision): clint modified this file. As long as you retain this notice, (or even if you don't) you can do whatever you want with this stuff as long as clint isn't blamed for bad stuff you do. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. Clint Fleetwoood (Originally Poul-Henning Kamp) 10 | 11 | -------------------------------------------------------------------------------- /DrawWeights.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | func _draw(): 4 | var hexMap = get_parent().hexMap 5 | var hexGrid = get_parent().hexGrid 6 | for hex in hexMap: 7 | var h = hexGrid.hex_corners(hex) 8 | #draw_colored_polygon(h,Color(float(hexMap[hex].travelWeight)/2,float(hexMap[hex].travelWeight)/2,float(hexMap[hex].travelWeight)/2)) 9 | draw_colored_polygon(h,Color(float(hexMap[hex].travelWeight)/10,float(hexMap[hex].travelWeight)/10,float(hexMap[hex].travelWeight)/10)) 10 | if hexMap[hex].travelWeight == 1: 11 | draw_colored_polygon(h,Color("428a1a")) 12 | elif hexMap[hex].travelWeight == 1.25: 13 | draw_colored_polygon(h,Color("623916")) 14 | elif hexMap[hex].travelWeight == 1.50: 15 | draw_colored_polygon(h,Color("62c0ff")) 16 | elif hexMap[hex].travelWeight == 1.75: 17 | draw_colored_polygon(h,Color("001b93")) 18 | 19 | func drawWeights(): 20 | update() -------------------------------------------------------------------------------- /World.gd: -------------------------------------------------------------------------------- 1 | extends Spatial 2 | var gridCols = 10 3 | var gridRows = 10 4 | 5 | var tileWidth = 1 6 | var tileHeight = 1 7 | 8 | var pathType = 'cardnial' 9 | var grid = {} 10 | var astar = AStar.new() 11 | 12 | var obstacles = [] 13 | ###no diagonal connections 14 | func makeGrid(): 15 | grid = {} 16 | var r = 0 17 | var c = 0 18 | var id = 0 19 | while r < gridRows: 20 | c = 0 21 | while c < gridCols: 22 | grid[id] = { 23 | "neighbors":{ 24 | "u":Vector3(c,0,r-1), 25 | "ru":Vector3(c+1,0,r-1), 26 | "r":Vector3(c+1,0,r), 27 | "rd":Vector3(c+1,0,r+1), 28 | "d":Vector3(c,0,r+1), 29 | "ld":Vector3(c-1,0,r+1), 30 | "l":Vector3(c-1,0,r), 31 | "lu":Vector3(c-1,0,r-1) 32 | }, 33 | #gridpoint is the top right corner 34 | "gridPoint":Vector3(c,0,r), 35 | "center":Vector3(float(c)+float(tileWidth)/2,0,float(r)+float(tileHeight)/2) 36 | } 37 | astar.add_point(id,Vector3(c,0,r)) 38 | c += 1 39 | id += 1 40 | r += 1 41 | 42 | func drawGrid(): 43 | var d = get_node("Grid") 44 | d.clear() 45 | for tile in grid: 46 | d.begin(Mesh.PRIMITIVE_LINE_STRIP, null) 47 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth,0,grid[tile].gridPoint.z*tileHeight)) 48 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth+tileWidth,0,grid[tile].gridPoint.z*tileHeight)) 49 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth+tileWidth,0,grid[tile].gridPoint.z*tileHeight+tileHeight)) 50 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth,0,grid[tile].gridPoint.z*tileHeight+tileHeight)) 51 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth,0,grid[tile].gridPoint.z*tileHeight)) 52 | d.end() 53 | 54 | func drawObstacles(): 55 | var d = get_node("obstacles") 56 | d.clear() 57 | for tile in obstacles: 58 | d.begin(Mesh.PRIMITIVE_LINE_STRIP, null) 59 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth,0,grid[tile].gridPoint.z*tileHeight)) 60 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth+tileWidth,0,grid[tile].gridPoint.z*tileHeight)) 61 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth+tileWidth,0,grid[tile].gridPoint.z*tileHeight+tileHeight)) 62 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth,0,grid[tile].gridPoint.z*tileHeight+tileHeight)) 63 | d.add_vertex(Vector3(grid[tile].gridPoint.x*tileWidth,0,grid[tile].gridPoint.z*tileHeight)) 64 | d.end() 65 | 66 | ##directions are clockwise starting up 0 - 7 67 | func getDirectionIds(id,dirs): 68 | var ids = [] 69 | for d in dirs: 70 | for i in grid: 71 | if grid[i].gridPoint == grid[id].neighbors[d]: 72 | ids.push_back(i) 73 | continue 74 | return ids 75 | 76 | func connectCardinal(): 77 | for tile in grid: 78 | var ids = getDirectionIds(tile,["u","r","d","l"]) 79 | for i in ids: 80 | if not astar.are_points_connected(tile,i): 81 | astar.connect_points(tile,i) 82 | 83 | 84 | func connectAll(): 85 | for tile in grid: 86 | var ids = getDirectionIds(tile,["u","ru","r","rd","d","ld","l","lu"]) 87 | for i in ids: 88 | if not astar.are_points_connected(tile,i): 89 | astar.connect_points(tile,i) 90 | 91 | func drawPath(path): 92 | var d = get_node("drawPath") 93 | d.clear() 94 | d.begin(Mesh.PRIMITIVE_LINE_STRIP, null) 95 | for p in path: 96 | d.add_vertex(Vector3(grid[p].center.x*tileWidth,0,grid[p].center.z*tileHeight)) 97 | d.end() 98 | 99 | func disconnectPoints(): 100 | for tile in grid: 101 | disconectPoint(tile) 102 | 103 | 104 | func disconectPoint(tile): 105 | var ids = getDirectionIds(tile,["u","ru","r","rd","d","ld","l","lu"]) 106 | for i in ids: 107 | if astar.are_points_connected(tile,i): 108 | astar.disconnect_points(tile,i) 109 | 110 | func addObstacle(): 111 | var v = Vector3(get_node("AddObstacle/cols").get_value(),0,get_node("AddObstacle/rows").get_value()) 112 | var tile 113 | for t in grid: 114 | if grid[t].gridPoint == v: 115 | tile = t 116 | continue 117 | disconectPoint(tile) 118 | obstacles.push_back(tile) 119 | drawObstacles() 120 | 121 | func setObstacles(): 122 | for tile in obstacles: 123 | disconectPoint(tile) 124 | drawObstacles() 125 | makePath() 126 | 127 | func setType(type): 128 | 129 | if pathType != type: 130 | disconnectPoints() 131 | pathType = type 132 | if type == 'cardnial': 133 | connectCardinal() 134 | setObstacles() 135 | else: 136 | connectAll() 137 | setObstacles() 138 | 139 | makePath() 140 | 141 | func makePath(): 142 | var startVector = Vector3(get_node("Start/cols").get_value(),0,get_node("Start/rows").get_value()) 143 | var endVector = Vector3(get_node("End/cols").get_value(),0,get_node("End/rows").get_value()) 144 | var startId = 0 145 | var endId = 0 146 | for i in grid: 147 | if grid[i].gridPoint == startVector: 148 | startId = i 149 | 150 | if grid[i].gridPoint == endVector: 151 | endId = i 152 | 153 | var path = astar.get_id_path(startId,endId) 154 | drawPath(path) 155 | 156 | func _ready(): 157 | #default setup 158 | makeGrid() 159 | drawGrid() 160 | connectCardinal() 161 | 162 | get_node("DrawCardialPath").connect("pressed",self,"setType",["cardnial"]) 163 | get_node("DrawAllPath").connect("pressed",self,"setType",["all"]) 164 | 165 | get_node("Start").connect("valueChanged",self,'makePath') 166 | get_node("End").connect("valueChanged",self,'makePath') 167 | get_node("AddObstacle/AddObstacleButton").connect("pressed",self,'addObstacle') 168 | -------------------------------------------------------------------------------- /HexWorld.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | var gridCols = 10 4 | var gridRows = 10 5 | var hexSizeX = 30 6 | var hexSizeY = 30 7 | var layout = 'pointy' 8 | 9 | var hexMap = {} 10 | 11 | var astar = AStar.new() 12 | var hexGrid = HexGrid.new() 13 | 14 | var obstacles = [] 15 | var path = [] 16 | var start = Vector3(0,0,0) 17 | var end = Vector3(0, 0, 0) 18 | var travelCost = 0 19 | 20 | 21 | ###no diagonal connections 22 | func makeGrid(): 23 | disconnectPoints() 24 | obstacles.clear() 25 | var m = hexGrid.get_map() 26 | hexMap = {} 27 | var id = 0 28 | for h in m: 29 | hexMap[h] = { 30 | "isObstacle":false, 31 | "travelWeight":1, 32 | "astarId":id, 33 | "hex":h 34 | } 35 | id += 1 36 | addAstarPoint(hexMap[h]) 37 | connectPoints() 38 | 39 | func addAstarPoint(h): 40 | astar.add_point(h.astarId,h.hex,h.travelWeight) 41 | 42 | func makePath(from,too): 43 | var temPath = astar.get_point_path(hexMap[from].astarId,hexMap[too].astarId) 44 | var _path = hexPathToPointPath(temPath) 45 | path = _path 46 | drawPath() 47 | 48 | func drawPath(): 49 | get_node("DrawPath").drawPath(path) 50 | 51 | func hexPathToPointPath(path): 52 | travelCost = 0 53 | var _path = [] 54 | for p in path: 55 | travelCost += hexMap[p].travelWeight 56 | _path.push_back(hexGrid.hex_to_point(p)) 57 | get_node("travelCost").set_text(str(travelCost)) 58 | return _path 59 | 60 | func setWeight(hex): 61 | var w = 1.0+float(get_node("WeightPoints").get_value()-1)*0.25 62 | print(w) 63 | 64 | hexMap[hex].travelWeight = w 65 | disconectPoint(hex) 66 | astar.remove_point(hexMap[hex].astarId) 67 | astar.add_point(hexMap[hex].astarId,hex,hexMap[hex].travelWeight) 68 | connectPoint(hex) 69 | get_node("DrawWeights").drawWeights() 70 | 71 | 72 | func removeObstacle(hex): 73 | if obstacles.find(hex) > -1: 74 | connectPoint(hex) 75 | obstacles.erase(hex) 76 | drawObstacles() 77 | hexMap[hex].isObstacle = false 78 | 79 | func addObstacle(hex): 80 | if hex in hexMap: 81 | if obstacles.find(hex) < 0: 82 | disconectPoint(hex) 83 | obstacles.push_back(hex) 84 | drawObstacles() 85 | hexMap[hex].isObstacle = true 86 | else: 87 | removeObstacle(hex) 88 | 89 | makePath(start,end) 90 | 91 | func drawObstacles(): 92 | var obs = [] 93 | for o in obstacles: 94 | obs.push_back(hexGrid.hex_corners(o)) 95 | get_node("DrawObstacle").drawObstacles(obs) 96 | 97 | func setEndPoint(hex): 98 | end = hex 99 | makePath(start,end) 100 | 101 | func setStartPoint(hex): 102 | start = hex 103 | get_node("DrawStart").drawStart(hexGrid.hex_corners(start)) 104 | 105 | 106 | func connectPoints(): 107 | for hex in hexMap: 108 | connectPoint(hex) 109 | 110 | func connectPoint(hex): 111 | var nieghs = hexGrid.hex_neighbors(hex) 112 | for n in nieghs: 113 | if n in hexMap: 114 | 115 | if not astar.are_points_connected(hexMap[hex].astarId,hexMap[n].astarId): 116 | if not hexMap[n].isObstacle:##make sure the connection is not an obstacle 117 | astar.connect_points(hexMap[hex].astarId,hexMap[n].astarId) 118 | 119 | func disconnectPoints(): 120 | for hex in hexMap: 121 | disconectPoint(hex) 122 | 123 | func disconectPoint(hex): 124 | var nieghs = hexGrid.hex_neighbors(hex) 125 | for n in nieghs: 126 | if n in hexMap: 127 | if astar.are_points_connected(hexMap[hex].astarId,hexMap[n].astarId): 128 | astar.disconnect_points(hexMap[hex].astarId,hexMap[n].astarId) 129 | 130 | func changeTo(type="flat"): 131 | if type == 1: 132 | type = 'flat' 133 | else: 134 | type = 'pointy' 135 | 136 | if type != layout: 137 | hexGrid.set_layout(type) 138 | layout = type 139 | makeGrid() 140 | setStartPoint(Vector3(0,0,0)) 141 | end = Vector3(0,0,0) 142 | get_node("DrawGrid").drawGridInstant() 143 | get_node("DrawWeights").drawWeights() 144 | drawObstacles() 145 | 146 | 147 | func _input(event): 148 | if (event.type==InputEvent.MOUSE_BUTTON and event.pressed and (event.button_index == 1)): 149 | ##the offset is how much the "drawGrid" is off of 0,0 150 | var offset = get_node("DrawGrid").get_pos() 151 | 152 | var pos = Vector2(event.pos.x-offset.x,event.pos.y-offset.y) 153 | var hex = hexGrid.point_to_hex(pos) 154 | if hex in hexMap: 155 | addObstacle(hex) 156 | 157 | elif (event.type==InputEvent.MOUSE_BUTTON and event.pressed and (event.button_index == 2)): 158 | var offset = get_node("DrawGrid").get_pos() 159 | 160 | var pos = Vector2(event.pos.x-offset.x,event.pos.y-offset.y) 161 | var hex = hexGrid.point_to_hex(pos) 162 | if hex in hexMap: 163 | setStartPoint(hex) 164 | 165 | elif (event.type==InputEvent.MOUSE_BUTTON and event.pressed and (event.button_index == 3)): 166 | var offset = get_node("DrawGrid").get_pos() 167 | 168 | var pos = Vector2(event.pos.x-offset.x,event.pos.y-offset.y) 169 | var hex = hexGrid.point_to_hex(pos) 170 | if hex in hexMap: 171 | setWeight(hex) 172 | 173 | 174 | elif(event.type==InputEvent.MOUSE_MOTION): 175 | var offset = get_node("DrawGrid").get_pos() 176 | var pos = Vector2(event.pos.x-offset.x,event.pos.y-offset.y) 177 | var hex = hexGrid.point_to_hex(pos) 178 | if hex in hexMap: 179 | setEndPoint(hex) 180 | 181 | 182 | func _ready(): 183 | set_process_input(true) 184 | hexGrid.set_hex_size(Vector2(hexSizeX,hexSizeY)) 185 | hexGrid.set_rows(gridRows) 186 | hexGrid.set_cols(gridCols) 187 | hexGrid.set_layout(layout) 188 | 189 | makeGrid() 190 | 191 | get_node("DrawGrid").drawGridInstant() 192 | 193 | setStartPoint(start) 194 | makePath(start,end) 195 | 196 | get_node("GridType").connect("value_changed",self,"changeTo") 197 | -------------------------------------------------------------------------------- /HexWorld.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=7 format=1] 2 | 3 | [ext_resource path="res://HexWorld.gd" type="Script" id=1] 4 | [ext_resource path="res://DrawWeights.gd" type="Script" id=2] 5 | [ext_resource path="res://DrawObstacles.gd" type="Script" id=3] 6 | [ext_resource path="res://DrawStart.gd" type="Script" id=4] 7 | [ext_resource path="res://DrawGrid.gd" type="Script" id=5] 8 | [ext_resource path="res://DrawPath.gd" type="Script" id=6] 9 | 10 | [node name="HexWorld" type="Node2D"] 11 | 12 | script/script = ExtResource( 1 ) 13 | 14 | [node name="DrawWeights" type="Node2D" parent="."] 15 | 16 | transform/pos = Vector2( 32.1329, 32.1329 ) 17 | script/script = ExtResource( 2 ) 18 | 19 | [node name="DrawObstacle" type="Node2D" parent="."] 20 | 21 | transform/pos = Vector2( 32.1329, 32.1329 ) 22 | script/script = ExtResource( 3 ) 23 | 24 | [node name="DrawStart" type="Node2D" parent="."] 25 | 26 | transform/pos = Vector2( 32.1329, 32.1329 ) 27 | script/script = ExtResource( 4 ) 28 | 29 | [node name="DrawGrid" type="Node2D" parent="."] 30 | 31 | transform/pos = Vector2( 32, 32 ) 32 | script/script = ExtResource( 5 ) 33 | 34 | [node name="DrawPath" type="Node2D" parent="."] 35 | 36 | transform/pos = Vector2( 32.1329, 32.1329 ) 37 | script/script = ExtResource( 6 ) 38 | 39 | [node name="GridType" type="HSlider" parent="."] 40 | 41 | editor/display_folded = true 42 | focus/ignore_mouse = false 43 | focus/stop_mouse = true 44 | size_flags/horizontal = 2 45 | size_flags/vertical = 0 46 | margin/left = 931.0 47 | margin/top = 18.0 48 | margin/right = 984.0 49 | margin/bottom = 39.0 50 | range/min = 0.0 51 | range/max = 1.0 52 | range/step = 1.0 53 | range/page = 0.0 54 | range/value = 0.0 55 | range/exp_edit = false 56 | range/rounded = true 57 | tick_count = 0 58 | ticks_on_borders = false 59 | focus_mode = 2 60 | 61 | [node name="Pointy" type="Label" parent="GridType"] 62 | 63 | focus/ignore_mouse = true 64 | focus/stop_mouse = true 65 | size_flags/horizontal = 2 66 | size_flags/vertical = 0 67 | margin/left = -41.0 68 | margin/top = 0.0 69 | margin/right = -1.0 70 | margin/bottom = 14.0 71 | text = "Pointy" 72 | percent_visible = 1.0 73 | lines_skipped = 0 74 | max_lines_visible = -1 75 | 76 | [node name="flat" type="Label" parent="GridType"] 77 | 78 | focus/ignore_mouse = true 79 | focus/stop_mouse = true 80 | size_flags/horizontal = 2 81 | size_flags/vertical = 0 82 | margin/left = 55.0 83 | margin/top = 1.0 84 | margin/right = 95.0 85 | margin/bottom = 15.0 86 | text = "Flat" 87 | percent_visible = 1.0 88 | lines_skipped = 0 89 | max_lines_visible = -1 90 | 91 | [node name="Label" type="Label" parent="GridType"] 92 | 93 | focus/ignore_mouse = true 94 | focus/stop_mouse = true 95 | size_flags/horizontal = 2 96 | size_flags/vertical = 0 97 | margin/left = -3.0 98 | margin/top = -14.0 99 | margin/right = 58.0 100 | margin/bottom = 0.0 101 | text = "Grid Type" 102 | percent_visible = 1.0 103 | lines_skipped = 0 104 | max_lines_visible = -1 105 | 106 | [node name="WeightPoints" type="HSlider" parent="."] 107 | 108 | focus/ignore_mouse = false 109 | focus/stop_mouse = true 110 | size_flags/horizontal = 2 111 | size_flags/vertical = 0 112 | margin/left = 932.0 113 | margin/top = 56.0 114 | margin/right = 985.0 115 | margin/bottom = 77.0 116 | range/min = 1.0 117 | range/max = 4.0 118 | range/step = 0.25 119 | range/page = 0.0 120 | range/value = 1.0 121 | range/exp_edit = false 122 | range/rounded = true 123 | tick_count = 0 124 | ticks_on_borders = false 125 | focus_mode = 2 126 | 127 | [node name="min" type="Label" parent="WeightPoints"] 128 | 129 | focus/ignore_mouse = true 130 | focus/stop_mouse = true 131 | size_flags/horizontal = 2 132 | size_flags/vertical = 0 133 | margin/left = -41.0 134 | margin/top = 0.0 135 | margin/right = -1.0 136 | margin/bottom = 14.0 137 | text = "1" 138 | align = 2 139 | percent_visible = 1.0 140 | lines_skipped = 0 141 | max_lines_visible = -1 142 | 143 | [node name="max" type="Label" parent="WeightPoints"] 144 | 145 | focus/ignore_mouse = true 146 | focus/stop_mouse = true 147 | size_flags/horizontal = 2 148 | size_flags/vertical = 0 149 | margin/left = 54.0 150 | margin/top = 1.0 151 | margin/right = 71.0 152 | margin/bottom = 15.0 153 | text = "1.75" 154 | percent_visible = 1.0 155 | lines_skipped = 0 156 | max_lines_visible = -1 157 | 158 | [node name="Label" type="Label" parent="WeightPoints"] 159 | 160 | focus/ignore_mouse = true 161 | focus/stop_mouse = true 162 | size_flags/horizontal = 2 163 | size_flags/vertical = 0 164 | margin/left = -11.0 165 | margin/top = -14.0 166 | margin/right = 73.0 167 | margin/bottom = 0.0 168 | text = "Weight Value" 169 | percent_visible = 1.0 170 | lines_skipped = 0 171 | max_lines_visible = -1 172 | 173 | [node name="Panel" type="Panel" parent="."] 174 | 175 | editor/display_folded = true 176 | focus/ignore_mouse = false 177 | focus/stop_mouse = true 178 | size_flags/horizontal = 2 179 | size_flags/vertical = 2 180 | margin/left = 718.0 181 | margin/top = 107.0 182 | margin/right = 1017.0 183 | margin/bottom = 279.0 184 | 185 | [node name="Label" type="Label" parent="Panel"] 186 | 187 | focus/ignore_mouse = true 188 | focus/stop_mouse = true 189 | size_flags/horizontal = 2 190 | size_flags/vertical = 0 191 | margin/left = 10.0 192 | margin/top = 10.0 193 | margin/right = 288.0 194 | margin/bottom = 165.0 195 | text = "Controls\n\nMouse Left Click : Adds/Removes Obstacle\n\nMouse Right Click : Sets Start Location\n\nMouse Middle Click : Sets Hex Weight (from \"Weight Value\")" 196 | autowrap = true 197 | percent_visible = 1.0 198 | lines_skipped = 0 199 | max_lines_visible = -1 200 | 201 | [node name="travelCost" type="Label" parent="."] 202 | 203 | focus/ignore_mouse = true 204 | focus/stop_mouse = true 205 | size_flags/horizontal = 2 206 | size_flags/vertical = 0 207 | margin/left = 974.0 208 | margin/top = 87.0 209 | margin/right = 1014.0 210 | margin/bottom = 101.0 211 | percent_visible = 1.0 212 | lines_skipped = 0 213 | max_lines_visible = -1 214 | 215 | [node name="Label" type="Label" parent="travelCost"] 216 | 217 | focus/ignore_mouse = true 218 | focus/stop_mouse = true 219 | size_flags/horizontal = 2 220 | size_flags/vertical = 0 221 | margin/left = -78.0 222 | margin/top = -1.0 223 | margin/right = -3.0 224 | margin/bottom = 13.0 225 | text = "Travel Cost" 226 | percent_visible = 1.0 227 | lines_skipped = 0 228 | max_lines_visible = -1 229 | 230 | [node name="Panel" type="Panel" parent="travelCost"] 231 | 232 | visibility/behind_parent = true 233 | focus/ignore_mouse = false 234 | focus/stop_mouse = true 235 | size_flags/horizontal = 2 236 | size_flags/vertical = 2 237 | margin/left = -2.0 238 | margin/top = -2.0 239 | margin/right = 33.0 240 | margin/bottom = 13.0 241 | 242 | 243 | -------------------------------------------------------------------------------- /World.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=1] 2 | 3 | [ext_resource path="res://World.gd" type="Script" id=1] 4 | [ext_resource path="res://getValue.gd" type="Script" id=2] 5 | 6 | [sub_resource type="FixedMaterial" id=1] 7 | 8 | flags/visible = true 9 | flags/double_sided = false 10 | flags/invert_faces = false 11 | flags/unshaded = true 12 | flags/on_top = false 13 | flags/lightmap_on_uv2 = true 14 | flags/colarray_is_srgb = true 15 | params/blend_mode = 0 16 | params/depth_draw = 1 17 | params/line_width = 1.0 18 | fixed_flags/use_alpha = false 19 | fixed_flags/use_color_array = false 20 | fixed_flags/use_point_size = false 21 | fixed_flags/discard_alpha = false 22 | fixed_flags/use_xy_normalmap = false 23 | params/diffuse = Color( 0.0338745, 0.0775938, 0.433594, 1 ) 24 | params/specular = Color( 0, 0, 0, 1 ) 25 | params/emission = Color( 0, 0, 0, 1 ) 26 | params/specular_exp = 40 27 | params/detail_mix = 1.0 28 | params/normal_depth = 1 29 | params/shader = 0 30 | params/shader_param = 0.5 31 | params/glow = 0 32 | params/point_size = 1.0 33 | uv_xform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 34 | textures/diffuse_tc = 0 35 | textures/detail_tc = 0 36 | textures/specular_tc = 0 37 | textures/emission_tc = 0 38 | textures/specular_exp_tc = 0 39 | textures/glow_tc = 0 40 | textures/normal_tc = 0 41 | textures/shade_param_tc = 0 42 | 43 | [sub_resource type="FixedMaterial" id=2] 44 | 45 | flags/visible = true 46 | flags/double_sided = false 47 | flags/invert_faces = false 48 | flags/unshaded = true 49 | flags/on_top = false 50 | flags/lightmap_on_uv2 = true 51 | flags/colarray_is_srgb = true 52 | params/blend_mode = 0 53 | params/depth_draw = 1 54 | params/line_width = 5.0 55 | fixed_flags/use_alpha = false 56 | fixed_flags/use_color_array = false 57 | fixed_flags/use_point_size = false 58 | fixed_flags/discard_alpha = false 59 | fixed_flags/use_xy_normalmap = false 60 | params/diffuse = Color( 0.859013, 0.90625, 0.0424805, 1 ) 61 | params/specular = Color( 0, 0, 0, 1 ) 62 | params/emission = Color( 0, 0, 0, 1 ) 63 | params/specular_exp = 40 64 | params/detail_mix = 1.0 65 | params/normal_depth = 1 66 | params/shader = 0 67 | params/shader_param = 0.5 68 | params/glow = 0 69 | params/point_size = 1.0 70 | uv_xform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 71 | textures/diffuse_tc = 0 72 | textures/detail_tc = 0 73 | textures/specular_tc = 0 74 | textures/emission_tc = 0 75 | textures/specular_exp_tc = 0 76 | textures/glow_tc = 0 77 | textures/normal_tc = 0 78 | textures/shade_param_tc = 0 79 | 80 | [sub_resource type="FixedMaterial" id=3] 81 | 82 | flags/visible = true 83 | flags/double_sided = false 84 | flags/invert_faces = false 85 | flags/unshaded = true 86 | flags/on_top = false 87 | flags/lightmap_on_uv2 = true 88 | flags/colarray_is_srgb = true 89 | params/blend_mode = 0 90 | params/depth_draw = 1 91 | params/line_width = 6.0 92 | fixed_flags/use_alpha = false 93 | fixed_flags/use_color_array = false 94 | fixed_flags/use_point_size = false 95 | fixed_flags/discard_alpha = false 96 | fixed_flags/use_xy_normalmap = false 97 | params/diffuse = Color( 0.972656, 0.0759888, 0.0759888, 1 ) 98 | params/specular = Color( 0, 0, 0, 1 ) 99 | params/emission = Color( 0, 0, 0, 1 ) 100 | params/specular_exp = 40 101 | params/detail_mix = 1.0 102 | params/normal_depth = 1 103 | params/shader = 0 104 | params/shader_param = 0.0 105 | params/glow = 0.0 106 | params/point_size = 1.0 107 | uv_xform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 108 | textures/diffuse_tc = 0 109 | textures/detail_tc = 0 110 | textures/specular_tc = 0 111 | textures/emission_tc = 0 112 | textures/specular_exp_tc = 0 113 | textures/glow_tc = 0 114 | textures/normal_tc = 0 115 | textures/shade_param_tc = 0 116 | 117 | [node name="SimpleWorld" type="Spatial"] 118 | 119 | _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 120 | script/script = ExtResource( 1 ) 121 | 122 | [node name="Grid" type="ImmediateGeometry" parent="."] 123 | 124 | _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 125 | layers = 1 126 | geometry/visible = true 127 | geometry/material_override = SubResource( 1 ) 128 | geometry/cast_shadow = 1 129 | geometry/receive_shadows = true 130 | geometry/range_begin = 0.0 131 | geometry/range_end = 0.0 132 | geometry/extra_cull_margin = 0.0 133 | geometry/billboard = false 134 | geometry/billboard_y = false 135 | geometry/depth_scale = false 136 | geometry/visible_in_all_rooms = false 137 | geometry/use_baked_light = false 138 | geometry/baked_light_tex_id = 0 139 | 140 | [node name="obstacles" type="ImmediateGeometry" parent="."] 141 | 142 | _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 143 | layers = 1 144 | geometry/visible = true 145 | geometry/material_override = SubResource( 2 ) 146 | geometry/cast_shadow = 1 147 | geometry/receive_shadows = true 148 | geometry/range_begin = 0.0 149 | geometry/range_end = 0.0 150 | geometry/extra_cull_margin = 0.0 151 | geometry/billboard = false 152 | geometry/billboard_y = false 153 | geometry/depth_scale = false 154 | geometry/visible_in_all_rooms = false 155 | geometry/use_baked_light = false 156 | geometry/baked_light_tex_id = 0 157 | 158 | [node name="drawPath" type="ImmediateGeometry" parent="."] 159 | 160 | _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 161 | layers = 1 162 | geometry/visible = true 163 | geometry/material_override = SubResource( 3 ) 164 | geometry/cast_shadow = 1 165 | geometry/receive_shadows = true 166 | geometry/range_begin = 0.0 167 | geometry/range_end = 0.0 168 | geometry/extra_cull_margin = 0.0 169 | geometry/billboard = false 170 | geometry/billboard_y = false 171 | geometry/depth_scale = false 172 | geometry/visible_in_all_rooms = false 173 | geometry/use_baked_light = false 174 | geometry/baked_light_tex_id = 0 175 | 176 | [node name="Camera" type="Camera" parent="."] 177 | 178 | _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 179 | transform/local = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 4.23333, 11.2673, 4.5333 ) 180 | projection = 0 181 | fov = 60.0 182 | near = 0.1 183 | far = 100.0 184 | keep_aspect = 1 185 | current = false 186 | visible_layers = 1048575 187 | environment = null 188 | h_offset = 0.0 189 | v_offset = 0.0 190 | 191 | [node name="DirectionalLight" type="DirectionalLight" parent="."] 192 | 193 | _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) 194 | transform/local = Transform( 1, 0, 0, 0, -0.0782785, 0.996932, 0, -0.996932, -0.0782785, 0, 8.15679, 0 ) 195 | layers = 1 196 | params/enabled = true 197 | params/editor_only = false 198 | params/bake_mode = 0 199 | params/energy = 1.0 200 | colors/diffuse = Color( 1, 1, 1, 1 ) 201 | colors/specular = Color( 1, 1, 1, 1 ) 202 | shadow/shadow = false 203 | shadow/darkening = 0.0 204 | shadow/z_offset = 0.05 205 | shadow/z_slope_scale = 0.0 206 | shadow/esm_multiplier = 60.0 207 | shadow/blur_passes = 1.0 208 | projector = null 209 | operator = 0 210 | shadow/mode = 0 211 | shadow/max_distance = 0.0 212 | shadow/split_weight = 0.5 213 | shadow/zoffset_scale = 2.0 214 | 215 | [node name="DrawCardialPath" type="Button" parent="."] 216 | 217 | focus/ignore_mouse = false 218 | focus/stop_mouse = true 219 | size_flags/horizontal = 2 220 | size_flags/vertical = 2 221 | margin/left = 3.0 222 | margin/top = 96.0 223 | margin/right = 240.0 224 | margin/bottom = 116.0 225 | toggle_mode = false 226 | enabled_focus_mode = 2 227 | shortcut = null 228 | text = "Make Path With Cardnial Directions" 229 | flat = false 230 | 231 | [node name="DrawAllPath" type="Button" parent="."] 232 | 233 | focus/ignore_mouse = false 234 | focus/stop_mouse = true 235 | size_flags/horizontal = 2 236 | size_flags/vertical = 2 237 | margin/left = 3.0 238 | margin/top = 125.0 239 | margin/right = 174.0 240 | margin/bottom = 145.0 241 | toggle_mode = false 242 | enabled_focus_mode = 2 243 | shortcut = null 244 | text = "Make With All Directions" 245 | flat = false 246 | 247 | [node name="Start" type="Panel" parent="."] 248 | 249 | editor/display_folded = true 250 | focus/ignore_mouse = false 251 | focus/stop_mouse = true 252 | size_flags/horizontal = 2 253 | size_flags/vertical = 2 254 | margin/left = 4.0 255 | margin/top = 12.0 256 | margin/right = 112.0 257 | margin/bottom = 67.0 258 | script/script = ExtResource( 2 ) 259 | 260 | [node name="cols" type="HSlider" parent="Start"] 261 | 262 | focus/ignore_mouse = false 263 | focus/stop_mouse = true 264 | size_flags/horizontal = 2 265 | size_flags/vertical = 0 266 | margin/left = 30.0 267 | margin/top = 17.0 268 | margin/right = 82.0 269 | margin/bottom = 33.0 270 | range/min = 0.0 271 | range/max = 9.0 272 | range/step = 1.0 273 | range/page = 0.0 274 | range/value = 1.0 275 | range/exp_edit = false 276 | range/rounded = true 277 | tick_count = 0 278 | ticks_on_borders = false 279 | focus_mode = 2 280 | 281 | [node name="rows" type="HSlider" parent="Start"] 282 | 283 | focus/ignore_mouse = false 284 | focus/stop_mouse = true 285 | size_flags/horizontal = 2 286 | size_flags/vertical = 0 287 | margin/left = 30.0 288 | margin/top = 36.0 289 | margin/right = 82.0 290 | margin/bottom = 52.0 291 | range/min = 0.0 292 | range/max = 9.0 293 | range/step = 1.0 294 | range/page = 0.0 295 | range/value = 1.0 296 | range/exp_edit = false 297 | range/rounded = true 298 | tick_count = 0 299 | ticks_on_borders = false 300 | focus_mode = 2 301 | 302 | [node name="Label" type="Label" parent="Start"] 303 | 304 | focus/ignore_mouse = true 305 | focus/stop_mouse = true 306 | size_flags/horizontal = 2 307 | size_flags/vertical = 0 308 | margin/left = 1.0 309 | margin/top = 19.0 310 | margin/right = 21.0 311 | margin/bottom = 33.0 312 | text = "Col" 313 | percent_visible = 1.0 314 | lines_skipped = 0 315 | max_lines_visible = -1 316 | 317 | [node name="Label1" type="Label" parent="Start"] 318 | 319 | focus/ignore_mouse = true 320 | focus/stop_mouse = true 321 | size_flags/horizontal = 2 322 | size_flags/vertical = 0 323 | margin/left = 1.0 324 | margin/top = 38.0 325 | margin/right = 27.0 326 | margin/bottom = 52.0 327 | text = "Row" 328 | percent_visible = 1.0 329 | lines_skipped = 0 330 | max_lines_visible = -1 331 | 332 | [node name="colValue" type="Label" parent="Start"] 333 | 334 | focus/ignore_mouse = true 335 | focus/stop_mouse = true 336 | size_flags/horizontal = 2 337 | size_flags/vertical = 0 338 | margin/left = 87.0 339 | margin/top = 18.0 340 | margin/right = 104.0 341 | margin/bottom = 32.0 342 | text = "1" 343 | align = 2 344 | percent_visible = 1.0 345 | lines_skipped = 0 346 | max_lines_visible = -1 347 | 348 | [node name="rowValue" type="Label" parent="Start"] 349 | 350 | focus/ignore_mouse = true 351 | focus/stop_mouse = true 352 | size_flags/horizontal = 2 353 | size_flags/vertical = 0 354 | margin/left = 88.0 355 | margin/top = 36.0 356 | margin/right = 105.0 357 | margin/bottom = 50.0 358 | text = "1" 359 | align = 2 360 | percent_visible = 1.0 361 | lines_skipped = 0 362 | max_lines_visible = -1 363 | 364 | [node name="Label 2" type="Label" parent="Start"] 365 | 366 | focus/ignore_mouse = true 367 | focus/stop_mouse = true 368 | size_flags/horizontal = 2 369 | size_flags/vertical = 0 370 | margin/left = 0.0 371 | margin/top = 0.0 372 | margin/right = 40.0 373 | margin/bottom = 14.0 374 | text = "Start" 375 | percent_visible = 1.0 376 | lines_skipped = 0 377 | max_lines_visible = -1 378 | 379 | [node name="End" type="Panel" parent="."] 380 | 381 | editor/display_folded = true 382 | focus/ignore_mouse = false 383 | focus/stop_mouse = true 384 | size_flags/horizontal = 2 385 | size_flags/vertical = 2 386 | margin/left = 129.0 387 | margin/top = 12.0 388 | margin/right = 237.0 389 | margin/bottom = 67.0 390 | script/script = ExtResource( 2 ) 391 | 392 | [node name="cols" type="HSlider" parent="End"] 393 | 394 | focus/ignore_mouse = false 395 | focus/stop_mouse = true 396 | size_flags/horizontal = 2 397 | size_flags/vertical = 0 398 | margin/left = 30.0 399 | margin/top = 17.0 400 | margin/right = 82.0 401 | margin/bottom = 33.0 402 | range/min = 0.0 403 | range/max = 9.0 404 | range/step = 1.0 405 | range/page = 0.0 406 | range/value = 1.0 407 | range/exp_edit = false 408 | range/rounded = true 409 | tick_count = 0 410 | ticks_on_borders = false 411 | focus_mode = 2 412 | 413 | [node name="rows" type="HSlider" parent="End"] 414 | 415 | focus/ignore_mouse = false 416 | focus/stop_mouse = true 417 | size_flags/horizontal = 2 418 | size_flags/vertical = 0 419 | margin/left = 30.0 420 | margin/top = 36.0 421 | margin/right = 82.0 422 | margin/bottom = 52.0 423 | range/min = 0.0 424 | range/max = 9.0 425 | range/step = 1.0 426 | range/page = 0.0 427 | range/value = 1.0 428 | range/exp_edit = false 429 | range/rounded = true 430 | tick_count = 0 431 | ticks_on_borders = false 432 | focus_mode = 2 433 | 434 | [node name="Label" type="Label" parent="End"] 435 | 436 | focus/ignore_mouse = true 437 | focus/stop_mouse = true 438 | size_flags/horizontal = 2 439 | size_flags/vertical = 0 440 | margin/left = 1.0 441 | margin/top = 19.0 442 | margin/right = 21.0 443 | margin/bottom = 33.0 444 | text = "Col" 445 | percent_visible = 1.0 446 | lines_skipped = 0 447 | max_lines_visible = -1 448 | 449 | [node name="Label1" type="Label" parent="End"] 450 | 451 | focus/ignore_mouse = true 452 | focus/stop_mouse = true 453 | size_flags/horizontal = 2 454 | size_flags/vertical = 0 455 | margin/left = 1.0 456 | margin/top = 38.0 457 | margin/right = 27.0 458 | margin/bottom = 52.0 459 | text = "Row" 460 | percent_visible = 1.0 461 | lines_skipped = 0 462 | max_lines_visible = -1 463 | 464 | [node name="colValue" type="Label" parent="End"] 465 | 466 | focus/ignore_mouse = true 467 | focus/stop_mouse = true 468 | size_flags/horizontal = 2 469 | size_flags/vertical = 0 470 | margin/left = 87.0 471 | margin/top = 18.0 472 | margin/right = 104.0 473 | margin/bottom = 32.0 474 | text = "1" 475 | align = 2 476 | percent_visible = 1.0 477 | lines_skipped = 0 478 | max_lines_visible = -1 479 | 480 | [node name="rowValue" type="Label" parent="End"] 481 | 482 | focus/ignore_mouse = true 483 | focus/stop_mouse = true 484 | size_flags/horizontal = 2 485 | size_flags/vertical = 0 486 | margin/left = 88.0 487 | margin/top = 36.0 488 | margin/right = 105.0 489 | margin/bottom = 50.0 490 | text = "1" 491 | align = 2 492 | percent_visible = 1.0 493 | lines_skipped = 0 494 | max_lines_visible = -1 495 | 496 | [node name="Label 2" type="Label" parent="End"] 497 | 498 | focus/ignore_mouse = true 499 | focus/stop_mouse = true 500 | size_flags/horizontal = 2 501 | size_flags/vertical = 0 502 | margin/left = 0.0 503 | margin/top = 0.0 504 | margin/right = 40.0 505 | margin/bottom = 14.0 506 | text = "End" 507 | percent_visible = 1.0 508 | lines_skipped = 0 509 | max_lines_visible = -1 510 | 511 | [node name="AddObstacle" type="Panel" parent="."] 512 | 513 | editor/display_folded = true 514 | focus/ignore_mouse = false 515 | focus/stop_mouse = true 516 | size_flags/horizontal = 2 517 | size_flags/vertical = 2 518 | margin/left = 5.0 519 | margin/top = 166.0 520 | margin/right = 158.0 521 | margin/bottom = 221.0 522 | script/script = ExtResource( 2 ) 523 | 524 | [node name="cols" type="HSlider" parent="AddObstacle"] 525 | 526 | focus/ignore_mouse = false 527 | focus/stop_mouse = true 528 | size_flags/horizontal = 2 529 | size_flags/vertical = 0 530 | margin/left = 30.0 531 | margin/top = 17.0 532 | margin/right = 82.0 533 | margin/bottom = 33.0 534 | range/min = 0.0 535 | range/max = 9.0 536 | range/step = 1.0 537 | range/page = 0.0 538 | range/value = 1.0 539 | range/exp_edit = false 540 | range/rounded = true 541 | tick_count = 0 542 | ticks_on_borders = false 543 | focus_mode = 2 544 | 545 | [node name="rows" type="HSlider" parent="AddObstacle"] 546 | 547 | focus/ignore_mouse = false 548 | focus/stop_mouse = true 549 | size_flags/horizontal = 2 550 | size_flags/vertical = 0 551 | margin/left = 30.0 552 | margin/top = 36.0 553 | margin/right = 82.0 554 | margin/bottom = 52.0 555 | range/min = 0.0 556 | range/max = 9.0 557 | range/step = 1.0 558 | range/page = 0.0 559 | range/value = 1.0 560 | range/exp_edit = false 561 | range/rounded = true 562 | tick_count = 0 563 | ticks_on_borders = false 564 | focus_mode = 2 565 | 566 | [node name="Label" type="Label" parent="AddObstacle"] 567 | 568 | focus/ignore_mouse = true 569 | focus/stop_mouse = true 570 | size_flags/horizontal = 2 571 | size_flags/vertical = 0 572 | margin/left = 1.0 573 | margin/top = 19.0 574 | margin/right = 21.0 575 | margin/bottom = 33.0 576 | text = "Col" 577 | percent_visible = 1.0 578 | lines_skipped = 0 579 | max_lines_visible = -1 580 | 581 | [node name="Label1" type="Label" parent="AddObstacle"] 582 | 583 | focus/ignore_mouse = true 584 | focus/stop_mouse = true 585 | size_flags/horizontal = 2 586 | size_flags/vertical = 0 587 | margin/left = 1.0 588 | margin/top = 38.0 589 | margin/right = 27.0 590 | margin/bottom = 52.0 591 | text = "Row" 592 | percent_visible = 1.0 593 | lines_skipped = 0 594 | max_lines_visible = -1 595 | 596 | [node name="colValue" type="Label" parent="AddObstacle"] 597 | 598 | focus/ignore_mouse = true 599 | focus/stop_mouse = true 600 | size_flags/horizontal = 2 601 | size_flags/vertical = 0 602 | margin/left = 87.0 603 | margin/top = 18.0 604 | margin/right = 104.0 605 | margin/bottom = 32.0 606 | text = "1" 607 | align = 2 608 | percent_visible = 1.0 609 | lines_skipped = 0 610 | max_lines_visible = -1 611 | 612 | [node name="rowValue" type="Label" parent="AddObstacle"] 613 | 614 | focus/ignore_mouse = true 615 | focus/stop_mouse = true 616 | size_flags/horizontal = 2 617 | size_flags/vertical = 0 618 | margin/left = 88.0 619 | margin/top = 36.0 620 | margin/right = 105.0 621 | margin/bottom = 50.0 622 | text = "1" 623 | align = 2 624 | percent_visible = 1.0 625 | lines_skipped = 0 626 | max_lines_visible = -1 627 | 628 | [node name="Label 2" type="Label" parent="AddObstacle"] 629 | 630 | focus/ignore_mouse = true 631 | focus/stop_mouse = true 632 | size_flags/horizontal = 2 633 | size_flags/vertical = 0 634 | margin/left = 0.0 635 | margin/top = 0.0 636 | margin/right = 40.0 637 | margin/bottom = 14.0 638 | text = "Add Obstacle" 639 | percent_visible = 1.0 640 | lines_skipped = 0 641 | max_lines_visible = -1 642 | 643 | [node name="AddObstacleButton" type="Button" parent="AddObstacle"] 644 | 645 | focus/ignore_mouse = false 646 | focus/stop_mouse = true 647 | size_flags/horizontal = 2 648 | size_flags/vertical = 2 649 | margin/left = 110.0 650 | margin/top = 22.0 651 | margin/right = 147.0 652 | margin/bottom = 42.0 653 | toggle_mode = false 654 | enabled_focus_mode = 2 655 | shortcut = null 656 | text = "Add" 657 | flat = false 658 | 659 | 660 | --------------------------------------------------------------------------------