Added the demo / test project from https://github.com/Relintai/wfc_module_samples
16
wfc/.gitignore
vendored
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
After Width: | Height: | Size: 3.2 KiB |
35
wfc/icon.png.import
Normal 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
@ -0,0 +1,3 @@
|
|||||||
|
[gd_resource type="ButtonGroup" format=2]
|
||||||
|
|
||||||
|
[resource]
|
25
wfc/project.pandemonium
Normal 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
After Width: | Height: | Size: 351 B |
13
wfc/samples/3Bricks.png.import
Normal 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
After Width: | Height: | Size: 179 B |
13
wfc/samples/Angular.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Castle/bridge.png
Normal file
After Width: | Height: | Size: 129 B |
13
wfc/samples/Castle/bridge.png.import
Normal 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]
|
||||||
|
|
74
wfc/samples/Castle/data.xml
Normal 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>
|
BIN
wfc/samples/Castle/ground.png
Normal file
After Width: | Height: | Size: 98 B |
13
wfc/samples/Castle/ground.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Castle/river.png
Normal file
After Width: | Height: | Size: 105 B |
13
wfc/samples/Castle/river.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Castle/riverturn.png
Normal file
After Width: | Height: | Size: 125 B |
13
wfc/samples/Castle/riverturn.png.import
Normal 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
After Width: | Height: | Size: 114 B |
13
wfc/samples/Castle/road.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Castle/roadturn.png
Normal file
After Width: | Height: | Size: 129 B |
13
wfc/samples/Castle/roadturn.png.import
Normal 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
After Width: | Height: | Size: 124 B |
13
wfc/samples/Castle/t.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Castle/tower.png
Normal file
After Width: | Height: | Size: 117 B |
13
wfc/samples/Castle/tower.png.import
Normal 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
After Width: | Height: | Size: 131 B |
13
wfc/samples/Castle/wall.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Castle/wallriver.png
Normal file
After Width: | Height: | Size: 148 B |
13
wfc/samples/Castle/wallriver.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Castle/wallroad.png
Normal file
After Width: | Height: | Size: 149 B |
13
wfc/samples/Castle/wallroad.png.import
Normal 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
After Width: | Height: | Size: 262 B |
13
wfc/samples/Cat.png.import
Normal 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
After Width: | Height: | Size: 260 B |
13
wfc/samples/Cats.png.import
Normal 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
After Width: | Height: | Size: 168 B |
13
wfc/samples/Cave.png.import
Normal 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
After Width: | Height: | Size: 106 B |
13
wfc/samples/Chess.png.import
Normal 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
After Width: | Height: | Size: 103 B |
13
wfc/samples/Circles/b.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circles/b_half.png
Normal file
After Width: | Height: | Size: 474 B |
13
wfc/samples/Circles/b_half.png.import
Normal 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
After Width: | Height: | Size: 559 B |
13
wfc/samples/Circles/b_i.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circles/b_quarter.png
Normal file
After Width: | Height: | Size: 509 B |
13
wfc/samples/Circles/b_quarter.png.import
Normal 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]
|
||||||
|
|
118
wfc/samples/Circles/data.xml
Normal 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
After Width: | Height: | Size: 119 B |
13
wfc/samples/Circles/w.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circles/w_half.png
Normal file
After Width: | Height: | Size: 464 B |
13
wfc/samples/Circles/w_half.png.import
Normal 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
After Width: | Height: | Size: 566 B |
13
wfc/samples/Circles/w_i.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circles/w_quarter.png
Normal file
After Width: | Height: | Size: 554 B |
13
wfc/samples/Circles/w_quarter.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/bridge.png
Normal file
After Width: | Height: | Size: 134 B |
13
wfc/samples/Circuit/bridge.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/component.png
Normal file
After Width: | Height: | Size: 103 B |
13
wfc/samples/Circuit/component.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/connection.png
Normal file
After Width: | Height: | Size: 168 B |
13
wfc/samples/Circuit/connection.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/corner.png
Normal file
After Width: | Height: | Size: 116 B |
13
wfc/samples/Circuit/corner.png.import
Normal 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]
|
||||||
|
|
182
wfc/samples/Circuit/data.xml
Normal 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>
|
BIN
wfc/samples/Circuit/dskew.png
Normal file
After Width: | Height: | Size: 190 B |
13
wfc/samples/Circuit/dskew.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/skew.png
Normal file
After Width: | Height: | Size: 180 B |
13
wfc/samples/Circuit/skew.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/substrate.png
Normal file
After Width: | Height: | Size: 103 B |
13
wfc/samples/Circuit/substrate.png.import
Normal 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
After Width: | Height: | Size: 133 B |
13
wfc/samples/Circuit/t.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/track.png
Normal file
After Width: | Height: | Size: 118 B |
13
wfc/samples/Circuit/track.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/transition.png
Normal file
After Width: | Height: | Size: 185 B |
13
wfc/samples/Circuit/transition.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/turn.png
Normal file
After Width: | Height: | Size: 148 B |
13
wfc/samples/Circuit/turn.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/viad.png
Normal file
After Width: | Height: | Size: 159 B |
13
wfc/samples/Circuit/viad.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/vias.png
Normal file
After Width: | Height: | Size: 185 B |
13
wfc/samples/Circuit/vias.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Circuit/wire.png
Normal file
After Width: | Height: | Size: 116 B |
13
wfc/samples/Circuit/wire.png.import
Normal 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
After Width: | Height: | Size: 160 B |
13
wfc/samples/City.png.import
Normal 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]
|
||||||
|
|
BIN
wfc/samples/Colored City.png
Normal file
After Width: | Height: | Size: 211 B |
13
wfc/samples/Colored City.png.import
Normal 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
After Width: | Height: | Size: 205 B |
13
wfc/samples/Dungeon.png.import
Normal 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
After Width: | Height: | Size: 120 B |
13
wfc/samples/Fabric.png.import
Normal 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]
|
||||||
|
|