Skip to content

Commit 6e87aed

Browse files
committed
Fix to avoid incompatible behaviors when adding objects to a group
1 parent 0cd03bb commit 6e87aed

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
@@ -382,6 +382,7 @@ interface ObjectRefactorer {
382382
[Ref] gdObject obj,
383383
[ Const, Ref ] VariablesContainer groupVariablesContainer);
384384
void STATIC_FillMissingGroupBehaviorToObject(
385+
[Const, Ref] Platform platform,
385386
[Ref] ObjectsContainer globalObjectsContainer,
386387
[Ref] ObjectsContainer objectsContainer,
387388
[Ref] gdObject obj,

GDevelop.js/types.d.ts

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

429429
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
@@ -6219,6 +6219,7 @@ const changeScenePropertiesLayersEffectsGroups: EditorFunction = {
62196219
);
62206220
for (const behaviorName of groupVisibleBehaviorNames) {
62216221
gd.ObjectRefactorer.fillMissingGroupBehaviorToObject(
6222+
project.getCurrentPlatform(),
62226223
globalObjects,
62236224
sceneObjects,
62246225
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)