From 5fe4ba4cddefc2b1208e886ef6237cf8828fb478 Mon Sep 17 00:00:00 2001 From: Sara Date: Tue, 31 Mar 2026 15:39:07 +0200 Subject: [PATCH] feat: added wildcard support for patterns --- modules/generative_grammar/grammar.cpp | 11 ++++++++--- project/scenes/levels/dungeon.tscn | 8 ++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/generative_grammar/grammar.cpp b/modules/generative_grammar/grammar.cpp index 2bf65a33c4..1b0d98d73c 100644 --- a/modules/generative_grammar/grammar.cpp +++ b/modules/generative_grammar/grammar.cpp @@ -40,7 +40,9 @@ bool Sentence::check_match_at(Vector2i at, Ref pattern) { } for (Vector2i itr{ 0, 0 }; itr.y < pattern_size.y; ++itr.y) { for (; itr.x < pattern_size.x; ++itr.x) { - if (get_at(at + itr) != pattern->get_at(itr)) { + Symbol a{ get_at(at + itr) }; + Symbol b{ pattern->get_at(itr) }; + if (a != b && (b != U'*' || a == U'u')) { return false; // difference found } } @@ -52,7 +54,10 @@ bool Sentence::check_match_at(Vector2i at, Ref pattern) { void Sentence::write_subsentence(Vector2i at, Ref sentence) { for (Vector2i pos{ 0, 0 }; pos.y < sentence->get_size().y; ++pos.y) { for (; pos.x < sentence->get_size().x; ++pos.x) { - set_at(at + pos, sentence->get_at(pos)); + Symbol write{ sentence->get_at(pos) }; + if (write != U'*') { // wildcards don't write + set_at(at + pos, write); + } } pos.x = 0; } @@ -62,7 +67,7 @@ void Sentence::set_symbols_string(String value) { int size{ this->size.x * this->size.y }; int writer{ 0 }; for (int reader{ 0 }; writer < size; ++reader) { - char32_t c{ reader < value.length() ? value[reader] : U'B' }; + char32_t c{ reader < value.length() ? value.get(reader) : U'u' }; if (c != U'\n') { this->symbols.set(writer, c); ++writer; diff --git a/project/scenes/levels/dungeon.tscn b/project/scenes/levels/dungeon.tscn index dacb8a995f..748db792a4 100644 --- a/project/scenes/levels/dungeon.tscn +++ b/project/scenes/levels/dungeon.tscn @@ -39,23 +39,23 @@ symbols_string = "ppp" size = Vector2i(5, 3) symbols_string = "uuuuu uuuuu -xpxpx" +*pxp*" [sub_resource type="Sentence" id="Sentence_yc5ro"] size = Vector2i(5, 3) symbols_string = "uuuuu upxpu -xpupx" +*pup*" [sub_resource type="Sentence" id="Sentence_7f72c"] size = Vector2i(5, 3) -symbols_string = "xpxpx +symbols_string = "*pxp* uuuuu uuuuu" [sub_resource type="Sentence" id="Sentence_pbld3"] size = Vector2i(5, 3) -symbols_string = "xpupx +symbols_string = "*pup* upxpu uuuuu"