Skip to content

Conversation

@nickf2k
Copy link

@nickf2k nickf2k commented Mar 14, 2024

Description

This PR for solving the issue #3076

1. What would I do to improve this tutorial:

  • Add missing content, eliminate confusing interruptions, and include omitted code sections.
  • Incorporate images and example animations to illustrate our objectives.
  • Introduce additional sections where necessary (though the final source code remains intact).
  • Provide logical transitions between sections.
  • Address why we need to follow specific approaches and not others.
  • Include links and information about general game development concepts (such as the concept of "seed" in game programming).

2. Contents I will add or modify:

  • The Klondike draw
  • Making cards move
  • Animating a card-flip
  • Model and View
  • Ending and restarting the game

I believe these sections are satisfactory, so I won't make any edits to them. I will begin editing from the section: A New World.

  • Immediately after the Start and restart actions section, I will provide an explanation of the "KlondikeWorld" class. Consequently, the adjustment of the "KlondikeGame" class is merely a necessary step when migrating the onLoad() function to KlondikeWorld, rendering the "A stripped-down KlondikeGame class" section redundant.

  • The section Using a Random Number Generator seed appears reasonable. However, I intend to supplement more references to this definition of "seed." If you have any documents or suggestions on this topic, please provide further information. Otherwise, I will utilize the following link: Link to Reddit.

  • The section Introducing the new KlondikeWorld class was previously covered, hence it will be omitted here. Please note that I will enrich the previous instruction with additional details.

  • Button: I will retain and expand upon this section as it lacks significant information.

  • Anchors and coordinates: This section may be considered supplementary information within the Button section. Therefore, I will incorporate and merge it into the Button section.

  • The deal() method: I will maintain this section in its current position, perhaps making minor sentence edits or none at all.

  • More animations of moves: Similar to the section "The deal() method."

  • A graphics glitch: As above.

  • Winning the game: I find this section quite comprehensive; hence, I may not make any alterations.

  • Ending a game and restarting it: This section lacks crucial details and is rather confusing. I will rewrite it to clarify.

  • Have fun button: This section is well-structured; therefore, I may retain it with minor adjustments if necessary.

Checklist

  • I have followed the Contributor Guide when preparing my PR.
  • I have updated/added tests for ALL new/updated/fixed functionality.
  • I have updated/added relevant documentation in docs and added dartdoc comments with ///.
  • I have updated/added relevant examples in examples or docs.

Breaking Change?

  • Yes, this PR is a breaking change.
  • No, this PR is not a breaking change.

Related Issues

This PR solve the issue #3076

@nickf2k
Copy link
Author

nickf2k commented Mar 14, 2024

I am still working there. Please feel free to discuss about this PR


### KlondikeWorld class

In Flame, a ```World``` is a type of ```Component``` that can contain other ```Components```,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should only have a single back-tick, tripple back-ticks are for multi-line code

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Let me change this

@spydon
Copy link
Member

spydon commented May 24, 2024

@nickf2k any update on this?

@spydon
Copy link
Member

spydon commented Oct 3, 2024

@nickf2k are you planning to continue working on this PR?

@nickf2k
Copy link
Author

nickf2k commented Oct 3, 2024

@spydon
I forgot that I was working on this PR. I was in the middle of it when something came up, and I lost track of completing it. This is my fault. I will get back to it and work on it right away.
I'm so sorry

@nickf2k
Copy link
Author

nickf2k commented Oct 3, 2024

@spydon To avoid forgetting, I set a deadline for myself to complete this PR for you to review by next Tuesday. Thank you


You can learn more about `World` in game programming here:

- An introduction to `World` in game programming: [Ecampus](https://ecampusontario.pressbooks.pub/gamedesigndevelopmenttextbook/chapter/what-is-a-game-world/)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We shouldn't have links to external resourced in here, you can link to the world section in the docs instead.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I will change this

Comment on lines +485 to +491
Ohhh, so what happened to the `onLoad()` method? Well, previously, `KlondikeGame` handled everything in the `onLoad()` method, managing all the game components like `Piles` and `Cards`. But now, to make things cleaner and more organized, we’ve moved that responsibility over to `KlondikeWorld`.

Everything that used to be inside the `onLoad()` method of `KlondikeGame` is now in `KlondikeWorld`'s `onLoad()` method. This keeps the code more modular, meaning it's easier to maintain and update. Instead of `KlondikeGame` getting messy with too many tasks, we let `KlondikeWorld` handle the game setup and logic.

And what’s this `seed` thing? Ah, good question! So, the `seed` attribute is like a magic key. It lets you replay the same game configuration by selecting `Action.sameDeal`. This is super useful when you want to give players the option to retry the exact same game setup. The `seed` ensures that the randomness in the game (like card shuffling) can be repeated exactly the same way. Think of it as a way to recreate the same starting point in a game.

So, with the `seed` safely stored in `KlondikeGame`, the `KlondikeWorld` can use it to keep everything consistent between rounds. If you choose `Action.sameDeal`, it will load the same shuffled deck and game state, letting you replay that round with the same starting conditions. Pretty cool, right?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Formatting (max 100 line length)

Copy link
Author

@nickf2k nickf2k Oct 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure. Thank you

@spydon
Copy link
Member

spydon commented Dec 10, 2024

@nickf2k any updates planned for this PR? :)

@spydon
Copy link
Member

spydon commented Oct 8, 2025

@nickf2k are you planning to finish this PR?

@nickf2k
Copy link
Author

nickf2k commented Nov 16, 2025

@spydon yes. It's been a while. I will comeback and try to finish this PR

spydon and others added 17 commits November 16, 2025 15:39
If the buttons are extended it doesn't automatically propagate the size
from the `button` child component like it does if you pass the button
into the constructor. This PR sets that size in `onMount` if the size is
zero.
Simplify flame_console to use `terminui` instead of implementing the
terminal interface itself.
Fix brighten and darken alpha issue.
This is all thanks to @jtmcdole's insight & fixes
[here](flame-engine#3407).

---------

Co-authored-by: Lukas Klingsbo <[email protected]>
Co-authored-by: Erick Zanardo <[email protected]>
Co-authored-by: Lukas Klingsbo <[email protected]>
Co-authored-by: John McDole <[email protected]>
…atforms (flame-engine#3419)

Adds a warning when calling `fullScreen` and the new added method
`restoreFullscreen` when used in a desktop platform.

Also adds a brief warning to the docs about some methods in the device
class not working outside mobile

---------

Co-authored-by: Lukas Klingsbo <[email protected]>
…own] (flame-engine#3425)

Do not encode HTML by default when parsing markdown [flame_markdown].

The Flame text rendering pipeline is not configured to accept HTML
encoded sequences, therefore the default behaviour of Flame Markdown
doesn't lead to a good result:


![image](https://github.com/user-attachments/assets/b8463c88-1b2c-475e-ab23-9eb56864d518)

With this change:


![image](https://github.com/user-attachments/assets/85c94c0c-019f-4b55-b713-a995ccef1361)

Of the user can still override it as before.
…ngine#3426)

Add support for strike-through text for flame_markdown, if enabled by
the user.

Basically parses the `del` HTMl tag and maps it to a new inline text
renderer in Flame's text rendering pipeline.

The style can be controlled with a new property if desired.

In order to parse `~~`-wrapped text into the new node element, the
underlying markdown parser must have the strikethrough option enabled
(or an equivalent custom option), which can be controlled by the user if
providing their own document.
…moved in the same tick (flame-engine#3428)

Currently we end up in a bad state if a child is added to a parent that
is removed in the same tick, this PR fixes that by adding the child
after the parent has been unmounted.

Closes: flame-engine#3416
```
Package Name           Current Version   Updated Version   Update Reason
flame                  1.22.0            1.23.0            updated with minor changes
flame_3d               0.1.0-dev.3       0.1.0-dev.4       updated with major changes
flame_console          0.1.1             0.1.2             updated with minor changes
flame_forge2d          0.18.2+3          0.18.2+4          updated with patch changes
flame_isolate          0.6.2+3           0.6.2+4           updated with patch changes
flame_markdown         0.2.2+3           0.2.3             updated with minor changes
flame_oxygen           0.2.3+3           0.2.3+4           updated with patch changes
flame_sprite_fusion    0.1.3+3           0.1.3+4           updated with patch changes
flame_svg              1.11.3            1.11.4            updated with patch changes
flame_test             1.17.3            1.17.4            updated with patch changes
flame_tiled            1.21.1            1.21.2            updated with patch changes
flame_behavior_tree    0.1.3+3           0.1.3+4           dependency was updated
flame_texturepacker    4.1.3             4.1.4             dependency was updated
flame_fire_atlas       1.7.0             1.7.1             dependency was updated
flame_audio            2.10.6            2.10.7            dependency was updated
flame_spine            0.2.2+3           0.2.2+4           dependency was updated
flame_bloc             1.12.4            1.12.5            dependency was updated
flame_kenney_xml       0.1.1+3           0.1.1+4           dependency was updated
flame_lottie           0.4.2+3           0.4.2+4           dependency was updated
flame_rive             1.10.6            1.10.7            dependency was updated
flame_noise            0.3.2+3           0.3.2+4           dependency was updated
flame_riverpod         5.4.6             5.4.7             dependency was updated
flame_network_assets   0.3.3+3           0.3.3+4           dependency was updated
```
Add additional tests to flame_texturepacker
Add very basic benchmark infrastructure, using the `examples` app as a
centralized benchmark playground and with first ever benchmark file just
testing some components and updates (more to come).

This also sets up the `dart-benchmark-action` to run, starting on this
very PR!
This makes the monorepo make use of `Melos v7.0.0-dev.1` so that we can
use the pub workspaces feature.
…ngine#3434)

Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/releases">jinja2's
releases</a>.</em></p>
<blockquote>
<h2>3.1.5</h2>
<p>This is the Jinja 3.1.5 security fix release, which fixes security
issues and bugs but does not otherwise change behavior and should not
result in breaking changes compared to the latest feature release.</p>
<p>PyPI: <a
href="https://pypi.org/project/Jinja2/3.1.5/">https://pypi.org/project/Jinja2/3.1.5/</a>
Changes: <a
href="https://jinja.palletsprojects.com/changes/#version-3-1-5">https://jinja.palletsprojects.com/changes/#version-3-1-5</a>
Milestone: <a
href="https://github.com/pallets/jinja/milestone/16?closed=1">https://github.com/pallets/jinja/milestone/16?closed=1</a></p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as by passing a stored reference to a
filter that calls its argument. <a
href="https://github.com/pallets/jinja/security/advisories/GHSA-q2x7-8rv6-6q7h">GHSA-q2x7-8rv6-6q7h</a></li>
<li>Escape template name before formatting it into error messages, to
avoid issues with names that contain f-string syntax. <a
href="https://redirect.github.com/pallets/jinja/issues/1792">#1792</a>,
<a
href="https://github.com/pallets/jinja/security/advisories/GHSA-gmj6-6f8f-6699">GHSA-gmj6-6f8f-6699</a></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence types. <a
href="https://redirect.github.com/pallets/jinja/issues/2032">#2032</a></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1952">#1952</a></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment when calling block references. <a
href="https://redirect.github.com/pallets/jinja/issues/1701">#1701</a></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another async-aware filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1781">#1781</a></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation. <a
href="https://redirect.github.com/pallets/jinja/issues/1921">#1921</a></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code> call. <a
href="https://redirect.github.com/pallets/jinja/issues/2021">#2021</a></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code> objects. <a
href="https://redirect.github.com/pallets/jinja/issues/2025">#2025</a></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object. <a
href="https://redirect.github.com/pallets/jinja/issues/2027">#2027</a></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
<a
href="https://redirect.github.com/pallets/jinja/issues/2061">#2061</a></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were searched. <a
href="https://redirect.github.com/pallets/jinja/issues/1661">#1661</a></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not contain the templates directory. <a
href="https://redirect.github.com/pallets/jinja/issues/1705">#1705</a></li>
<li>Improve annotations for methods returning copies. <a
href="https://redirect.github.com/pallets/jinja/issues/1880">#1880</a></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@A@b</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1870">#1870</a></li>
<li>Tests decorated with <code>@pass_context</code> can be used with the
<code>|select</code> filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1624">#1624</a></li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the target is a namespace attribute. <a
href="https://redirect.github.com/pallets/jinja/issues/1413">#1413</a></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks does not cause the variable to be considered
initially undefined. <a
href="https://redirect.github.com/pallets/jinja/issues/1253">#1253</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/blob/main/CHANGES.rst">jinja2's
changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.5</h2>
<p>Released 2024-12-21</p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as
by passing a stored reference to a filter that calls its argument.
:ghsa:<code>q2x7-8rv6-6q7h</code></li>
<li>Escape template name before formatting it into error messages, to
avoid
issues with names that contain f-string syntax.
:issue:<code>1792</code>, :ghsa:<code>gmj6-6f8f-6699</code></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence
types. :issue:<code>2032</code></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>.
:pr:<code>1952</code></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings.
:pr:<code>1960</code></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends.
:pr:<code>1960</code></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment
when calling block references. :issue:<code>1701</code></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another
async-aware filter. :issue:<code>1781</code></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation.
:issue:<code>1921</code></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code>
call. :issue:<code>2021</code></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code>
objects. :issue:<code>2025</code></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object.
:issue:<code>2027</code></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
:pr:<code>2061</code></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were
searched. :issue:<code>1661</code></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not
contain the templates directory. :issue:<code>1705</code></li>
<li>Improve annotations for methods returning copies.
:pr:<code>1880</code></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@A@b</code>. :pr:<code>1870</code></li>
<li>Tests decorated with <code>@pass_context`` can be used with the
``|select`` filter. :issue:</code>1624`</li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the
target is a namespace attribute. :issue:<code>1413</code></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks
does not cause the variable to be considered initially undefined.
:issue:<code>1253</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pallets/jinja/commit/877f6e51be8e1765b06d911cfaa9033775f051d1"><code>877f6e5</code></a>
release version 3.1.5</li>
<li><a
href="https://github.com/pallets/jinja/commit/8d588592653b052f957b720e1fc93196e06f207f"><code>8d58859</code></a>
remove test pypi</li>
<li><a
href="https://github.com/pallets/jinja/commit/eda8fe86fd716dfce24910294e9f1fc81fbc740c"><code>eda8fe8</code></a>
update dev dependencies</li>
<li><a
href="https://github.com/pallets/jinja/commit/c8fdce1e0333f1122b244b03a48535fdd7b03d91"><code>c8fdce1</code></a>
Fix bug involving calling set on a template parameter within all
branches of ...</li>
<li><a
href="https://github.com/pallets/jinja/commit/66587ce989e5a478e0bb165371fa2b9d42b7040f"><code>66587ce</code></a>
Fix bug where set would sometimes fail within if</li>
<li><a
href="https://github.com/pallets/jinja/commit/fbc3a696c729d177340cc089531de7e2e5b6f065"><code>fbc3a69</code></a>
Add support for namespaces in tuple parsing (<a
href="https://redirect.github.com/pallets/jinja/issues/1664">#1664</a>)</li>
<li><a
href="https://github.com/pallets/jinja/commit/b8f4831d41e6a7cb5c40d42f074ffd92d2daccfc"><code>b8f4831</code></a>
more comments about nsref assignment</li>
<li><a
href="https://github.com/pallets/jinja/commit/ee832194cd9f55f75e5a51359b709d535efe957f"><code>ee83219</code></a>
Add support for namespaces in tuple assignment</li>
<li><a
href="https://github.com/pallets/jinja/commit/1d55cddbb28e433779511f28f13a2d8c4ec45826"><code>1d55cdd</code></a>
Triple quotes in docs (<a
href="https://redirect.github.com/pallets/jinja/issues/2064">#2064</a>)</li>
<li><a
href="https://github.com/pallets/jinja/commit/8a8eafc6b992ba177f1d3dd483f8465f18a11116"><code>8a8eafc</code></a>
edit block assignment section</li>
<li>Additional commits viewable in <a
href="https://github.com/pallets/jinja/compare/3.1.4...3.1.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.4&new-version=3.1.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/flame-engine/flame/network/alerts).

</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lukas Klingsbo <[email protected]>
…opagated (flame-engine#3439)

Enhance tests for flame_markdown to ensure nested styles are propagated.

Specifically adds a second section to each test to assert the element
tree (after having asserted the node tree).

And then uses that to add a nested inline style test making sure the
"CSS" is propagated and merged correctly.
luanpotter and others added 28 commits November 16, 2025 15:39
)

Deprecate `TapDetector` in favour of `TapCallbacks`
Added the Shorebird CI status badge to the root `README.md`

Co-authored-by: Lukas Klingsbo <[email protected]>
…ne#3737)

This PR removes the sometimes unnecessary creation of a growing list
from `addAll`.

> "I'm adding hundreds to thousands of components onto the screen in a
short period of time. Switching to .add from .addAll cut down on these
CPU-consuming functions:
> 
> _GrowableList.add, _allocateData, _growToNextCapacity, length=
> 
> Even if you're not adding components that need async onLoads, the
engine is always instantiating a future list and > adding to it."

Later on we should experiment with list comprehensions and see if they
create a statically sized list.
Since we now have shorebird CI we can remove some of our CI steps, more
of them will be possible to remove later.
This prints the hash in `ComponentKey.toString` so that users can
differentiate between keys when debugging.
Start documentation for flame_3d.

This is just a barebones start - we can expand as we go. Notably this
adds a diagram for the hierarchy.

<img width="981" height="547" alt="image"
src="https://github.com/user-attachments/assets/82fad295-dc8f-4c74-b5fa-22b29175beaf"
/>
Moving flame_behaviors from [VeryGoodOpenSource/flame_behaviors
repository](https://github.com/VeryGoodOpenSource/flame_behaviors)

---------

Co-authored-by: Erick <[email protected]>
Co-authored-by: Lukas Klingsbo <[email protected]>
…e#3743)

Add console with backtick on flame_console example

This makes the example a bit more ergonomic to test changes to the
console by providing a key bind, backtick, for the console. This is also
much more in line with how actual games would use this feature instead
of a FAB (for example, on Bethesda games and many others, backtick
brings up the console), and in particular will teach how to properly
propagate events so both in-game keyboard handling _and_ the console
keyboard handlers can co-exist.
…lame-engine#3741)

Support secondary taps (right click) on new callbacks system.

In order to follow through with our [event system
migration](https://docs.google.com/document/d/1nBUup9QCPioVwWL1zs79z1hWF882tAYfNywFMdye2Qc),
we need to make sure the new system is equipped to support all use
cases; also changes the existing TapCallbacks to be primary-only.

I noticed that we don't support "secondary taps" (i.e. right clicks), so
I am adding this. I honestly really dislike the fact that this is
considered a completely different event from the left click, instead of
just a property on the click event. But I kept this structure to
replicate what Flutter does, so this is more familiar for users. I think
that is worth the slight verbosity of having yet another detector. Also,
it plays well this way with Flutter because that underlying events are a
bit different (for example, the secondary ones don't support `pointId`).

Note: this is a slight breaking change because the existing detector
works for BOTH left and right click, but there is NO WAY of
distinguishing them because the `buttons` property is not propagated in
the Flutter end (massive oversight I believe - might put a PR later).
Since this provides the secondary as a solution, it also removes
secondary clicks from triggering the primary. I think this is more
versatile than having tap detector=`(primary OR secondary)` and
secondary=`(secondary only)`.

I don't think this should affect basically any users because (1) desktop
only and (2) this acceptance of right clicks was probably a bug anyway
(for example, on the example it would rotate the square and also open
the context menu, which is jarring).

However I am happy to add an option or pursue a different approach, I
believe this is the best path forward, IMO.
…lame-engine#3745)

Update input examples to use `RectangleComponent` where sensible.

Minor simplification as suggested by @spydon on
flame-engine#3741
Re-organize internal event files using the `events.dart` export.

This changes the imports on all files to use the exposed `events.dart`
export - this will vastly help us to catch issues of forgetting to
expose things. If anything is imported from `src/`, we know it is not
exposed by Flame.

This should be absolutely no-op whatsoever - just organizational.
Instead of converting from string every time a json map is read from the
assets cache we store the json map directly.
…-engine#3747)

Since the current fileName argument can take in paths it can confuse the
user when they are loading maps and tilesets (see
flame-engine/tiled.dart#89), this PR shows an
assertion when the user does this.
Moving flame_steering_behaviors from [VeryGoodOpenSource/flame_behaviors
repository](https://github.com/VeryGoodOpenSource/flame_behaviors)

---------

Co-authored-by: Lukas Klingsbo <[email protected]>
Implements an `ExpandedComponent`, which takes up as much space as
possible along the main axis within a `LinearLayoutComponent`. With more
than one `ExpandedComponent`, this expansion is divided equally.


`PaddingComponent` now inherits from `SingleLayoutComponent`.

---------

Co-authored-by: Lukas Klingsbo <[email protected]>
Co-authored-by: Lukas Klingsbo <[email protected]>
Updating flame_behaviors links in docs after package migration.

---------

Co-authored-by: Lukas Klingsbo <[email protected]>
…TileData` (flame-engine#3751)

[Sprite Fusion](https://www.spritefusion.com) now allows adding custom
attributes to each tile (See [this Discord
post](https://discord.com/channels/509714518008528896/1430116462454116424/1430116462454116424)).
This PR adds code to parse these custom attributes along with some
helper method to get the data from these attributes.
Update flame docs with latest in layout experiments

---------

Co-authored-by: Lukas Klingsbo <[email protected]>
Co-authored-by: Lukas Klingsbo <[email protected]>
```
The following 25 packages will be updated:

Package Name               Current Version   Updated Version   Update Reason
flame                      1.32.0            1.33.0            manual versioning
flame_test                 2.0.3             2.1.0             manual versioning
flame_audio                2.11.10           2.11.11           updated with patch changes
flame_behaviors            1.2.0             1.3.0             updated with minor changes
flame_console              0.1.2+12          0.1.2+13          updated with patch changes
flame_fire_atlas           1.8.11            1.8.12            updated with patch changes
flame_network_assets       0.3.3+16          0.3.3+17          updated with patch changes
flame_spine                0.2.2+16          0.2.2+17          updated with patch changes
flame_sprite_fusion        0.2.0+3           0.2.1             updated with minor changes
flame_steering_behaviors   0.2.0             0.2.1             updated with minor changes
flame_tiled                3.0.7             3.0.8             updated with patch changes
flame_behavior_tree        0.1.3+16          0.1.3+17          dependency was updated
flame_oxygen               0.2.3+16          0.2.3+17          dependency was updated
flame_isolate              0.6.2+16          0.6.2+17          dependency was updated
flame_texturepacker        5.0.1             5.0.2             dependency was updated
flame_bloc                 1.12.17           1.12.18           dependency was updated
flame_kenney_xml           0.1.1+16          0.1.1+17          dependency was updated
flame_lottie               0.4.2+16          0.4.2+17          dependency was updated
flame_markdown             0.2.4+9           0.2.4+10          dependency was updated
flame_rive                 1.10.19           1.10.20           dependency was updated
flame_forge2d              0.19.2            0.19.2+1          dependency was updated
flame_noise                0.3.2+16          0.3.2+17          dependency was updated
flame_riverpod             5.4.19            5.4.20            dependency was updated
flame_svg                  1.11.16           1.11.17           dependency was updated
flame_3d                   0.1.1+2           0.1.1+3           dependency was updated

```
…#3755)

Introduced a `getLayerByName` method to retrieve a layer by its name in
`SpriteFusionTilemapData`.
Prepared all packages to be released to pub.dev

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Klingsbo <[email protected]>
As-is, the existing `flame_spine` supports Spine 4.2. `spine_flutter` in
4.3.0 now supports Spine 4.3, and this is backwards incompatible and
breaking. If you need Spine 4.2, you should not upgrade to `flame_spine`
0.3.0, but this is for anyone who is ready to make the Spine 4.3 jump.
We recommend pinning to 0.2.2 for `spine_flutter` 4.2.36 if you are
staying on Spine 4.2.

The top-level API has many breaking changes, and this changelog has a
good summary of what needs to be done:
https://pub.dev/packages/spine_flutter/changelog

The Dart code changes are relatively straightforward, but any Spine
models need to be re-exported through the 4.3 Spine Editor (and you
SHOULD make sure that all models still do everything that is expected!
There might be random bones that don't look right any more, random
animations, and certain models just don't work.)


Dart API changes: https://pub.dev/packages/spine_flutter/changelog
Re-export at 4.2 Spine models from the 4.3 Spine Editor and confirm each
model works.
Prepared all packages to be released to pub.dev

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Updating the flame_spine documentation to add some useful references.
Fixes some small typos in the docs
…gine#3767)

Remove an erroneous `'return bullet;'` line from the space_shooter
tutorial.
@nickf2k
Copy link
Author

nickf2k commented Nov 16, 2025

I think I should create other PR for this problem because there are so many changes after I created this. So, I close this PR now.

@nickf2k nickf2k closed this Nov 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.