Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -375,22 +375,26 @@ jobs:
# setuptools will make distutils available again (but we should migrate our packages probably).
command: |
pip install setuptools
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

cd newIDE\app

npm -v
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

Remove-Item package-lock.json

$Env:REQUIRES_EXACT_LIBGD_JS_VERSION = "true"

npm install
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

cd ..\electron-app

Remove-Item package-lock.json

npm install
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

cd ..\..

Expand Down
53 changes: 0 additions & 53 deletions .github/workflows/pull-requests.yml

This file was deleted.

4 changes: 2 additions & 2 deletions Core/GDCore/Extensions/Builtin/FileExtension.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
"specified element.\nSpecify the structure leading to the "
"element using / (example : Root/Level/Current)\nSpaces are "
"forbidden in element names."),
_("Save _PARAM2_ in _PARAM1_ of storage _PARAM0_"),
_("Save value _PARAM2_ in _PARAM1_ of storage _PARAM0_"),
"",
"res/actions/fichier24.png",
"res/actions/fichier.png")
Expand All @@ -95,7 +95,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
"element.\nSpecify "
"the structure leading to the element using / (example : "
"Root/Level/Current)\nSpaces are forbidden in element names."),
_("Save _PARAM2_ in _PARAM1_ of storage _PARAM0_"),
_("Save text _PARAM2_ in _PARAM1_ of storage _PARAM0_"),
"",
"res/actions/fichier24.png",
"res/actions/fichier.png")
Expand Down
24 changes: 22 additions & 2 deletions Core/GDCore/IDE/EventsFunctionTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,34 @@ void EventsFunctionTools::ParametersToVariablesContainer(
void EventsFunctionTools::PropertiesToVariablesContainer(
const PropertiesContainer &properties,
gd::VariablesContainer &outputVariablesContainer) {
outputVariablesContainer.Clear();
AddPropertiesToVariablesContainer(
properties,
outputVariablesContainer);
}

void EventsFunctionTools::PropertiesToVariablesContainer(
const PropertiesContainer &properties,
const PropertiesContainer &sharedProperties,
gd::VariablesContainer &outputVariablesContainer) {
outputVariablesContainer.Clear();
AddPropertiesToVariablesContainer(
properties,
outputVariablesContainer);
AddPropertiesToVariablesContainer(
sharedProperties,
outputVariablesContainer);
}

void EventsFunctionTools::AddPropertiesToVariablesContainer(
const PropertiesContainer &properties,
gd::VariablesContainer &outputVariablesContainer) {
if (outputVariablesContainer.GetSourceType() !=
gd::VariablesContainer::SourceType::Properties) {
throw std::logic_error("Tried to generate a variables container from "
"properties with the wrong source type.");
}
outputVariablesContainer.Clear();

gd::String lastObjectName;
for (std::size_t i = 0; i < properties.GetCount(); ++i) {
const auto &property = properties.Get(i);
if (property.GetName().empty())
Expand Down
10 changes: 10 additions & 0 deletions Core/GDCore/IDE/EventsFunctionTools.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,22 @@ class GD_CORE_API EventsFunctionTools {
const PropertiesContainer &properties,
gd::VariablesContainer &outputVariablesContainer);

static void PropertiesToVariablesContainer(
const PropertiesContainer &properties,
const PropertiesContainer &sharedProperties,
gd::VariablesContainer &outputVariablesContainer);

static void ParametersToResourcesContainer(
const ParameterMetadataContainer &parameters,
gd::ResourcesContainer &outputResourcesContainer);

static void PropertiesToResourcesContainer(
const PropertiesContainer &properties,
gd::ResourcesContainer &outputResourcesContainer);

private:
static void AddPropertiesToVariablesContainer(
const PropertiesContainer &properties,
gd::VariablesContainer &outputVariablesContainer);
};
} // namespace gd
8 changes: 7 additions & 1 deletion Core/GDCore/Project/ObjectFolderOrObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,12 @@ void ObjectFolderOrObject::UnserializeFrom(
make_unique<ObjectFolderOrObject>();
childObjectFolderOrObject->UnserializeFrom(
project, childrenElements.GetChild(i), objectsContainer);
if (!childObjectFolderOrObject->IsFolder() &&
childObjectFolderOrObject->object == nullptr) {
// Ignore invalid references to missing objects, that can happen
// after manual edits or merges.
continue;
}
childObjectFolderOrObject->parent = this;
children.push_back(std::move(childObjectFolderOrObject));
}
Expand All @@ -289,4 +295,4 @@ void ObjectFolderOrObject::UnserializeFrom(
}
};

} // namespace gd
} // namespace gd
10 changes: 4 additions & 6 deletions Core/GDCore/Project/VariablesContainersList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,9 @@ VariablesContainersList VariablesContainersList::
variablesContainersList.Push(extension.GetSceneVariables());

gd::EventsFunctionTools::PropertiesToVariablesContainer(
eventsBasedBehavior.GetSharedPropertyDescriptors(), propertyVariablesContainer);
variablesContainersList.Push(propertyVariablesContainer);

gd::EventsFunctionTools::PropertiesToVariablesContainer(
eventsBasedBehavior.GetPropertyDescriptors(), propertyVariablesContainer);
eventsBasedBehavior.GetPropertyDescriptors(),
eventsBasedBehavior.GetSharedPropertyDescriptors(),
propertyVariablesContainer);
variablesContainersList.Push(propertyVariablesContainer);

gd::EventsFunctionTools::ParametersToVariablesContainer(
Expand All @@ -85,7 +83,7 @@ VariablesContainersList VariablesContainersList::
parameterVariablesContainer);
variablesContainersList.Push(parameterVariablesContainer);

variablesContainersList.firstLocalVariableContainerIndex = 5;
variablesContainersList.firstLocalVariableContainerIndex = 4;
return variablesContainersList;
}

Expand Down
36 changes: 36 additions & 0 deletions Core/tests/ObjectSerialization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,42 @@ TEST_CASE("ObjectSerialization", "[common]") {
CheckCustomObjectConfiguration(readProject);
}

SECTION(
"Save and load a project with an objects folder structure containing "
"missing object references") {
gd::Platform platform;
gd::Project writtenProject;
SetupProjectWithSprite(writtenProject, platform);

SerializerElement projectElement;
writtenProject.SerializeTo(projectElement);
auto& layoutsElement = projectElement.GetChild("layouts");
layoutsElement.ConsiderAsArrayOf("layout");
auto& layoutElement = layoutsElement.GetChild(0);

auto& objectsFolderStructureElement =
layoutElement.GetChild("objectsFolderStructure");
auto& rootChildrenElement = objectsFolderStructureElement.GetChild("children");
rootChildrenElement.ConsiderAsArrayOf("objectFolderOrObject");

auto& folderElement = rootChildrenElement.AddChild("objectFolderOrObject");
folderElement.SetAttribute("folderName", "Background");
auto& folderChildrenElement = folderElement.AddChild("children");
folderChildrenElement.ConsiderAsArrayOf("objectFolderOrObject");
auto& invalidObjectElement =
folderChildrenElement.AddChild("objectFolderOrObject");
invalidObjectElement.SetAttribute("objectName", "DoesNotExist");

gd::Project readProject;
readProject.AddPlatform(platform);
readProject.UnserializeFrom(projectElement);

auto& readLayout = readProject.GetLayout("Scene");
auto& rootFolder = readLayout.GetObjects().GetRootFolder();
REQUIRE(rootFolder.HasObjectNamed("MyObject"));
REQUIRE(!rootFolder.HasObjectNamed("DoesNotExist"));
}

SECTION("Clone a custom object") {
gd::Platform platform;
gd::Project project;
Expand Down
16 changes: 4 additions & 12 deletions GDJS/GDJS/Events/CodeGeneration/MetadataDeclarationHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1132,9 +1132,7 @@ void MetadataDeclarationHelper::DeclarePropertyInstructionAndExpression(
iconURL, iconURL);
addObjectAndBehaviorParameters(conditionMetadata);
conditionMetadata.SetFunctionName(getterName);
if (!isSharedProperty) {
conditionMetadata.SetHidden();
}
conditionMetadata.SetHidden();

auto &setterActionMetadata = entityMetadata.AddScopedAction(
actionName, propertyLabel,
Expand All @@ -1152,9 +1150,7 @@ void MetadataDeclarationHelper::DeclarePropertyInstructionAndExpression(
setterActionMetadata
.AddParameter("yesorno", _("New value to set"), "", false)
.SetFunctionName(setterName);
if (!isSharedProperty) {
setterActionMetadata.SetHidden();
}
setterActionMetadata.SetHidden();

auto &toggleActionMetadata = entityMetadata.AddScopedAction(
toggleActionName, _("Toggle") + " " + propertyLabel,
Expand All @@ -1168,9 +1164,7 @@ void MetadataDeclarationHelper::DeclarePropertyInstructionAndExpression(
iconURL, iconURL);
addObjectAndBehaviorParameters(toggleActionMetadata);
toggleActionMetadata.SetFunctionName(toggleFunctionName);
if (!isSharedProperty) {
toggleActionMetadata.SetHidden();
}
toggleActionMetadata.SetHidden();
} else {
auto typeExtraInfo = GetStringifiedExtraInfo(property);
auto parameterOptions = gd::ParameterOptions::MakeNewOptions();
Expand All @@ -1194,9 +1188,7 @@ void MetadataDeclarationHelper::DeclarePropertyInstructionAndExpression(
parameterOptions)
.SetFunctionName(setterName)
.SetGetter(getterName);
if (!isSharedProperty) {
propertyInstructionMetadata.SetHidden();
}
propertyInstructionMetadata.SetHidden();
}
}

Expand Down
12 changes: 8 additions & 4 deletions GDJS/GDJS/IDE/ExporterHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -574,11 +574,15 @@ void ExporterHelper::StripAndSerializeProjectData(
}

std::unordered_map<gd::String, std::set<gd::String>> scenesUsedResources;
for (std::size_t layoutIndex = 0;
layoutIndex < project.GetLayoutsCount(); layoutIndex++) {
for (std::size_t layoutIndex = 0; layoutIndex < project.GetLayoutsCount();
layoutIndex++) {
auto &layout = project.GetLayout(layoutIndex);
scenesUsedResources[layout.GetName()] =
gd::SceneResourcesFinder::FindSceneResources(project, layout);
auto sceneUsedResources = gd::SceneResourcesFinder::FindSceneResources(
project, layout);
for (auto &&resourceName : projectUsedResources) {
sceneUsedResources.erase(resourceName);
}
scenesUsedResources[layout.GetName()] = sceneUsedResources;
}

std::unordered_map<gd::String, std::set<gd::String>>
Expand Down
Loading