Region pathfinding von einem seperaten Projekt rein gepastet. Wird noch nicht funktionieren.

This commit is contained in:
Joa Frehner 2023-11-08 16:20:06 +01:00
parent 285c302f3d
commit 2a90bfaaad
5 changed files with 379 additions and 138 deletions

View File

@ -0,0 +1,3 @@
source_md5="a47db4bc7df31e2470e9663216138fec"
dest_md5="ff372a0a033369ebd292e33a30b28788"

View File

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/Leerzeichen.bmp-0e69595e5ec48ab400945277c9828255.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://font/Leerzeichen.bmp"
dest_files=[ "res://.import/Leerzeichen.bmp-0e69595e5ec48ab400945277c9828255.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@ -1,35 +1,345 @@
extends Node2D
var inventory = {}
var tiles = []
# Called when the node enters the scene tree for the first time.
func _ready():
PlayerManager.subMenuOpen = false
pass # Replace with function body.
var superTiles=[]
func Buildings(tile, army):
# if region.faction == army.faction or worldtile != buildings(): #RegionOwner or worldtile == leer?
# if setPresent() == true:
return
func mine(tile, army):
if Buildings(tile, army) == true:
if army.inventory.eschenwood() >= 30 or army.inventory.xp() >= 200: #inventory not properly defined yet, might need change
# var minekoordinate = Player.Tile #Player.Tile = Aktuelles Feld auf dem der Spieler sein soll.
# minekoordinate = earth.Tile #Building Sprite Tile
var buildingtime = 5
var finish = buildingtime + ['turn'] #finish = Gebäude fertig
if finish == ['turn']:
preload("res://region/MineSmall.tscn").instance()
func endTurn():
pass
var tileRect = Vector2(10,11)
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass
var boardUnits = [
{
"coords":Vector2(0,4),
"faction":"playerFaction",
"superUnit":false,
"type":"default",
"id":14231,
"maxMoveAp": 10,
"maxAp": 10,
"moveAp": 10,
"ap": 10,
},
{
"coords":Vector2(6,4),
"faction":"playerFaction",
"superUnit":true,
"type":"default",
"id":14232,
"maxMoveAp": 10,
"maxAp": 10,
"moveAp": 10,
"ap": 10,
},
{
"coords":Vector2(0,2),
"faction":"enemyFaction",
"superUnit":false,
"type":"default",
"id":14233,
"maxMoveAp": 10,
"maxAp": 10,
"moveAp": 10,
"ap": 10,
},
]
func _ready():#this mostly just builds a bunch of stuff
buildWorld()
func buildWorld():
tiles = buildTiles(tileRect.x,tileRect.y)
superTiles = buildSuperTiles(tiles)
func nextRound():#this sends a nextRound signal to units on the board and refreshes their ap.
print("next turn")
for unit in boardUnits:
unit.moveAp = unit.maxMoveAp
unit.ap = unit.maxAp
print(unit.ap)
func buildTiles(x,y):#this creates the tiles array and adds all the tile-dictionaries. Also sets ground-type.
var tilesToReturn = []
var currentX = 0
var currentY = 0
var roadTiles = [] #client.get_node("TileMap").roadTiles
roadTiles.append(Vector2(2,4))
roadTiles.append(Vector2(1,4))
roadTiles.append(Vector2(3,4))
roadTiles.append(Vector2(4,4))
var mountainTiles = []
mountainTiles.append(Vector2(2,3))
mountainTiles.append(Vector2(1,3))
mountainTiles.append(Vector2(3,3))
mountainTiles.append(Vector2(4,3))
var type = "grass"
for i in x:
var column = []
currentY = 0
for z in y:
type = "grass"
if roadTiles.has(Vector2(currentX,currentY)):
type = "road"
if mountainTiles.has(Vector2(currentX,currentY)):
type = "mountain"
var currentTile = {
"coords":null,
"vertices":[],
"verticeExplored":false,
"verticeDistance":[INF,INF,INF,INF,INF,INF,INF,INF],
"type":"grass",
"route":[]
}
currentTile.type = type
currentTile.coords = Vector2(currentX,currentY)
column.append(currentTile.duplicate())
currentY += 1
tilesToReturn.append(column)
currentX += 1
return setVertices(tilesToReturn)
func setVertices(templateTiles):#this finds the connection a tile has to other tiles. name is bad.
var tileToAdapt
var x = 0
for row in templateTiles:
var y = 0
for line in row:
tileToAdapt = templateTiles[x][y]
# print("\n")
# print("x:",x, " y:",y)
if templateTiles.size() > x+1:
if x ==0 and y == 2:
pass
if templateTiles[x].size() > (y+1):
setDistance(templateTiles[x][y+1], tileToAdapt, 0, false)
if templateTiles[x].size() > (x+1) and templateTiles[x+1].size() > (y+1):#returns null sometimes??
setDistance(templateTiles[x+1][y+1], tileToAdapt, 1, true)
if templateTiles.size() > (x+1):
setDistance(templateTiles[x+1][y], tileToAdapt, 2, false)
if templateTiles[x].size() > (x+1) and templateTiles[x+1].size() > (y-1)and y-1 >=0:
setDistance(templateTiles[x+1][y-1], tileToAdapt, 3, true)
if templateTiles.size() > (y-1) and y-1 >=0:
setDistance(templateTiles[x][y-1], tileToAdapt, 4, false)
if templateTiles[x].size() > (x-1) and templateTiles[x-1].size() > (y-1)and x-1 >=0 and y-1 >=0:
setDistance(templateTiles[x-1][y-1], tileToAdapt, 5, true)
if templateTiles.size() > (x-1) and x-1 >=0:
setDistance(templateTiles[x-1][y], tileToAdapt, 6, false)
if templateTiles[x].size() > (x-1) and templateTiles[x-1].size() > (y+1)and x-1 >=0:
setDistance(templateTiles[x-1][y+1], tileToAdapt, 7, true)
# print("Tiles procedurally: ",tileToAdapt)
y+=1
x+=1
return templateTiles
func setDistance(target, origin, index, diagonal = false):#this sets the distances to the connections between tiles.
if not diagonal:
match target.type:
"grass":
origin.verticeDistance[index] = 5
"road":
origin.verticeDistance[index] = 2
"mountain":
origin.verticeDistance[index] = INF
"enemyOccupied":
origin.verticeDistance[index] = INF
else:
match target.type:
"grass":
origin.verticeDistance[index] = 8
"road":
origin.verticeDistance[index] = 3
"mountain":
origin.verticeDistance[index] = INF
"enemyOccupied":
origin.verticeDistance[index] = INF
func buildSuperTiles(templateTiles):
var superTilesToReturn = []
var x = 0
var y = 0
for i in range(tileRect.x-1):
var column=[]
for line in range(tileRect.y-1):
var newSuperTile = {
"coords":null,
"vertices":[],
"verticeExplored":false,
"verticeDistance":[INF,INF,INF,INF,INF,INF,INF,INF],
"type":"grass",
"route":[],
"underTiles":[]
}
newSuperTile.underTiles.append(templateTiles[x][y])
newSuperTile.underTiles.append(templateTiles[x][y+1])
newSuperTile.underTiles.append(templateTiles[x+1][y])
newSuperTile.underTiles.append(templateTiles[x+1][y+1])
newSuperTile.coords = Vector2(x,y)
column.append(newSuperTile)
y+=1
superTilesToReturn.append(column)
x+=1
y=0
return setSuperVertices(superTilesToReturn)
func setSuperVertices(templateTiles):
var tileToAdapt
var x = 0
for row in templateTiles:
var y = 0
for line in row:
tileToAdapt = templateTiles[x][y]
# print("\n")
# print("x:",x, " y:",y)
if templateTiles.size() > x+1:
if templateTiles[x].size() > (y+1):
setSuperDistance(templateTiles[x][y+1], tileToAdapt, 0, false)
if templateTiles[x].size() > (x+1) and templateTiles[x+1].size() > (y+1):
setSuperDistance(templateTiles[x+1][y+1], tileToAdapt, 1, true)
if templateTiles.size() > (x+1):
setSuperDistance(templateTiles[x+1][y], tileToAdapt, 2, false)
if templateTiles[x].size() > (x+1) and templateTiles[x+1].size() > (y-1)and y-1 >=0:
setSuperDistance(templateTiles[x+1][y-1], tileToAdapt, 3, true)
if templateTiles.size() > (y-1)and y-1 >=0:
setSuperDistance(templateTiles[x][y-1], tileToAdapt, 4, false)
if templateTiles[x].size() > (x-1) and templateTiles[x-1].size() > (y-1)and x-1 >=0 and y-1 >=0:
setSuperDistance(templateTiles[x-1][y-1], tileToAdapt, 5, true)
if templateTiles.size() > (x-1)and x-1 >=0:
setSuperDistance(templateTiles[x-1][y], tileToAdapt, 6, false)
if templateTiles[x].size() > (x-1) and templateTiles[x-1].size() > (y+1)and x-1 >=0:
setSuperDistance(templateTiles[x-1][y+1], tileToAdapt, 7, true)
# print("Tiles procedurally: ",tileToAdapt)
y+=1
x+=1
return templateTiles
func setSuperDistance(target,origin,index,diagonal = false):
var totalDistance = 0
for tile in target.underTiles:
if not diagonal:
match tile.type:
"grass":
totalDistance += 5
"road":
totalDistance += 2
"mountain":
totalDistance += INF
"enemyOccupied":
totalDistance += INF
else:
match tile.type:
"grass":
totalDistance += 8
"road":
totalDistance += 3
"mountain":
totalDistance += INF
"enemyOccupied":
totalDistance += INF
origin.verticeDistance[index] = totalDistance/target.underTiles.size()
func moveUnit(path,unitID):
var apCost = 0
var unit = getUnitById(unitID)
var occupiedTiles=getOccupiedTiles(unit)[0]
var enemyOccupiedTiles=getOccupiedTiles(unit)[1]
var tiles = addEnemyOccupiedTilesToMap(enemyOccupiedTiles)
# lie check
if occupiedTiles.has(path[-1]):
return false
if unit.superUnit == true:
if occupiedTiles.has(path[-1]+Vector2(0,0)) or occupiedTiles.has(path[-1]+Vector2(1,0)) or occupiedTiles.has(path[-1]+Vector2(0,1)) or occupiedTiles.has(path[-1]+Vector2(1,1)):
return false
# overlap check
if path[0] != unit.coords:
return false
for i in range(path.size()-1):
var coordDirection = Vector2((path[i+1].x - path[i].x) , (path[i+1].y-path[i].y))
# movement check
if abs(path[i].x - path[i+1].x)>1 and abs(path[i].y - path[i+1].y)>1:
return false
# distance check
var currTile = tiles[path[i].x][path[i].y]
var nextTile = tiles[path[i+1].x][path[i+1].y]
var directionIndex
if coordDirection == Vector2(0,1):
directionIndex = 0
if coordDirection == Vector2(1,1):
directionIndex = 1
if coordDirection == Vector2(1,0):
directionIndex = 2
if coordDirection == Vector2(1,-1):
directionIndex = 3
if coordDirection == Vector2(0,-1):
directionIndex = 4
if coordDirection == Vector2(-1,-1):
directionIndex = 5
if coordDirection == Vector2(-1,0):
directionIndex = 6
if coordDirection == Vector2(-1,1):
directionIndex = 7
apCost += currTile.verticeDistance[directionIndex]
# collision check
if unit.superUnit == true:
if enemyOccupiedTiles.has(path[i+1]+Vector2(0,0)) or enemyOccupiedTiles.has(path[i+1]+Vector2(1,0)) or enemyOccupiedTiles.has(path[i+1]+Vector2(0,1)) or enemyOccupiedTiles.has(path[i+1]+Vector2(1,1)):
return false
else:
if enemyOccupiedTiles.has(path[i+1]):
return false
if apCost > unit.moveAp+unit.ap:
return false
if unit.moveAp < apCost:
unit.ap -= (apCost-unit.moveAp)
unit.moveAp = 0
else:
unit.moveAp -= apCost
unit.coords = path[-1]
for boardUnit in boardUnits:
if boardUnit.id == unit.id:
boardUnit.coords = unit.coords
print(path," NEXT ",unit.coords)
return [path, apCost]
# return validated path and ap and then execute it
func getUnitById(unitId):
for unit in boardUnits:
if unit.id == unitId:
return unit
return null
func getOccupiedTiles(forUnit):#looks into boardUnits to find their position and adds each of them to the occupiedTiles array.
var selectedFaction
if forUnit == null:
selectedFaction = "playerFaction"
else:
selectedFaction = forUnit.faction
var occupiedTiles = []
var enemyOccupiedTiles = []
for unit in boardUnits:
if unit != forUnit:
if !unit.superUnit:
occupiedTiles.append(unit.coords)
else:
occupiedTiles.append(Vector2(unit.coords.x, unit.coords.y))
occupiedTiles.append(Vector2(unit.coords.x, unit.coords.y+1))
occupiedTiles.append(Vector2(unit.coords.x+1, unit.coords.y))
occupiedTiles.append(Vector2(unit.coords.x+1, unit.coords.y+1))
if PlayerManager.checkdiplo(selectedFaction, unit.faction) == "enemies":
if !unit.superUnit:
enemyOccupiedTiles.append(unit.coords)
else:
enemyOccupiedTiles.append(Vector2(unit.coords.x, unit.coords.y))
enemyOccupiedTiles.append(Vector2(unit.coords.x, unit.coords.y+1))
enemyOccupiedTiles.append(Vector2(unit.coords.x+1, unit.coords.y))
enemyOccupiedTiles.append(Vector2(unit.coords.x+1, unit.coords.y+1))
return [occupiedTiles,enemyOccupiedTiles]
func addEnemyOccupiedTilesToMap(enemyOccupiedTiles):#this creates the tiles array and adds all the tile-dictionaries. Also sets ground-type.
var mapTiles = tiles.duplicate(true)
var currentX = 0
for tile in enemyOccupiedTiles:
mapTiles[tile.x][tile.y].type = "enemyOccupied"
return mapTiles
func getTiles(unit):
if unit == null or !unit.superUnit:
return setVertices(addEnemyOccupiedTilesToMap(getOccupiedTiles(unit)[1]))
else:
return buildSuperTiles(setVertices(addEnemyOccupiedTilesToMap(getOccupiedTiles(unit)[1])))

View File

@ -1,11 +1,6 @@
[gd_scene load_steps=16 format=2]
[gd_scene load_steps=9 format=2]
[ext_resource path="res://region/Region.gd" type="Script" id=1]
[ext_resource path="res://images/region/regiontiles.png" type="Texture" id=2]
[ext_resource path="res://region/regionGround.gd" type="Script" id=3]
[ext_resource path="res://army/Stack2x1.tscn" type="PackedScene" id=4]
[ext_resource path="res://region/ressourcenodes/Mountain.tscn" type="PackedScene" id=5]
[ext_resource path="res://region/building/Building.tscn" type="PackedScene" id=6]
[ext_resource path="res://Camera2D.gd" type="Script" id=7]
[ext_resource path="res://region/RegionUI.tscn" type="PackedScene" id=8]
[ext_resource path="res://menues/smallbtn.tscn" type="PackedScene" id=9]
@ -13,112 +8,10 @@
[ext_resource path="res://menues/toggleResearch.gd" type="Script" id=11]
[ext_resource path="res://menues/research.tscn" type="PackedScene" id=12]
[ext_resource path="res://items/Item.tscn" type="PackedScene" id=13]
[ext_resource path="res://region/MineSmall.tscn" type="PackedScene" id=14]
[sub_resource type="TileSet" id=1]
0/name = "regiontiles.png 0"
0/texture = ExtResource( 2 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 128, 0, 128, 128 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shape_offset = Vector2( 0, 0 )
0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
0/shape_one_way = false
0/shape_one_way_margin = 0.0
0/shapes = [ ]
0/z_index = 0
1/name = "regiontiles.png 1"
1/texture = ExtResource( 2 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 480, 0, 128, 128 )
1/tile_mode = 0
1/occluder_offset = Vector2( 0, 0 )
1/navigation_offset = Vector2( 0, 0 )
1/shape_offset = Vector2( 0, 0 )
1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
1/shape_one_way = false
1/shape_one_way_margin = 0.0
1/shapes = [ ]
1/z_index = 0
2/name = "regiontiles.png 2"
2/texture = ExtResource( 2 )
2/tex_offset = Vector2( 0, 0 )
2/modulate = Color( 1, 1, 1, 1 )
2/region = Rect2( 224, 384, 128, 128 )
2/tile_mode = 0
2/occluder_offset = Vector2( 0, 0 )
2/navigation_offset = Vector2( 0, 0 )
2/shape_offset = Vector2( 0, 0 )
2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
2/shape_one_way = false
2/shape_one_way_margin = 0.0
2/shapes = [ ]
2/z_index = 0
3/name = "regiontiles.png 3"
3/texture = ExtResource( 2 )
3/tex_offset = Vector2( 0, 0 )
3/modulate = Color( 1, 1, 1, 1 )
3/region = Rect2( 0, 128, 128, 128 )
3/tile_mode = 0
3/occluder_offset = Vector2( 0, 0 )
3/navigation_offset = Vector2( 0, 0 )
3/shape_offset = Vector2( 0, 0 )
3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
3/shape_one_way = false
3/shape_one_way_margin = 0.0
3/shapes = [ ]
3/z_index = 0
4/name = "regiontiles.png 4"
4/texture = ExtResource( 2 )
4/tex_offset = Vector2( 0, 0 )
4/modulate = Color( 1, 1, 1, 1 )
4/region = Rect2( 128, 128, 128, 128 )
4/tile_mode = 0
4/occluder_offset = Vector2( 0, 0 )
4/navigation_offset = Vector2( 0, 0 )
4/shape_offset = Vector2( 0, 0 )
4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
4/shape_one_way = false
4/shape_one_way_margin = 0.0
4/shapes = [ ]
4/z_index = 0
[node name="Region" type="Node2D"]
script = ExtResource( 1 )
[node name="ground" type="TileMap" parent="."]
tile_set = SubResource( 1 )
cell_size = Vector2( 128, 128 )
format = 1
tile_data = PoolIntArray( -65537, 1, 0, -131072, 1, 0, -131071, 1, 0, -131070, 1, 0, -131069, 1, 0, -131068, 1, 0, -131067, 1, 0, -131066, 1, 0, -131065, 1, 0, -131064, 1, 0, -131063, 1, 0, -131062, 1, 0, -131061, 1, 0, -131060, 1, 0, -131059, 1, 0, -131058, 1, 0, -1, 1, 0, -65536, 1, 0, -65535, 1, 0, -65534, 1, 0, -65533, 1, 0, -65532, 1, 0, -65531, 1, 0, -65530, 1, 0, -65529, 1, 0, -65528, 1, 0, -65527, 1, 0, -65526, 1, 0, -65525, 1, 0, -65524, 1, 0, -65523, 1, 0, -65522, 1, 0, -65521, 1, 0, -65520, 1, 0, 65535, 1, 0, 0, 0, 0, 1, 0, 0, 2, 2, 0, 3, 2, 0, 4, 2, 0, 5, 2, 0, 6, 2, 0, 7, 2, 0, 8, 1, 0, 9, 1, 0, 10, 1, 0, 11, 1, 0, 12, 1, 0, 13, 1, 0, 14, 1, 0, 15, 1, 0, 16, 1, 0, 131071, 1, 0, 65536, 0, 0, 65537, 0, 0, 65538, 2, 0, 65539, 2, 0, 65540, 2, 0, 65541, 2, 0, 65542, 2, 0, 65543, 2, 0, 65544, 1, 0, 65545, 1, 0, 65546, 1, 0, 65547, 1, 0, 65548, 1, 0, 65549, 1, 0, 65550, 1, 0, 65551, 1, 0, 65552, 1, 0, 196607, 1, 0, 131072, 0, 0, 131073, 0, 0, 131074, 2, 0, 131075, 4, 0, 131076, 4, 0, 131077, 0, 0, 131078, 2, 0, 131079, 2, 0, 131080, 1, 0, 131081, 1, 0, 131082, 1, 0, 131083, 1, 0, 131084, 1, 0, 131085, 1, 0, 131086, 1, 0, 131087, 1, 0, 131088, 1, 0, 131089, 1, 0, 131090, 1, 0, 131091, 1, 0, 131092, 1, 0, 131093, 1, 0, 131094, 1, 0, 262143, 1, 0, 196608, 4, 0, 196609, 4, 0, 196610, 4, 0, 196611, 4, 0, 196612, 4, 0, 196613, 0, 0, 196614, 2, 0, 196615, 2, 0, 196616, 1, 0, 196617, 1, 0, 196618, 1, 0, 196619, 1, 0, 196620, 1, 0, 196621, 1, 0, 196622, 1, 0, 196623, 1, 0, 196625, 1, 0, 196626, 1, 0, 196627, 1, 0, 196628, 1, 0, 196629, 1, 0, 196630, 1, 0, 327678, 1, 0, 327679, 1, 0, 262144, 0, 0, 262145, 0, 0, 262146, 3, 0, 262147, 3, 0, 262148, 3, 0, 262149, 0, 0, 262150, 1, 0, 262151, 1, 0, 262152, 1, 0, 262153, 1, 0, 262154, 1, 0, 262155, 1, 0, 262156, 1, 0, 262157, 1, 0, 262158, 1, 0, 262159, 1, 0, 393214, 1, 0, 393215, 1, 0, 327680, 1, 0, 327681, 1, 0, 327682, 1, 0, 327683, 1, 0, 327684, 1, 0, 327685, 1, 0, 327686, 1, 0, 327687, 1, 0, 327688, 1, 0, 327689, 1, 0, 327690, 1, 0, 327692, 1, 0, 327693, 1, 0, 327694, 1, 0, 327695, 1, 0, 458750, 1, 0, 458751, 1, 0, 393216, 1, 0, 393217, 1, 0, 393218, 1, 0, 393219, 1, 0, 393220, 1, 0, 393221, 1, 0, 393222, 1, 0, 393223, 1, 0, 393224, 1, 0, 393225, 1, 0, 393226, 1, 0, 393227, 1, 0, 393228, 1, 0, 393229, 1, 0, 393230, 1, 0, 393231, 1, 0, 524287, 1, 0, 458752, 1, 0, 458753, 1, 0, 458754, 1, 0, 458755, 1, 0, 458756, 1, 0, 458757, 1, 0, 458758, 1, 0, 458759, 1, 0, 458760, 1, 0, 458761, 1, 0, 458762, 1, 0, 458763, 1, 0, 458764, 1, 0, 458765, 1, 0, 458766, 1, 0, 458767, 1, 0, 589823, 1, 0, 524288, 1, 0, 524289, 1, 0, 524290, 1, 0, 524291, 1, 0, 524292, 1, 0, 524293, 1, 0, 524294, 1, 0, 524295, 1, 0, 524296, 1, 0, 524297, 1, 0, 524298, 1, 0, 524299, 1, 0, 524300, 1, 0, 524301, 1, 0, 524302, 1, 0, 524303, 1, 0, 655359, 1, 0, 589824, 1, 0, 589825, 1, 0, 589826, 1, 0, 589827, 1, 0, 589828, 1, 0, 589829, 1, 0, 589831, 1, 0, 589832, 1, 0, 589833, 1, 0, 589834, 1, 0, 589835, 1, 0, 655367, 1, 0 )
script = ExtResource( 3 )
[node name="units" type="Node" parent="ground"]
[node name="Stack" parent="ground/units" instance=ExtResource( 4 )]
position = Vector2( 128, 256 )
[node name="ressources" type="Node" parent="ground"]
[node name="Mountain" parent="ground/ressources" instance=ExtResource( 5 )]
position = Vector2( 256, 768 )
[node name="buildings" type="Node" parent="ground"]
[node name="Node2D" parent="ground/buildings" instance=ExtResource( 6 )]
position = Vector2( 730, 700 )
[node name="mine" type="Node2D" parent="ground/buildings"]
position = Vector2( 574, 569 )
[node name="MineSmall" parent="ground/buildings/mine" instance=ExtResource( 14 )]
position = Vector2( 1, 0 )
scale = Vector2( 0.427155, 0.427155 )
[node name="Camera2D" type="Camera2D" parent="."]
current = true
drag_margin_left = 0.0