Skip to content

Commit f4a91c6

Browse files
authored
Fix to avoid incompatible behaviors when adding objects to a group (#8846)
1 parent b9813df commit f4a91c6

7 files changed

Lines changed: 16 additions & 4 deletions

File tree

Core/GDCore/IDE/ObjectRefactorer.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "GDCore/Project/ObjectGroup.h"
1313
#include "GDCore/Project/ObjectsContainer.h"
1414
#include "GDCore/Project/ObjectsContainersList.h"
15+
#include "GDCore/Project/ObjectTools.h"
1516
#include "GDCore/Project/Variable.h"
1617
#include "GDCore/Project/VariablesContainer.h"
1718
#include "GDCore/String.h"
@@ -161,6 +162,7 @@ void ObjectRefactorer::FillMissingGroupVariablesToObject(
161162
}
162163

163164
void ObjectRefactorer::FillMissingGroupBehaviorToObject(
165+
const gd::Platform& platform,
164166
gd::ObjectsContainer &globalObjectsContainer,
165167
gd::ObjectsContainer &objectsContainer, gd::Object &object,
166168
const gd::ObjectGroup &objectGroup, const gd::String &behaviorName) {
@@ -180,8 +182,12 @@ void ObjectRefactorer::FillMissingGroupBehaviorToObject(
180182
if (!firstObject.HasBehaviorNamed(behaviorName)) {
181183
return;
182184
}
183-
object.GetBehaviors().AddBehavior(firstObject.GetBehavior(behaviorName),
184-
behaviorName);
185+
auto &behavior = firstObject.GetBehavior(behaviorName);
186+
if (!gd::ObjectTools::IsBehaviorCompatibleWithObject(
187+
platform, object.GetType(), behavior.GetTypeName())) {
188+
return;
189+
}
190+
object.GetBehaviors().AddBehavior(behavior, behaviorName);
185191
}
186192

187193
// TODO Handle position changes for group variables.

Core/GDCore/IDE/ObjectRefactorer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class Object;
1414
class ObjectsContainersList;
1515
class ObjectsContainer;
1616
class ObjectGroup;
17+
class Platform;
1718
class VariablesContainer;
1819
struct VariablesChangeset;
1920
} // namespace gd
@@ -76,6 +77,7 @@ class GD_CORE_API ObjectRefactorer {
7677
* group.
7778
*/
7879
static void FillMissingGroupBehaviorToObject(
80+
const gd::Platform& platform,
7981
gd::ObjectsContainer &globalObjectsContainer,
8082
gd::ObjectsContainer &objectsContainer, gd::Object &object,
8183
const gd::ObjectGroup &objectGroup, const gd::String &behaviorName);

GDevelop.js/Bindings/Bindings.idl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,7 @@ interface ObjectRefactorer {
386386
[Ref] gdObject obj,
387387
[ Const, Ref ] VariablesContainer groupVariablesContainer);
388388
void STATIC_FillMissingGroupBehaviorToObject(
389+
[Const, Ref] Platform platform,
389390
[Ref] ObjectsContainer globalObjectsContainer,
390391
[Ref] ObjectsContainer objectsContainer,
391392
[Ref] gdObject obj,

GDevelop.js/types.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ export class ObjectRefactorer extends EmscriptenObject {
427427
static fillAnyVariableBetweenObjects(globalObjectsContainer: ObjectsContainer, objectsContainer: ObjectsContainer, objectGroup: ObjectGroup): void;
428428
static applyChangesToVariants(eventsBasedObject: EventsBasedObject, objectName: string, changeset: VariablesChangeset): void;
429429
static fillMissingGroupVariablesToObject(obj: gdObject, groupVariablesContainer: VariablesContainer): void;
430-
static fillMissingGroupBehaviorToObject(globalObjectsContainer: ObjectsContainer, objectsContainer: ObjectsContainer, obj: gdObject, objectGroup: ObjectGroup, behaviorName: string): void;
430+
static fillMissingGroupBehaviorToObject(platform: Platform, globalObjectsContainer: ObjectsContainer, objectsContainer: ObjectsContainer, obj: gdObject, objectGroup: ObjectGroup, behaviorName: string): void;
431431
}
432432

433433
export class EventsBasedObjectVariantHelper extends EmscriptenObject {

GDevelop.js/types/gdobjectrefactorer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ declare class gdObjectRefactorer {
44
static fillAnyVariableBetweenObjects(globalObjectsContainer: gdObjectsContainer, objectsContainer: gdObjectsContainer, objectGroup: gdObjectGroup): void;
55
static applyChangesToVariants(eventsBasedObject: gdEventsBasedObject, objectName: string, changeset: gdVariablesChangeset): void;
66
static fillMissingGroupVariablesToObject(obj: gdObject, groupVariablesContainer: gdVariablesContainer): void;
7-
static fillMissingGroupBehaviorToObject(globalObjectsContainer: gdObjectsContainer, objectsContainer: gdObjectsContainer, obj: gdObject, objectGroup: gdObjectGroup, behaviorName: string): void;
7+
static fillMissingGroupBehaviorToObject(platform: gdPlatform, globalObjectsContainer: gdObjectsContainer, objectsContainer: gdObjectsContainer, obj: gdObject, objectGroup: gdObjectGroup, behaviorName: string): void;
88
delete(): void;
99
ptr: number;
1010
};

newIDE/app/src/EditorFunctions/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6249,6 +6249,7 @@ const changeScenePropertiesLayersEffectsGroups: EditorFunction = {
62496249
);
62506250
for (const behaviorName of groupVisibleBehaviorNames) {
62516251
gd.ObjectRefactorer.fillMissingGroupBehaviorToObject(
6252+
project.getCurrentPlatform(),
62526253
globalObjects,
62536254
sceneObjects,
62546255
object,

newIDE/app/src/ObjectGroupEditor/CompactObjectGroupPropertiesEditor.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ export const CompactObjectGroupPropertiesEditor = ({
221221
);
222222
for (const behaviorName of allVisibleBehaviorNames) {
223223
gd.ObjectRefactorer.fillMissingGroupBehaviorToObject(
224+
project.getCurrentPlatform(),
224225
globalObjectsContainer || objectsContainer,
225226
objectsContainer,
226227
object,
@@ -237,6 +238,7 @@ export const CompactObjectGroupPropertiesEditor = ({
237238
groupVariablesContainer,
238239
objectGroup,
239240
objectsContainer,
241+
project,
240242
]
241243
);
242244

0 commit comments

Comments
 (0)