Commit Graph

92 Commits

Author SHA1 Message Date
Florian Rival dc62aea8d8 Add support for ordering For Each by an expression, with optional limit (#8319)
- For advanced use cases where it's important to run events on each instance of an object with an ordering, the For Each can now have an ordering: an expression can be written and will be evaluated for each instance separately. The For Each will then execute for each instance in the order of the result of the expression.
- It's possible to change the direction (ascending or descending)
- It's also possible to give a limit (for example, 1 will allow to pick just the instance with the highest/lowest value for the expression).
- Examples are provided in the UI for common use cases (maximum value of a variable, health points, ammo, distance to another object...)
2026-02-25 10:37:59 +01:00
Florian Rival 6bb56c6e5b Add support for local variables for loop events (While, Repeat, For Each, For Each Child Variable) and loop counter variable (#8273)
- "For Each Child Variable" now also properly support choosing local variables for the variable to iterate on, and for the variable where to store the child and the optional variable where to store the name.
- The loop counter starts from 0 and is automatically increased by 1 each time the event is repeated.
2026-02-15 16:14:04 +01:00
Florian Rival 17443587b9 Add Else event (#8216)
* This is not finished yet:
  - Documentation needs to be written.
  - Menu item (and shortcut?) to quickly toggle between a standard event and a else event must be added so it's easy to switch from one to the other.
  - Design must be adapted to make it clearer that the else event is "linked" to the previous one and is not run if the previous event is run.
2026-02-07 17:15:01 +01:00
Florian Rival 29ad7308c3 Introduce an experimental AI agent (#7659)
- This is an AI agent that takes a request and takes actions on a project: it can create scenes, find and create objects, add, remove behaviors, modify them, put instances on the scene, create or modify events, and more to come (layers, setup leaderboards, etc...).
- It's still in beta and there is room for improvement on many things, but is already useful for prototyping and learning - beginners notably are able to see what the AI can do and learn the concepts of GDevelop. For intermediate and power users, it's useful to try new things, or get things done while working on something else.
- Experiment with it and always make backup of your project before starting - in the future restoration points will be added to go back to a previous state if the result is not good or broken.
2025-06-17 16:25:03 +02:00
Florian Rival 7e1f2c6c97 Add support search (and replace) in Link events (#7637) 2025-06-04 16:42:26 +02:00
Florian Rival 58ba2668c2 Add clang-tidy and builds with assertions/memory sanitizers for libGD.js (#7051)
Only show in developer changelog
2024-10-14 12:06:42 +02:00
Aurélien Vivet 5b1e3565d3 Remove dead code (TinyXml) (#6754)
Only show in developer changelog
2024-07-05 17:45:57 +02:00
D8H 0b5f929773 Display expression errors on repeat loops (#6625) 2024-06-05 13:49:14 +02:00
D8H 231d92a2fa Allow any variables in for each child loops (#6585)
- Don't show in changelog
2024-05-23 18:30:11 +02:00
D8H 75bfa5cb45 Unify variable instructions and handle local variables (#6459)
- Global or scene variables can be used with a unique action and condition.
- Object variables can be used with a unique action and condition.
- Variables need to be declared following the same logic as the new expression syntax.
- Local variable can be declared on events
- Extensions have their own variables
- Show a diagnostic report when a preview is launched and there are missing scene variables, object variables or behaviors.
  - This is especially useful if external events are shared between several scenes.
2024-05-20 23:14:07 +02:00
Clément Pasteau a848764318 Fix libGD.wasm not properly loaded on Electron local + build warnings (#5942)
Don't show in changelog
2023-11-23 15:55:31 +01:00
Florian Rival a0925c79c3 Add a new simplified way to use variables in expressions, and automate renaming of variables in events (#5580)
* You can now simply write the name of the scene or global variable in an expression to use it: `1 + MyVariable` (instead of `1 + Variable(MyVariable)`).
* Objects can also have their variables accessed like this: `MyObject.MyVariable` (instead of `MyObject.Variable(MyVariable)`.
* This also works for properties inside functions of behaviors or custom objects. For example, you can write `Speed` instead of `Object.Behavior::PropertySpeed()`.
* This syntax will also handle all types of variables without the need to write ToString. For example, you can now write "Score: " + CoinsEarned instead of "Score: " + ToString(Variable(CoinsEarned)).
* This syntax will only work (and autocompletions will be shown) if you add the variable in the variables editor of the scene, the project or in the variables of the object. It's a good practice to always declare your variables here and give them a default value - do it to benefit from this new simplified syntax, which will make your formulas and expressions much more readable.
* When you rename a variable in an editor, it will now rename the variables everywhere in the events of the project. This makes it much easier to change the name of a variable if you find a better one. Note that this works for "rootæ variables, but not variables inside structures or arrays.
2023-09-21 18:56:12 +02:00
Florian Rival b262cb4c3e Fix link in disabled events still processed internally (#5619)
* This could generate infinite loop crashs even when a link is included as
a sub event of a disabled event.
2023-09-01 13:58:51 +02:00
AlexandreS 3286722b6a Enable search and replace in For each object events and Javascript events (#5477) 2023-07-13 17:09:00 +02:00
AlexandreS d0f39027af Slightly lighten project file when lots of comments are present in the events sheets (#5299) 2023-05-17 16:45:19 +02:00
D8H 859b1d0a1c Refactor events when project elements are renamed (#5031)
* Project elements are: scenes, external layouts, external events, layers, layer effects, object effects, sprite animations and sprite points.
2023-03-20 12:02:36 +01:00
Fannie Yan 186eb4fcf0 Fix undo and redo in events sheet (#3981)
* Scroll to last change
* Select all events where a change occured
2022-06-03 16:28:27 +02:00
Florian Rival 5495257732 Reduce size of events in JSON by not writing empty events/sub-instructions arrays (#3975)
Only show in developer changelog
2022-05-31 17:24:01 +02:00
Florian Rival 7cdc92c776 Introduce the "Wait X seconds" action (#3852)
* This action allow to wait for a few seconds before continuing to run the next actions and sub-events.
* It is perfect to create cut scenes, advanced logic or just run things progressively without relying on timers. In a lot of cases, it's simpler and faster to use this new action.
* The action remember the picked objects: it works like an usual event, but run the actions (and sub-events) a bit later in time. While the action wait, other events continue to run as usual.
* Thanks to @arthuro555 for the ground work and follow up on this new feature.

Only show the rest in developer changelog:

* Add support for asynchronous actions (including for objects).
* Add exhaustive test cases for asynchronous actions. 

Co-authored-by: Arthur Pacaud <arthur.pacaud@hotmail.fr>
2022-05-02 19:44:15 +02:00
Florian Rival 7597dbe0d1 Add (new) conditions and expressions to compare the number of instances picked or living on the scene (#3842)
* Add `PickedInstancesCount` and `SceneInstancesCount` expressions, to replace `Count`. These expressions don't do any "picking" of instances, so they are safe to use anywhere without "weird" side effects.
* Equivalent conditions are available for all objects. These conditions allow to check at any point in your events the number of instances living on the scene or picked by actions/conditions.
  * This is useful to check if enough objects are picked by a condition before launching an action. 
  * Because this condition does not change the already picked objects, it's safe to use anywhere without any side effect.

Only show the rest in the developer changelog:
* Allow to read events missing some fields (like `disabled`, `folded`).
* Reduce the useless information stored in project JSON files by not storing the fields if they have their default value.
2022-04-23 16:35:10 +02:00
Fannie Yan 90721c4059 Add possibility to replace text in text events (Comments and Groups) (#3735)
* Add possibility to replace text in text events (Comments and Group names) with search and replace
2022-03-08 09:35:32 +01:00
Arthur Pacaud c5fe498a1f Add a for each structure event (#2113)
* Add a for each structure event

* Apply review instructions to newIDE

* Fix naming in code generator

* Rename ForEachStructure

--> ForEachChildVariable

* Rename Structure and Variable

--> IterableVariableName and IteratorVariableName

* Delete old file

* Fix flow typing

* Remove unecessary includes

* Add key iterator, make iterators optional

* Clean up ForEachChildVariableEvent.js

* Add method on gdjs.Variable to replace children

* Add word warp to the event label
2020-11-29 18:50:07 +00:00
Quarkstar 4eb8ddfba6 Fix renamed object not updated in ForEach or Repeat event (#1654) 2020-04-18 18:24:47 +02:00
Aurélien Vivet ce4fdbe4f8 Add option to search in event texts (comments, group names) (#1398) 2020-02-01 18:45:15 +00:00
Florian Rival bff43ee771 Remove dead code related to old ExpressionParser 2020-01-27 22:08:48 +00:00
Florian Rival fbde5edfae Add automatic refactoring of events/groups when renaming/deleting a group (#1225) 2019-09-11 08:39:44 +01:00
Florian Rival 87adc2cab9 [WIP] Clean old methods used only in GD4 in objects and behaviors (3) 2019-04-21 20:52:48 +01:00
Florian Rival d59f40ff5d [WIP] Clean old methods used only in GD4 in objects and behaviors (2) 2019-04-21 19:40:05 +01:00
Florian Rival 7f0033989a [WIP] Partially clean GDJS/GDCpp/GDCore of wxWidgets related code 2019-04-20 01:21:28 +01:00
Florian Rival a8559bfbbc Add clang-format to format (C++) source files automatically (#491)
* Update all CMakeLists of extensions to use clang-format
* Run clang-format on all Extensions
* Update GDCore CMakeLists.txt to add clang-format
* Run clang-format on GDCore files
* Update GDJS and GDCpp CMakeLists.txt to add clang-format
* Run clang-format on GDCpp and GDJS files
2018-05-09 15:57:38 -07:00
Florian Rival 50768df001 Add support for display comments custom color in newIDE 2017-09-07 17:24:57 +02:00
Florian Rival ceb8b4dde1 Merge serialization methods for instructions and add serialization methods to InstructionsList 2017-08-20 17:22:23 +02:00
Victor Levasseur 10e7a11a34 All events are now grayed when disabled 2016-12-28 12:58:30 +01:00
Victor Levasseur 3533608cb0 Updated LinkEvent editor with support for including groups (#287)
* LinkEvent can now includes an events group
* New editor for LinkEvent
* Fix events groups not always included by the link event
2016-09-06 08:47:12 +02:00
Florian Rival 526fdd852f Improve a bit const-correctness of EventsCodeGenerator 2016-08-20 17:10:47 +02:00
Victor Levasseur 6fc8d1cf97 Fix heap corruption with link events 2016-08-08 12:09:06 +02:00
Florian Rival e444e80493 Update copyrights year 2016-01-14 19:46:56 +01:00
Peter J. Stieber 4605ac8688 Merge branch 'master' into UpdateWxFontStyles 2016-01-08 10:31:49 -08:00
Peter J. Stieber b8322398f3 Updated wxFont flags to remove warnings.
Changed font family and font weight flags to use the new convention
to prevent deprecation warnings from wxWidgets.
2016-01-08 09:49:33 -08:00
Peter J. Stieber 4573a9db1e Updated wxBrush styles.
Changed the following in wxBrush constructors:
wxTRANSPARENT -> wxBRUSHSTYLE_TRANSPARENT
wxSOLID -> wxBRUSHSTYLE_SOLID
wxFDIAGONAL_HATCH -> wxBRUSHSTYLE_FDIAGONAL_HATCH
This fixed 6 warnings in the build.
2016-01-08 07:23:52 -08:00
Florian Rival fe9252d3f9 Move SkinHelper to IDE/wxTools directory & avoid crash at startup if StartHerePage is deleted 2015-12-08 22:51:16 +01:00
Florian Rival 63cb853d72 Change file organization (Events, Extensions + more folders) 2015-11-01 11:26:40 +01:00
Victor Levasseur cc6810e3f6 Replace unsigned int with std::size_t where it's possible 2015-08-18 18:43:39 +02:00
Victor Levasseur a1cf27fe3c Replace some unsigned int with std::size_t in the LinkEvent 2015-08-17 23:11:10 +02:00
Victor Levasseur 18c59dbb5d Totally remove ToString(), ToInt(), ToFloat() and ToDouble() 2015-07-22 16:20:26 +02:00
Victor Levasseur 445e0061a7 Remove Utf8Tools.h 2015-07-17 12:05:12 +02:00
Victor Levasseur 4efab914fe Rename Utf8String.h/.cpp to String.h/.cpp 2015-07-09 18:17:13 +02:00
victorlevasseur c98e97e60a Merge remote-tracking branch 'upstream/master' into utf8-gdstring
Conflicts:
	.travis.yml
	Core/GDCore/BuiltinExtensions/SpriteExtension/Dialogs/SpriteObjectEditor.cpp
	Core/GDCore/Events/Builtin/ForEachEvent.h
	Core/GDCore/Events/Event.cpp
	Core/GDCore/Events/Event.h
	Core/GDCore/Events/EventMetadata.cpp
	Core/GDCore/Events/EventMetadata.h
	Core/GDCore/Events/ExpressionMetadata.h
	Core/GDCore/Events/Instruction.h
	Core/GDCore/Events/InstructionMetadata.h
	Core/GDCore/IDE/Dialogs/EditLayerDialog.cpp
	Core/GDCore/PlatformDefinition/Object.cpp
	Core/GDCore/PlatformDefinition/PlatformExtension.cpp
	Core/GDCore/PlatformDefinition/PlatformExtension.h
	Extensions/Function/Extension.cpp
	Extensions/TextObject/TextObject.h
	Extensions/TimedEvent/Extension.cpp
	GDCpp/GDCpp/BuiltinExtensions/CommonInstructionsExtension.cpp
	GDCpp/GDCpp/BuiltinExtensions/KeyboardTools.h
	GDCpp/GDCpp/BuiltinExtensions/MouseTools.h
	GDCpp/GDCpp/BuiltinExtensions/SceneExtension.cpp
	GDCpp/GDCpp/InputManager.cpp
	GDCpp/GDCpp/RuntimeSpriteObject.cpp
	GDCpp/GDCpp/RuntimeSpriteObject.h
	GDJS/GDJS/BuiltinExtensions/BaseObjectExtension.cpp
	GDJS/GDJS/BuiltinExtensions/CommonInstructionsExtension.cpp
	GDJS/GDJS/BuiltinExtensions/SceneExtension.cpp
	GDJS/GDJS/BuiltinExtensions/VariablesExtension.cpp
	GDJS/GDJS/Exporter.cpp
	GDJS/GDJS/Exporter.h
	IDE/Dialogs/ObjectsEditor.cpp
	IDE/Preferences.cpp
2015-07-06 15:16:59 +02:00
Victor Levasseur 0a1542ba73 Replace all std::string by gd::String in GDCore
Add some other methods to gd::String (insert, ...)
2015-07-04 23:58:06 +02:00
Florian Rival 2c0f1543ec Prefer to return const reference to std::string instead of std::string by value 2015-06-01 23:23:34 +12:00