@@ -2,9 +2,23 @@ extends WFC2DPrecondition2DNullSettings
2
2
3
3
class_name WFC2DPrecondition2DRemapByMapSettings
4
4
5
+ ## A map that defines possible tile replacements.
6
+ ##
7
+ ## The tiles placed in the target map may be replaced by any tiles that are present in same rows of
8
+ ## this class map.
9
+ ##
10
+ ## E.g. if there are tiles A B C D in the tileset, and the class map contains a row of A B and A C,
11
+ ## then A tile may be replaced by either A, B or C; B - by A or B; C - by A or C; and the tile D
12
+ ## will always remain as is.
5
13
@export_node_path
6
14
var class_map : NodePath
7
15
16
+ ## Remap empty cells of target map to tiles from first row of class map.
17
+ ##
18
+ ## If not set, empty cells may be filled with any tile.
19
+ @export
20
+ var remap_empty : bool = false
21
+
8
22
func _learn_classes (mapper : WFCMapper2D , map : Node ) -> Array [WFCBitSet ]:
9
23
var res : Array [WFCBitSet ] = []
10
24
@@ -31,9 +45,16 @@ func create_precondition(parameters: CreationParameters) -> WFC2DPrecondition:
31
45
assert (class_map != null )
32
46
var class_map_node := parameters .generator_node .get_node (class_map )
33
47
assert (parameters .problem_settings .rules .mapper .supports_map (class_map_node ))
48
+
49
+ var classes := _learn_classes (parameters .problem_settings .rules .mapper , class_map_node )
50
+ var empty_domain : WFCBitSet = null
51
+
52
+ if remap_empty :
53
+ empty_domain = classes [0 ]
34
54
35
55
return WFC2DPreconditionRemap .new (
36
56
parameters .target_node ,
37
57
parameters .problem_settings .rules .mapper ,
38
- _learn_classes (parameters .problem_settings .rules .mapper , class_map_node )
58
+ classes ,
59
+ empty_domain ,
39
60
)
0 commit comments