This commit is contained in:
Relintai 2024-09-26 21:00:58 +02:00
parent f2d25ec2ec
commit f92a58b08d
288 changed files with 3155 additions and 0 deletions

16
wfc/.gitignore vendored Normal file
View File

@ -0,0 +1,16 @@
\exports/
\.import/
addons/scene_notes/
addons/todo/
scene-notes\.ini
todo\.cache\.ini
todo\.config\.ini
export_presets\.cfg
export.cfg

22
wfc/LICENSE Normal file
View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2022-present Péter Magyar
Copyright (c) 2018-2019 Mathieu Fehr and Nathanaël Courant
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

143
wfc/OverlappingDemos.tscn Normal file
View File

@ -0,0 +1,143 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://TextureRect.gd" type="Script" id=1]
[ext_resource path="res://new_buttongroup.tres" type="ButtonGroup" id=2]
[node name="Control" type="PanelContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 1 )
source_image_rect_path = NodePath("VBoxContainer2/VBoxContainer/HBoxContainer/TextureRect")
result_image_rect_path = NodePath("VBoxContainer2/VBoxContainer/HBoxContainer2/TextureRect")
settings_label_path = NodePath("VBoxContainer2/VBoxContainer/HBoxContainer3/ScrollContainer/Label2")
[node name="VBoxContainer2" type="VBoxContainer" parent="."]
margin_left = 7.0
margin_top = 7.0
margin_right = 1017.0
margin_bottom = 593.0
[node name="VBoxContainer" type="HBoxContainer" parent="VBoxContainer2"]
margin_right = 1010.0
margin_bottom = 562.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="HBoxContainer" type="VBoxContainer" parent="VBoxContainer2/VBoxContainer"]
margin_right = 300.0
margin_bottom = 562.0
[node name="Label" type="Label" parent="VBoxContainer2/VBoxContainer/HBoxContainer"]
margin_right = 300.0
margin_bottom = 14.0
text = "Source Image"
[node name="TextureRect" type="TextureRect" parent="VBoxContainer2/VBoxContainer/HBoxContainer"]
margin_top = 18.0
margin_right = 300.0
margin_bottom = 318.0
rect_min_size = Vector2( 300, 300 )
expand = true
[node name="HBoxContainer2" type="VBoxContainer" parent="VBoxContainer2/VBoxContainer"]
margin_left = 304.0
margin_right = 604.0
margin_bottom = 562.0
[node name="Label" type="Label" parent="VBoxContainer2/VBoxContainer/HBoxContainer2"]
margin_right = 300.0
margin_bottom = 14.0
text = "Generated Image"
[node name="TextureRect" type="TextureRect" parent="VBoxContainer2/VBoxContainer/HBoxContainer2"]
margin_top = 18.0
margin_right = 300.0
margin_bottom = 318.0
rect_min_size = Vector2( 300, 300 )
expand = true
[node name="Label2" type="Label" parent="VBoxContainer2/VBoxContainer/HBoxContainer2"]
margin_top = 322.0
margin_right = 300.0
margin_bottom = 387.0
text = "Note: If an image does not appear here, that means the generation has failed. At this stage it's likely a bug. Try clicking randomize a few times."
autowrap = true
[node name="HBoxContainer3" type="VBoxContainer" parent="VBoxContainer2/VBoxContainer"]
margin_left = 608.0
margin_right = 1010.0
margin_bottom = 562.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Label" type="Label" parent="VBoxContainer2/VBoxContainer/HBoxContainer3"]
margin_right = 402.0
margin_bottom = 14.0
text = "Settings"
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer2/VBoxContainer/HBoxContainer3"]
margin_top = 18.0
margin_right = 402.0
margin_bottom = 562.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Label2" type="Label" parent="VBoxContainer2/VBoxContainer/HBoxContainer3/ScrollContainer"]
margin_right = 402.0
margin_bottom = 544.0
size_flags_horizontal = 3
size_flags_vertical = 7
autowrap = true
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer2"]
margin_top = 566.0
margin_right = 1010.0
margin_bottom = 586.0
alignment = 1
[node name="Button" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 296.0
margin_right = 336.0
margin_bottom = 20.0
text = "Prev"
[node name="Button5" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 340.0
margin_right = 423.0
margin_bottom = 20.0
text = "Randomize"
[node name="Button2" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 427.0
margin_right = 469.0
margin_bottom = 20.0
text = "Next"
[node name="Control" type="Control" parent="VBoxContainer2/HBoxContainer"]
margin_left = 473.0
margin_right = 573.0
margin_bottom = 20.0
rect_min_size = Vector2( 100, 0 )
[node name="Button3" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 577.0
margin_right = 666.0
margin_bottom = 20.0
toggle_mode = true
pressed = true
group = ExtResource( 2 )
text = "Overlapping"
[node name="Button4" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 670.0
margin_right = 713.0
margin_bottom = 20.0
toggle_mode = true
group = ExtResource( 2 )
text = "Tiled"
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Button" to="." method="_on_prev_pressed"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Button5" to="." method="_on_randomize_pressed"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Button2" to="." method="_on_next_pressed"]
[connection signal="toggled" from="VBoxContainer2/HBoxContainer/Button3" to="." method="_on_overlapping_toggled"]
[connection signal="toggled" from="VBoxContainer2/HBoxContainer/Button4" to="." method="_on_tiled_toggled"]

14
wfc/README.md Normal file
View File

@ -0,0 +1,14 @@
# Demo projects for the engine's wfc module
from: https://github.com/Relintai/wfc_module_samples
The engine's wfc module is a port of fast-wfc
# fast-wfc
https://github.com/math-fehr/fast-wfc
An implementation of [Wave Function Collapse](https://github.com/mxgmn/WaveFunctionCollapse) with a focus on performance.
It was called fast-wfc because at the time it introduced optimizations improving the execution time by an order of magnitude.

404
wfc/TextureRect.gd Normal file
View File

@ -0,0 +1,404 @@
extends Control
export(int, "Overlapping,Tiled") var rect_type : int
export(NodePath) var source_image_rect_path : NodePath
export(NodePath) var result_image_rect_path : NodePath
export(NodePath) var settings_label_path : NodePath
var _current_data_index : int = -1
enum SampleDataType {
SAMPLE_DATA_TYPE_OVERLAPPING = 0,
SAMPLE_DATA_TYPE_TILED = 1,
};
class TileEntry:
var tile_name : String = ""
var symmetry : int = 0
var weight : float = 1
var image : Image
var images : Array
func _to_string():
var t : String = ""
if image:
t = "simple"
else:
t = "complex (" + str(images.size()) + ")"
return "[ TileEntry " + t + " tile_name: " + tile_name + ", symmetry: " + str(symmetry) + " weight: " + str(weight) + " ]\n"
class NeighbourEntry:
var left : String = ""
var left_orientation : int = 0
var right : String = ""
var right_orientation : int = 0
func setup(l : String, r : String):
left = l.get_slice(" ", 0)
var s : String = l.get_slice(" ", 1)
if (s != ""):
left_orientation = int(s)
right = r.get_slice(" ", 0)
s = r.get_slice(" ", 1)
if (s != ""):
right_orientation = int(s)
func _to_string():
return "[ NeighbourEntry left: " + left + "(" + str(left_orientation) + "), right: " + right + "(" + str(right_orientation) + ") ]\n"
class SampleData:
var type : int = 0
var image_name : String = ""
var pattern_size : int = 3
var periodic : bool = false
var width : int = 0
var height : int = 0
var symmetry : int = 8
var ground : bool = false
var limit : int = 0
var screenshots : int = 0
var periodic_input : int = true
var tiles : Array
var neighbours : Array
var image : Image
func _to_string():
return "SampleData\ntype: " + str(type) + \
"\nimage_name: " + image_name + \
"\npattern_size: " + str(pattern_size) + \
"\nperiodic: " + str(periodic) + \
"\nwidth: " + str(width) + \
"\nheight: " + str(height) + \
"\nsymmetry: " + str(symmetry) + \
"\nground: " + str(ground) + \
"\nlimit: " + str(limit) + \
"\nscreenshots: " + str(screenshots) + \
"\nperiodic_input: " + str(periodic_input) + \
"\ntiles: " + str(tiles) + \
"\nneighbours: " + str(neighbours)
var data : Array
func _init():
load_data()
func load_data():
data.clear()
var xmlp : XMLParser = XMLParser.new()
xmlp.open("res://samples/samples.xml")
while xmlp.read() == OK:
if xmlp.get_node_type() == XMLParser.NODE_ELEMENT:
if xmlp.get_node_name() == "overlapping" || xmlp.get_node_name() == "simpletiled":
var entry : SampleData = SampleData.new()
if xmlp.get_node_name() == "overlapping":
entry.type = SampleDataType.SAMPLE_DATA_TYPE_OVERLAPPING
else:
entry.type = SampleDataType.SAMPLE_DATA_TYPE_TILED
for i in range(xmlp.get_attribute_count()):
var attrib_name : String = xmlp.get_attribute_name(i)
var attrib_value : String = xmlp.get_attribute_value(i)
if attrib_name == "name":
entry.image_name = attrib_value
elif attrib_name == "N":
entry.pattern_size = int(attrib_value)
elif attrib_name == "periodic":
if attrib_value == "True":
entry.periodic = true
else:
entry.periodic = false
elif attrib_name == "width":
entry.width = int(attrib_value)
elif attrib_name == "height":
entry.height = int(attrib_value)
elif attrib_name == "symmetry":
entry.symmetry = int(attrib_value)
elif attrib_name == "ground":
entry.ground = int(attrib_value)
elif attrib_name == "limit":
entry.limit = int(attrib_value)
elif attrib_name == "screenshots":
entry.screenshots = int(attrib_value)
elif attrib_name == "periodic_input":
entry.periodic_input = int(attrib_value)
if entry.type == SampleDataType.SAMPLE_DATA_TYPE_TILED:
var e : Array = load_tile_entry(entry)
entry.tiles = e[0]
entry.neighbours = e[1]
else:
entry.image = ResourceLoader.load("res://samples/" + entry.image_name + ".png")
data.push_back(entry)
func load_tile_entry(entry : SampleData) -> Array:
var xmlp : XMLParser = XMLParser.new()
xmlp.open("res://samples/" + entry.image_name + "/data.xml")
var tiles : Array
var neighbours : Array
while xmlp.read() == OK:
if xmlp.get_node_type() == XMLParser.NODE_ELEMENT:
if xmlp.get_node_name() == "tile":
var e : TileEntry = TileEntry.new()
for i in range(xmlp.get_attribute_count()):
var attrib_name : String = xmlp.get_attribute_name(i)
var attrib_value : String = xmlp.get_attribute_value(i)
if attrib_name == "name":
e.tile_name = attrib_value
elif attrib_name == "symmetry":
if attrib_value == "X":
e.symmetry = WaveFormCollapse.SYMMETRY_X
elif attrib_value == "T":
e.symmetry = WaveFormCollapse.SYMMETRY_T
elif attrib_value == "I":
e.symmetry = WaveFormCollapse.SYMMETRY_I
elif attrib_value == "L":
e.symmetry = WaveFormCollapse.SYMMETRY_L
elif attrib_value == "\\":
e.symmetry = WaveFormCollapse.SYMMETRY_BACKSLASH
elif attrib_value == "P":
e.symmetry = WaveFormCollapse.SYMMETRY_P
elif attrib_name == "weight":
e.weight = float(attrib_value)
var simple_image_path : String = "res://samples/" + entry.image_name + "/" + e.tile_name + ".png"
var file : File = File.new()
if !file.file_exists(simple_image_path):
var indx : int = 0
while true:
var image_path : String = "res://samples/" + entry.image_name + "/" + e.tile_name + " " + str(indx) + ".png"
if !file.file_exists(image_path):
break
e.images.push_back(ResourceLoader.load(image_path))
indx += 1
else:
e.image = ResourceLoader.load(simple_image_path)
tiles.push_back(e)
elif xmlp.get_node_name() == "neighbor":
var e : NeighbourEntry = NeighbourEntry.new()
var left : String
var right : String
for i in range(xmlp.get_attribute_count()):
var attrib_name : String = xmlp.get_attribute_name(i)
var attrib_value : String = xmlp.get_attribute_value(i)
if attrib_name == "left":
left = attrib_value
elif attrib_name == "right":
right = attrib_value
e.setup(left, right)
neighbours.push_back(e)
return [ tiles, neighbours ]
func _enter_tree():
_on_next_pressed()
func generate_image():
if (rect_type == SampleDataType.SAMPLE_DATA_TYPE_OVERLAPPING):
generate_image_overlapping()
else:
generate_image_tiled()
func generate_image_overlapping():
get_node(source_image_rect_path).texture = null
get_node(result_image_rect_path).texture = null
var sd : SampleData = data[_current_data_index]
get_node(settings_label_path).text = str(_current_data_index) + "\n" + sd.to_string()
var indexer : ImageIndexer = ImageIndexer.new()
var source_tex : ImageTexture = ImageTexture.new();
source_tex.create_from_image(sd.image, 0)
get_node(source_image_rect_path).texture = source_tex
var indices : PoolIntArray = indexer.index_image(sd.image)
var wfc : OverlappingWaveFormCollapse = OverlappingWaveFormCollapse.new()
wfc.pattern_size = sd.pattern_size
wfc.periodic_output = sd.periodic
wfc.symmetry = sd.symmetry
wfc.ground = sd.ground
wfc.periodic_input = sd.periodic_input
wfc.out_height = sd.image.get_height()
wfc.out_width = sd.image.get_width()
wfc.set_input(indices, sd.image.get_width(), sd.image.get_height())
#todo
#if sd.width > 0 && sd.height > 0:
# wfc.set_input(indices, sd.width, sd.height)
#else:
# wfc.set_input(indices, img.get_width(), img.get_height())
randomize()
wfc.set_seed(randi())
wfc.initialize()
var res : PoolIntArray = wfc.generate_image_index_data()
if (res.size() == 0):
print("(res.size() == 0)")
return
var data : PoolByteArray = indexer.indices_to_argb8_data(res)
var res_img : Image = Image.new()
res_img.create_from_data(sd.image.get_width(), sd.image.get_height(), false, Image.FORMAT_RGBA8, data)
var res_tex : ImageTexture = ImageTexture.new();
res_tex.create_from_image(res_img, 0)
get_node(result_image_rect_path).texture = res_tex
func generate_image_tiled():
get_node(source_image_rect_path).texture = null
get_node(result_image_rect_path).texture = null
var sd : SampleData = data[_current_data_index]
get_node(settings_label_path).text = str(_current_data_index) + "\n" + sd.to_string()
var indexer : ImageIndexer = ImageIndexer.new()
var wfc : TilingWaveFormCollapse = TilingWaveFormCollapse.new()
var img_size : int = 0
for i in range(sd.tiles.size()):
var te : TileEntry = sd.tiles[i]
if !te.image:
var tile_index : int = wfc.tile_add(te.symmetry, te.weight)
wfc.tile_name_set(tile_index, te.tile_name)
wfc.tile_symmetry_set(tile_index, te.symmetry)
for img in te.images:
if img_size == 0:
img_size = img.get_height()
var indices : PoolIntArray = indexer.index_image(img)
wfc.tile_data_add(tile_index, indices, img.get_width(), img.get_height())
else:
if img_size == 0:
img_size = te.image.get_height()
var indices : PoolIntArray = indexer.index_image(te.image)
var tile_index : int = wfc.tile_add_generated(indices, te.image.get_width(), te.image.get_height(), te.symmetry, te.weight)
wfc.tile_name_set(tile_index, te.tile_name)
for i in range(sd.neighbours.size()):
var ne : NeighbourEntry = sd.neighbours[i]
wfc.neighbour_data_add_str(ne.left, ne.left_orientation, ne.right, ne.right_orientation)
wfc.periodic_output = sd.periodic
wfc.wave_width = sd.width
wfc.wave_height = sd.height
#todo
#if sd.width > 0 && sd.height > 0:
# wfc.set_input(indices, sd.width, sd.height)
#else:
# wfc.set_input(indices, img.get_width(), img.get_height())
randomize()
wfc.set_seed(randi())
wfc.initialize()
var res : PoolIntArray = wfc.generate_image_index_data()
if (res.size() == 0):
print("(res.size() == 0)")
return
var data : PoolByteArray = indexer.indices_to_argb8_data(res)
var res_img : Image = Image.new()
res_img.create_from_data(sd.width * img_size, sd.height * img_size, false, Image.FORMAT_RGBA8, data)
var res_tex : ImageTexture = ImageTexture.new();
res_tex.create_from_image(res_img, 0)
get_node(result_image_rect_path).texture = res_tex
func _on_prev_pressed():
while true:
_current_data_index -= 1
if _current_data_index < 0:
_current_data_index = data.size() - 1
if data[_current_data_index].type == rect_type:
break
generate_image()
func _on_next_pressed():
while true:
_current_data_index += 1
if _current_data_index >= data.size():
_current_data_index = 0
if data[_current_data_index].type == rect_type:
break
generate_image()
func _on_tiled_toggled(on : bool):
if !on:
return
rect_type = 1
_current_data_index = -1
_on_next_pressed()
func _on_overlapping_toggled(on : bool):
if !on:
return
rect_type = 0
_current_data_index = -1
_on_next_pressed()
func _on_randomize_pressed():
generate_image()

68
wfc/TiledDemos.tscn Normal file
View File

@ -0,0 +1,68 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://TextureRect.gd" type="Script" id=1]
[node name="Control" type="PanelContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
[node name="VBoxContainer2" type="VBoxContainer" parent="."]
margin_left = 7.0
margin_top = 7.0
margin_right = 1017.0
margin_bottom = 593.0
[node name="VBoxContainer" type="GridContainer" parent="VBoxContainer2"]
margin_right = 1010.0
margin_bottom = 562.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="TextureRect" type="TextureRect" parent="VBoxContainer2/VBoxContainer"]
margin_right = 300.0
margin_bottom = 300.0
rect_min_size = Vector2( 300, 300 )
expand = true
script = ExtResource( 1 )
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer2"]
margin_top = 566.0
margin_right = 1010.0
margin_bottom = 586.0
alignment = 1
[node name="Button" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 340.0
margin_right = 380.0
margin_bottom = 20.0
text = "Prev"
[node name="Button2" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 384.0
margin_right = 426.0
margin_bottom = 20.0
text = "Next"
[node name="Control" type="Control" parent="VBoxContainer2/HBoxContainer"]
margin_left = 430.0
margin_right = 530.0
margin_bottom = 20.0
rect_min_size = Vector2( 100, 0 )
[node name="Button3" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 534.0
margin_right = 623.0
margin_bottom = 20.0
text = "Overlapping"
[node name="Button4" type="Button" parent="VBoxContainer2/HBoxContainer"]
margin_left = 627.0
margin_right = 670.0
margin_bottom = 20.0
disabled = true
text = "Tiled"
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Button" to="VBoxContainer2/VBoxContainer/TextureRect" method="_on_prev_pressed"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Button2" to="VBoxContainer2/VBoxContainer/TextureRect" method="_on_next_pressed"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Button3" to="VBoxContainer2/VBoxContainer/TextureRect" method="_on_overlapping_pressed"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Button4" to="VBoxContainer2/VBoxContainer/TextureRect" method="_on_tiled_pressed"]

7
wfc/default_env.tres Normal file
View File

@ -0,0 +1,7 @@
[gd_resource type="Environment" load_steps=2 format=2]
[sub_resource type="ProceduralSky" id=1]
[resource]
background_mode = 2
background_sky = SubResource( 1 )

BIN
wfc/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

35
wfc/icon.png.import Normal file
View File

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.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

3
wfc/new_buttongroup.tres Normal file
View File

@ -0,0 +1,3 @@
[gd_resource type="ButtonGroup" format=2]
[resource]

25
wfc/project.pandemonium Normal file
View File

@ -0,0 +1,25 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=4
[application]
config/name="project"
run/main_scene="res://OverlappingDemos.tscn"
config/icon="res://icon.png"
[physics]
common/enable_pause_aware_picking=true
[rendering]
vram_compression/import_etc=true
vram_compression/import_etc2=false
environment/default_environment="res://default_env.tres"

BIN
wfc/samples/3Bricks.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/3Bricks.png-a697532336dc39992b29becd5289ac49.image"
[deps]
source_file="res://samples/3Bricks.png"
dest_files=[ "res://.import/3Bricks.png-a697532336dc39992b29becd5289ac49.image" ]
[params]

BIN
wfc/samples/Angular.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Angular.png-3511683c6d3983fdcf69333ce5543070.image"
[deps]
source_file="res://samples/Angular.png"
dest_files=[ "res://.import/Angular.png-3511683c6d3983fdcf69333ce5543070.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/bridge.png-2f5241fff56b543176e22b1806f61af3.image"
[deps]
source_file="res://samples/Castle/bridge.png"
dest_files=[ "res://.import/bridge.png-2f5241fff56b543176e22b1806f61af3.image" ]
[params]

View File

@ -0,0 +1,74 @@
<set size="7">
<tiles>
<tile name="bridge" symmetry="I"/>
<tile name="ground" symmetry="X"/>
<tile name="river" symmetry="I"/>
<tile name="riverturn" symmetry="L"/>
<tile name="road" symmetry="I"/>
<tile name="roadturn" symmetry="L"/>
<tile name="t" symmetry="T"/>
<tile name="tower" symmetry="L"/>
<tile name="wall" symmetry="I"/>
<tile name="wallriver" symmetry="I"/>
<tile name="wallroad" symmetry="I"/>
</tiles>
<neighbors>
<neighbor left="bridge 1" right="river 1"/>
<neighbor left="bridge 1" right="riverturn 1"/>
<neighbor left="bridge" right="road 1"/>
<neighbor left="bridge" right="roadturn 1"/>
<neighbor left="bridge" right="t"/>
<neighbor left="bridge" right="t 3"/>
<neighbor left="bridge" right="wallroad"/>
<neighbor left="ground" right="ground"/>
<neighbor left="ground" right="river"/>
<neighbor left="ground" right="riverturn"/>
<neighbor left="ground" right="road"/>
<neighbor left="ground" right="roadturn"/>
<neighbor left="ground" right="t 1"/>
<neighbor left="ground" right="tower"/>
<neighbor left="ground" right="wall"/>
<neighbor left="river 1" right="river 1"/>
<neighbor left="river 1" right="riverturn 1"/>
<neighbor left="river" right="road"/>
<neighbor left="river" right="roadturn"/>
<neighbor left="river" right="t 1"/>
<neighbor left="river" right="tower"/>
<neighbor left="river" right="wall"/>
<neighbor left="river 1" right="wallriver"/>
<neighbor left="riverturn" right="riverturn 2"/>
<neighbor left="road" right="riverturn"/>
<neighbor left="roadturn 1" right="riverturn"/>
<neighbor left="roadturn 2" right="riverturn"/>
<neighbor left="t 3" right="riverturn"/>
<neighbor left="tower 1" right="riverturn"/>
<neighbor left="tower 2" right="riverturn"/>
<neighbor left="wall" right="riverturn"/>
<neighbor left="riverturn" right="wallriver"/>
<neighbor left="road 1" right="road 1"/>
<neighbor left="roadturn" right="road 1"/>
<neighbor left="road 1" right="t"/>
<neighbor left="road 1" right="t 3"/>
<neighbor left="road" right="tower"/>
<neighbor left="road" right="wall"/>
<neighbor left="road 1" right="wallroad"/>
<neighbor left="roadturn" right="roadturn 2"/>
<neighbor left="roadturn" right="t"/>
<neighbor left="roadturn 1" right="tower"/>
<neighbor left="roadturn 2" right="tower"/>
<neighbor left="roadturn 1" right="wall"/>
<neighbor left="roadturn" right="wallroad"/>
<neighbor left="t" right="t 2"/>
<neighbor left="t 3" right="tower"/>
<neighbor left="t 3" right="wall"/>
<neighbor left="t" right="wallroad"/>
<neighbor left="t 1" right="wallroad"/>
<neighbor left="tower" right="wall 1"/>
<neighbor left="tower" right="wallriver 1"/>
<neighbor left="tower" right="wallroad 1"/>
<neighbor left="wall 1" right="wall 1"/>
<neighbor left="wall 1" right="wallriver 1"/>
<neighbor left="wall 1" right="wallroad 1"/>
<neighbor left="wallriver 1" right="wallroad 1"/>
</neighbors>
</set>

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/ground.png-e312043dcb91f034913953306c1652dc.image"
[deps]
source_file="res://samples/Castle/ground.png"
dest_files=[ "res://.import/ground.png-e312043dcb91f034913953306c1652dc.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/river.png-5f0fcfd15a1f7b7334f700e93c14d69e.image"
[deps]
source_file="res://samples/Castle/river.png"
dest_files=[ "res://.import/river.png-5f0fcfd15a1f7b7334f700e93c14d69e.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/riverturn.png-2bb4e468f6108a16610b2f8b0d5d6ce6.image"
[deps]
source_file="res://samples/Castle/riverturn.png"
dest_files=[ "res://.import/riverturn.png-2bb4e468f6108a16610b2f8b0d5d6ce6.image" ]
[params]

BIN
wfc/samples/Castle/road.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/road.png-f9a0ae8c6f74ee4ce323e98182de65e6.image"
[deps]
source_file="res://samples/Castle/road.png"
dest_files=[ "res://.import/road.png-f9a0ae8c6f74ee4ce323e98182de65e6.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/roadturn.png-e092f99bd370eaa77f6208a20a9c8f90.image"
[deps]
source_file="res://samples/Castle/roadturn.png"
dest_files=[ "res://.import/roadturn.png-e092f99bd370eaa77f6208a20a9c8f90.image" ]
[params]

BIN
wfc/samples/Castle/t.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/t.png-ea49b1474919a65f661b7d71710d8128.image"
[deps]
source_file="res://samples/Castle/t.png"
dest_files=[ "res://.import/t.png-ea49b1474919a65f661b7d71710d8128.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/tower.png-edbac699da852c031b1a3334f6aa5604.image"
[deps]
source_file="res://samples/Castle/tower.png"
dest_files=[ "res://.import/tower.png-edbac699da852c031b1a3334f6aa5604.image" ]
[params]

BIN
wfc/samples/Castle/wall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/wall.png-fcd016436964858f3135f450a76409a9.image"
[deps]
source_file="res://samples/Castle/wall.png"
dest_files=[ "res://.import/wall.png-fcd016436964858f3135f450a76409a9.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/wallriver.png-42bb5505ae7a7f3156bd6779c9113161.image"
[deps]
source_file="res://samples/Castle/wallriver.png"
dest_files=[ "res://.import/wallriver.png-42bb5505ae7a7f3156bd6779c9113161.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/wallroad.png-74bd46387cf589ce90ddf81952d51b72.image"
[deps]
source_file="res://samples/Castle/wallroad.png"
dest_files=[ "res://.import/wallroad.png-74bd46387cf589ce90ddf81952d51b72.image" ]
[params]

BIN
wfc/samples/Cat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Cat.png-932cc11b5881541cfa86a1eb715e8c83.image"
[deps]
source_file="res://samples/Cat.png"
dest_files=[ "res://.import/Cat.png-932cc11b5881541cfa86a1eb715e8c83.image" ]
[params]

BIN
wfc/samples/Cats.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Cats.png-89124cb461364b65cf36bb295e00eb95.image"
[deps]
source_file="res://samples/Cats.png"
dest_files=[ "res://.import/Cats.png-89124cb461364b65cf36bb295e00eb95.image" ]
[params]

BIN
wfc/samples/Cave.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Cave.png-0ff127fea4c812bd0f2892133050620b.image"
[deps]
source_file="res://samples/Cave.png"
dest_files=[ "res://.import/Cave.png-0ff127fea4c812bd0f2892133050620b.image" ]
[params]

BIN
wfc/samples/Chess.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Chess.png-2ba13af47355ca5f0adaa09b356c7a06.image"
[deps]
source_file="res://samples/Chess.png"
dest_files=[ "res://.import/Chess.png-2ba13af47355ca5f0adaa09b356c7a06.image" ]
[params]

BIN
wfc/samples/Circles/b.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/b.png-f87d48caf3e9f5bacd66d132d08324a7.image"
[deps]
source_file="res://samples/Circles/b.png"
dest_files=[ "res://.import/b.png-f87d48caf3e9f5bacd66d132d08324a7.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/b_half.png-2371b96b6850c6038f1ec62488064db0.image"
[deps]
source_file="res://samples/Circles/b_half.png"
dest_files=[ "res://.import/b_half.png-2371b96b6850c6038f1ec62488064db0.image" ]
[params]

BIN
wfc/samples/Circles/b_i.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/b_i.png-8f1d8ec600c896c538f8351bd98b91d2.image"
[deps]
source_file="res://samples/Circles/b_i.png"
dest_files=[ "res://.import/b_i.png-8f1d8ec600c896c538f8351bd98b91d2.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/b_quarter.png-32aa0a5b1d132a9f18e4fa3f193ca821.image"
[deps]
source_file="res://samples/Circles/b_quarter.png"
dest_files=[ "res://.import/b_quarter.png-32aa0a5b1d132a9f18e4fa3f193ca821.image" ]
[params]

View File

@ -0,0 +1,118 @@
<set size="32">
<tiles>
<tile name="b_half" symmetry="T"/>
<tile name="b_i" symmetry="I"/>
<tile name="b_quarter" symmetry="L"/>
<tile name="w_half" symmetry="T"/>
<tile name="w_i" symmetry="I"/>
<tile name="w_quarter" symmetry="L"/>
<tile name="b" symmetry="X"/>
<tile name="w" symmetry="X"/>
</tiles>
<neighbors>
<neighbor left="b_half" right="b_half"/>
<neighbor left="b_half 1" right="b_half 3"/>
<neighbor left="b_half 3" right="b_half 1"/>
<neighbor left="b_half" right="b_half 3"/>
<neighbor left="b_half" right="b_half 2"/>
<neighbor left="b_half" right="b_i"/>
<neighbor left="b_half 3" right="b_i 1"/>
<neighbor left="b_half 1" right="b_i"/>
<neighbor left="b_half" right="b_quarter"/>
<neighbor left="b_half 1" right="b_quarter"/>
<neighbor left="b_half 2" right="b_quarter"/>
<neighbor left="b_half 3" right="b_quarter 1"/>
<neighbor left="b_i" right="b_i"/>
<neighbor left="b_i 1" right="b_i 1"/>
<neighbor left="b_i" right="b_quarter"/>
<neighbor left="b_i 1" right="b_quarter 1"/>
<neighbor left="b_quarter" right="b_quarter 1"/>
<neighbor left="b_quarter 1" right="b_quarter"/>
<neighbor left="b_quarter 2" right="b_quarter"/>
<neighbor left="b_quarter" right="b_quarter 2"/>
<neighbor left="b_half 1" right="w_half 1"/>
<neighbor left="b_half" right="w_half 1"/>
<neighbor left="b_half 3" right="w_half"/>
<neighbor left="b_half 3" right="w_half 3"/>
<neighbor left="b_half" right="w_i 1"/>
<neighbor left="b_half 1" right="w_i 1"/>
<neighbor left="b_half 3" right="w_i"/>
<neighbor left="b_half" right="w_quarter 1"/>
<neighbor left="b_half" right="w_quarter 2"/>
<neighbor left="b_half 1" right="w_quarter 1"/>
<neighbor left="b_half 3" right="w_quarter"/>
<neighbor left="b_i" right="w_half 1"/>
<neighbor left="b_i 1" right="w_half"/>
<neighbor left="b_i 1" right="w_half 3"/>
<neighbor left="b_i" right="w_i 1"/>
<neighbor left="b_i 1" right="w_i"/>
<neighbor left="b_i" right="w_quarter 1"/>
<neighbor left="b_i 1" right="w_quarter"/>
<neighbor left="b_quarter" right="w_half"/>
<neighbor left="b_quarter" right="w_half 3"/>
<neighbor left="b_quarter" right="w_half 2"/>
<neighbor left="b_quarter 1" right="w_half 1"/>
<neighbor left="b_quarter" right="w_i"/>
<neighbor left="b_quarter 1" right="w_i 1"/>
<neighbor left="b_quarter" right="w_quarter"/>
<neighbor left="b_quarter" right="w_quarter 3"/>
<neighbor left="b_quarter 1" right="w_quarter 1"/>
<neighbor left="b_quarter 1" right="w_quarter 2"/>
<neighbor left="w_half" right="w_half"/>
<neighbor left="w_half 1" right="w_half 3"/>
<neighbor left="w_half 3" right="w_half 1"/>
<neighbor left="w_half" right="w_half 3"/>
<neighbor left="w_half" right="w_half 2"/>
<neighbor left="w_half" right="w_i"/>
<neighbor left="w_half 3" right="w_i 1"/>
<neighbor left="w_half 1" right="w_i"/>
<neighbor left="w_half" right="w_quarter"/>
<neighbor left="w_half 1" right="w_quarter"/>
<neighbor left="w_half 2" right="w_quarter"/>
<neighbor left="w_half 3" right="w_quarter 1"/>
<neighbor left="w_i" right="w_i"/>
<neighbor left="w_i 1" right="w_i 1"/>
<neighbor left="w_i" right="w_quarter"/>
<neighbor left="w_i 1" right="w_quarter 1"/>
<neighbor left="w_quarter" right="w_quarter 1"/>
<neighbor left="w_quarter 1" right="w_quarter"/>
<neighbor left="w_quarter 2" right="w_quarter"/>
<neighbor left="w_quarter" right="w_quarter 2"/>
<neighbor left="b" right="b"/>
<neighbor left="b" right="b_half 1"/>
<neighbor left="b" right="b_i 1"/>
<neighbor left="b" right="b_quarter 1"/>
<neighbor left="b" right="w_half"/>
<neighbor left="b" right="w_half 3"/>
<neighbor left="b" right="w_i"/>
<neighbor left="b" right="w_quarter"/>
<neighbor left="w" right="w"/>
<neighbor left="w" right="w_half 1"/>
<neighbor left="w" right="w_i 1"/>
<neighbor left="w" right="w_quarter 1"/>
<neighbor left="w" right="b_half"/>
<neighbor left="w" right="b_half 3"/>
<neighbor left="w" right="b_i"/>
<neighbor left="w" right="b_quarter"/>
</neighbors>
<subsets>
<subset name="Large Circles">
<tile name="b_quarter"/>
<tile name="w_quarter"/>
</subset>
<subset name="Large Circles and Solid">
<tile name="b_quarter"/>
<tile name="w_quarter"/>
<tile name="b"/>
<tile name="w"/>
</subset>
<subset name="No Solid">
<tile name="b_half" symmetry="T"/>
<tile name="b_i" symmetry="I"/>
<tile name="b_quarter" symmetry="L"/>
<tile name="w_half" symmetry="T"/>
<tile name="w_i" symmetry="I"/>
<tile name="w_quarter" symmetry="L"/>
</subset>
</subsets>
</set>

BIN
wfc/samples/Circles/w.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/w.png-09621642c8f1099ca320d8fffcea8f22.image"
[deps]
source_file="res://samples/Circles/w.png"
dest_files=[ "res://.import/w.png-09621642c8f1099ca320d8fffcea8f22.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/w_half.png-870afcf9c61523531de27c05450b2d2e.image"
[deps]
source_file="res://samples/Circles/w_half.png"
dest_files=[ "res://.import/w_half.png-870afcf9c61523531de27c05450b2d2e.image" ]
[params]

BIN
wfc/samples/Circles/w_i.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/w_i.png-f1876d7cff447ef4202b7b2f2d53bf42.image"
[deps]
source_file="res://samples/Circles/w_i.png"
dest_files=[ "res://.import/w_i.png-f1876d7cff447ef4202b7b2f2d53bf42.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/w_quarter.png-8a5c2867ca1f06465e7d846c3a0bd3a3.image"
[deps]
source_file="res://samples/Circles/w_quarter.png"
dest_files=[ "res://.import/w_quarter.png-8a5c2867ca1f06465e7d846c3a0bd3a3.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/bridge.png-1cf400ab9d999f063eb4385968e6caeb.image"
[deps]
source_file="res://samples/Circuit/bridge.png"
dest_files=[ "res://.import/bridge.png-1cf400ab9d999f063eb4385968e6caeb.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/component.png-e4bf55548abfde14b36e2ac30808e3d8.image"
[deps]
source_file="res://samples/Circuit/component.png"
dest_files=[ "res://.import/component.png-e4bf55548abfde14b36e2ac30808e3d8.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/connection.png-916867e89e4b418d37768690ea892234.image"
[deps]
source_file="res://samples/Circuit/connection.png"
dest_files=[ "res://.import/connection.png-916867e89e4b418d37768690ea892234.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/corner.png-50994aac180a73c57bfdd8cd8eb28fa2.image"
[deps]
source_file="res://samples/Circuit/corner.png"
dest_files=[ "res://.import/corner.png-50994aac180a73c57bfdd8cd8eb28fa2.image" ]
[params]

View File

@ -0,0 +1,182 @@
<set size="14">
<tiles>
<tile name="bridge" symmetry="I" weight="1.0"/>
<tile name="component" symmetry="X" weight="20.0"/>
<tile name="connection" symmetry="T" weight="10.0"/>
<tile name="corner" symmetry="L" weight="10.0"/>
<tile name="substrate" symmetry="X" weight="2.0"/>
<tile name="t" symmetry="T" weight="0.1"/>
<tile name="track" symmetry="I" weight="2.0"/>
<tile name="transition" symmetry="T" weight="0.4"/>
<tile name="turn" symmetry="L" weight="1.0"/>
<tile name="viad" symmetry="I" weight="0.1"/>
<tile name="vias" symmetry="T" weight="0.3"/>
<tile name="wire" symmetry="I" weight="0.5"/>
<tile name="skew" symmetry="L" weight="2.0"/>
<tile name="dskew" symmetry="\" weight="2.0"/>
</tiles>
<neighbors>
<neighbor left="bridge" right="bridge"/>
<neighbor left="bridge 1" right="bridge 1"/>
<neighbor left="bridge 1" right="connection 1"/>
<neighbor left="bridge 1" right="t 2"/>
<neighbor left="bridge 1" right="t 3"/>
<neighbor left="bridge 1" right="track 1"/>
<neighbor left="bridge" right="transition 1"/>
<neighbor left="bridge 1" right="turn 1"/>
<neighbor left="bridge 1" right="viad"/>
<neighbor left="bridge 1" right="vias 1"/>
<neighbor left="bridge" right="wire"/>
<neighbor left="component" right="component"/>
<neighbor left="connection 1" right="component"/>
<neighbor left="connection" right="connection"/>
<neighbor left="connection" right="corner"/>
<neighbor left="t 1" right="connection 1"/>
<neighbor left="t 2" right="connection 1"/>
<neighbor left="track 1" right="connection 1"/>
<neighbor left="turn" right="connection 1"/>
<neighbor left="substrate" right="corner 1"/>
<neighbor left="t 3" right="corner 1"/>
<neighbor left="track" right="corner 1"/>
<neighbor left="transition 2" right="corner 1"/>
<neighbor left="transition" right="corner 1"/>
<neighbor left="turn 1" right="corner 1"/>
<neighbor left="turn 2" right="corner 1"/>
<neighbor left="viad 1" right="corner 1"/>
<neighbor left="vias 1" right="corner 1"/>
<neighbor left="vias 2" right="corner 1"/>
<neighbor left="vias" right="corner 1"/>
<neighbor left="wire 1" right="corner 1"/>
<neighbor left="substrate" right="substrate"/>
<neighbor left="substrate" right="t 1"/>
<neighbor left="substrate" right="track"/>
<neighbor left="substrate" right="transition 2"/>
<neighbor left="substrate" right="turn"/>
<neighbor left="substrate" right="viad 1"/>
<neighbor left="substrate" right="vias 2"/>
<neighbor left="substrate" right="vias 3"/>
<neighbor left="substrate" right="wire 1"/>
<neighbor left="t 1" right="t 3"/>
<neighbor left="t 3" right="t 1"/>
<neighbor left="t 1" right="t 2"/>
<neighbor left="t 2" right="t 2"/>
<neighbor left="t 2" right="t"/>
<neighbor left="t 3" right="track"/>
<neighbor left="t 1" right="track 1"/>
<neighbor left="t 2" right="track 1"/>
<neighbor left="t 1" right="transition 3"/>
<neighbor left="t 3" right="transition 2"/>
<neighbor left="t 2" right="transition 3"/>
<neighbor left="t 3" right="turn"/>
<neighbor left="t 1" right="turn 1"/>
<neighbor left="t 2" right="turn 1"/>
<neighbor left="t 2" right="turn 2"/>
<neighbor left="t 3" right="viad 1"/>
<neighbor left="t 1" right="viad"/>
<neighbor left="t 2" right="viad"/>
<neighbor left="t 2" right="vias 1"/>
<neighbor left="t 1" right="vias 1"/>
<neighbor left="vias 1" right="t 1"/>
<neighbor left="vias 2" right="t 1"/>
<neighbor left="wire 1" right="t 1"/>
<neighbor left="track" right="track"/>
<neighbor left="track 1" right="track 1"/>
<neighbor left="track 1" right="transition 3"/>
<neighbor left="track" right="transition 2"/>
<neighbor left="track" right="turn"/>
<neighbor left="track 1" right="turn 1"/>
<neighbor left="track" right="viad 1"/>
<neighbor left="track 1" right="viad"/>
<neighbor left="track" right="vias 2"/>
<neighbor left="track" right="vias 3"/>
<neighbor left="track 1" right="vias 1"/>
<neighbor left="track" right="wire 1"/>
<neighbor left="transition 2" right="turn"/>
<neighbor left="transition" right="turn"/>
<neighbor left="transition 1" right="turn 1"/>
<neighbor left="transition 2" right="viad 1"/>
<neighbor left="transition 2" right="vias 2"/>
<neighbor left="transition 2" right="vias 3"/>
<neighbor left="transition 2" right="vias"/>
<neighbor left="wire" right="transition 1"/>
<neighbor left="transition 2" right="wire 1"/>
<neighbor left="turn 1" right="turn"/>
<neighbor left="turn 2" right="turn"/>
<neighbor left="turn" right="turn 1"/>
<neighbor left="turn" right="turn 2"/>
<neighbor left="turn 1" right="viad 1"/>
<neighbor left="turn" right="viad"/>
<neighbor left="turn 1" right="vias 2"/>
<neighbor left="turn 1" right="vias 3"/>
<neighbor left="turn 1" right="vias"/>
<neighbor left="turn" right="vias 1"/>
<neighbor left="turn 1" right="wire 1"/>
<neighbor left="viad 1" right="viad 1"/>
<neighbor left="viad 1" right="vias 2"/>
<neighbor left="viad 1" right="vias 3"/>
<neighbor left="viad 1" right="wire 1"/>
<neighbor left="vias 1" right="wire 1"/>
<neighbor left="vias 2" right="wire 1"/>
<neighbor left="vias 1" right="vias 3"/>
<neighbor left="vias 2" right="vias 2"/>
<neighbor left="vias 2" right="vias"/>
<neighbor left="wire" right="wire"/>
<neighbor left="wire 1" right="wire 1"/>
<neighbor left="bridge 1" right="dskew"/>
<neighbor left="connection 3" right="dskew"/>
<neighbor left="dskew" right="dskew"/>
<neighbor left="skew" right="dskew"/>
<neighbor left="t" right="dskew"/>
<neighbor left="t 2" right="dskew"/>
<neighbor left="t 1" right="dskew"/>
<neighbor left="track 1" right="dskew"/>
<neighbor left="transition 1" right="dskew"/>
<neighbor left="turn 3" right="dskew"/>
<neighbor left="viad" right="dskew"/>
<neighbor left="vias 3" right="dskew"/>
<neighbor left="skew" right="bridge 1"/>
<neighbor left="skew" right="connection 1"/>
<neighbor left="corner" right="skew"/>
<neighbor left="corner 3" right="skew"/>
<neighbor left="skew" right="dskew"/>
<neighbor left="skew" right="skew 2"/>
<neighbor left="skew 1" right="skew"/>
<neighbor left="skew 1" right="skew 3"/>
<neighbor left="substrate" right="skew"/>
<neighbor left="t 3" right="skew"/>
<neighbor left="t" right="skew 2"/>
<neighbor left="t 2" right="skew 2"/>
<neighbor left="t 1" right="skew 2"/>
<neighbor left="track" right="skew"/>
<neighbor left="track 1" right="skew 2"/>
<neighbor left="transition" right="skew"/>
<neighbor left="transition 1" right="skew 2"/>
<neighbor left="turn 1" right="skew"/>
<neighbor left="turn 2" right="skew"/>
<neighbor left="turn 3" right="skew 2"/>
<neighbor left="viad 1" right="skew"/>
<neighbor left="viad" right="skew 2"/>
<neighbor left="vias" right="skew"/>
<neighbor left="vias 1" right="skew"/>
<neighbor left="vias 2" right="skew"/>
<neighbor left="vias 3" right="skew 2"/>
<neighbor left="wire 1" right="skew"/>
</neighbors>
<subsets>
<subset name="Turnless">
<tile name="bridge"/>
<tile name="component"/>
<tile name="connection"/>
<tile name="corner"/>
<tile name="substrate"/>
<tile name="t"/>
<tile name="track"/>
<tile name="transition"/>
<tile name="viad"/>
<tile name="vias"/>
<tile name="wire"/>
<tile name="skew"/>
<tile name="dskew"/>
</subset>
</subsets>
</set>

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/dskew.png-f0a67874686cb01cd5fef4b5f7cf565f.image"
[deps]
source_file="res://samples/Circuit/dskew.png"
dest_files=[ "res://.import/dskew.png-f0a67874686cb01cd5fef4b5f7cf565f.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/skew.png-dbe735c38bfcfb6d09d4502d18670854.image"
[deps]
source_file="res://samples/Circuit/skew.png"
dest_files=[ "res://.import/skew.png-dbe735c38bfcfb6d09d4502d18670854.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/substrate.png-224af69ace3a954b39798862dc9101a9.image"
[deps]
source_file="res://samples/Circuit/substrate.png"
dest_files=[ "res://.import/substrate.png-224af69ace3a954b39798862dc9101a9.image" ]
[params]

BIN
wfc/samples/Circuit/t.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/t.png-77c6cab4a6677f4308d0998ddad861e8.image"
[deps]
source_file="res://samples/Circuit/t.png"
dest_files=[ "res://.import/t.png-77c6cab4a6677f4308d0998ddad861e8.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/track.png-4e6048571720ac9b03aab4d2544157ef.image"
[deps]
source_file="res://samples/Circuit/track.png"
dest_files=[ "res://.import/track.png-4e6048571720ac9b03aab4d2544157ef.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/transition.png-39482413405269eb7ff9821f50ea7316.image"
[deps]
source_file="res://samples/Circuit/transition.png"
dest_files=[ "res://.import/transition.png-39482413405269eb7ff9821f50ea7316.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/turn.png-3237d6f7b7e53faa2bdceb15e95ef90a.image"
[deps]
source_file="res://samples/Circuit/turn.png"
dest_files=[ "res://.import/turn.png-3237d6f7b7e53faa2bdceb15e95ef90a.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/viad.png-65040bfbd0dcb63259b25bb4bdda001f.image"
[deps]
source_file="res://samples/Circuit/viad.png"
dest_files=[ "res://.import/viad.png-65040bfbd0dcb63259b25bb4bdda001f.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/vias.png-7ee367921f337b4429a5d6da0312126a.image"
[deps]
source_file="res://samples/Circuit/vias.png"
dest_files=[ "res://.import/vias.png-7ee367921f337b4429a5d6da0312126a.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/wire.png-54129af2d0d1094123db33f5e5d661ec.image"
[deps]
source_file="res://samples/Circuit/wire.png"
dest_files=[ "res://.import/wire.png-54129af2d0d1094123db33f5e5d661ec.image" ]
[params]

BIN
wfc/samples/City.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/City.png-29281a81af98b8666055f53617944f45.image"
[deps]
source_file="res://samples/City.png"
dest_files=[ "res://.import/City.png-29281a81af98b8666055f53617944f45.image" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Colored City.png-44a43381364a7b1ab36d9a776d73e8c9.image"
[deps]
source_file="res://samples/Colored City.png"
dest_files=[ "res://.import/Colored City.png-44a43381364a7b1ab36d9a776d73e8c9.image" ]
[params]

BIN
wfc/samples/Dungeon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Dungeon.png-c05742c5e5689c332e1ad6829fe36ee2.image"
[deps]
source_file="res://samples/Dungeon.png"
dest_files=[ "res://.import/Dungeon.png-c05742c5e5689c332e1ad6829fe36ee2.image" ]
[params]

BIN
wfc/samples/Fabric.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

View File

@ -0,0 +1,13 @@
[remap]
importer="image"
type="Image"
path="res://.import/Fabric.png-c03134096bb2a3dccd9e1dc22fd2f122.image"
[deps]
source_file="res://samples/Fabric.png"
dest_files=[ "res://.import/Fabric.png-c03134096bb2a3dccd9e1dc22fd2f122.image" ]
[params]

Some files were not shown because too many files have changed in this diff Show More