/* * GDevelop Core * Copyright 2008-2015 Florian Rival (Florian.Rival@gmail.com). All rights reserved. * This project is released under the MIT License. */ #include "GDCore/Project/Project.h" #include "GDCore/Extensions/Platform.h" #include "GDCore/Extensions/Metadata/InstructionMetadata.h" #include "GDCore/Events/EventsList.h" #include "GDCore/Events/Event.h" #include "GDCore/Events/Serialization.h" #include "GDCore/Serialization/Serializer.h" #include "GDCore/Serialization/SerializerElement.h" #include "GDCore/Events/Instruction.h" #include "GDCore/Extensions/Metadata/MetadataProvider.h" #include "GDCore/Tools/Log.h" #include "GDCore/CommonTools.h" using namespace std; namespace gd { void EventsListSerialization::UpdateInstructionsFromGD31x(gd::Project & project, gd::InstructionsList & list, bool instructionsAreActions) { for (std::size_t i = 0;i parameters = instr.GetParameters(); if ( parameters.size() >= 1 ) parameters.erase(parameters.begin()+0); instr.SetParameters(parameters); } if (instr.GetType() == "VarSceneDef" || instr.GetType() == "VarGlobalDef" || instr.GetType() == "VarObjetDef" ) { instr.SetParameter(1, gd::Expression("\""+instr.GetParameter(1).GetPlainString()+"\"")); } //UpdateInstructionsFromGD31x(project, instr.GetSubInstructions(), instructionsAreActions); } } void EventsListSerialization::UpdateInstructionsFromGD2x(gd::Project & project, gd::InstructionsList & list, bool instructionsAreActions) { for (std::size_t i = 0;i parameters = instr.GetParameters(); if ( parameters.size() >= 3 ) parameters.erase(parameters.begin()+2); instr.SetParameters(parameters); } else if (instr.GetType() == "AjoutObjConcern" || instr.GetType() == "AjoutHasard") { instr.SetParameter(1, instr.GetParameter(3)); } else if (instr.GetType() == "SeDirige" || instr.GetType() == "EstTourne" ) { std::vector< gd::Expression > parameters = instr.GetParameters(); if ( parameters.size() >= 3 ) parameters.erase(parameters.begin()+2); if ( parameters.size() >= 3 ) parameters.erase(parameters.begin()+2); instr.SetParameters(parameters); } else if (instr.GetType() == "Create") { std::vector< gd::Expression > parameters = instr.GetParameters(); if ( parameters.size() >= 2 ) parameters.erase(parameters.begin()+1); if ( parameters.size() >= 2 ) parameters.erase(parameters.begin()+1); instr.SetParameters(parameters); } else if (instr.GetType() == "CreateByName") { std::vector< gd::Expression > parameters = instr.GetParameters(); if ( parameters.size() >= 2 ) parameters.erase(parameters.begin()+1); instr.SetParameters(parameters); } else if (instr.GetType() == "NbObjet") { std::vector< gd::Expression > parameters = instr.GetParameters(); if ( parameters.size() >= 2 ) parameters.erase(parameters.begin()+1); instr.SetParameters(parameters); } else if (instr.GetType() == "Distance") { std::vector< gd::Expression > parameters = instr.GetParameters(); if ( parameters.size() >= 3 ) parameters.erase(parameters.begin()+2); if ( parameters.size() >= 3 ) parameters.erase(parameters.begin()+2); if ( parameters.size() >= 4 && (parameters[3].GetPlainString() == ">=" || parameters[3].GetPlainString() == ">") ) { instr.SetInverted(true); } else { instr.SetInverted(false); } instr.SetParameters(parameters); } //Common updates for some parameters const std::vector< gd::Expression > & parameters = instr.GetParameters(); for (std::size_t j = 0;j()) event->UnserializeFrom(project, eventElem); else { std::cout << "WARNING: Unknown event of type " << type << std::endl; event = std::shared_ptr(new EmptyEvent); } event->SetDisabled(eventElem.GetBoolAttribute("disabled")); event->SetFolded(eventElem.GetBoolAttribute("folded")); list.InsertEvent(event, list.GetEventsCount()); } } void EventsListSerialization::SerializeEventsTo(const EventsList & list, SerializerElement & events) { events.ConsiderAsArrayOf("event"); for ( std::size_t j = 0;j < list.size();j++ ) { const gd::BaseEvent & event = list.GetEvent(j); SerializerElement & eventElem = events.AddChild("event"); eventElem.SetAttribute("disabled", event.IsDisabled()); eventElem.SetAttribute("folded", event.IsFolded()); eventElem.AddChild("type").SetValue(event.GetType()); event.SerializeTo(eventElem); } } using namespace std; void gd::EventsListSerialization::OpenConditions(gd::Project & project, gd::InstructionsList & conditions, const SerializerElement & elem) { elem.ConsiderAsArrayOf("condition", "Condition"); for(std::size_t i = 0; i parameters; //Compatibility with GD <= 3.3 if (conditionElem.HasChild("Parametre")) { for (std::size_t j = 0;j parameters; //Compatibility with GD <= 3.3 if (actionElem.HasChild("Parametre")) { for (std::size_t j = 0;j