/* * GDevelop Core * Copyright 2008-2015 Florian Rival (Florian.Rival@gmail.com). All rights reserved. * This project is released under the MIT License. */ #include "Platform.h" #include "GDCore/Extensions/PlatformExtension.h" #include "GDCore/Project/ChangesNotifier.h" #include "GDCore/IDE/ProjectExporter.h" #include "GDCore/Project/Object.h" #include "GDCore/String.h" using namespace std; #undef CreateEvent namespace gd { #if defined(GD_IDE_ONLY) gd::ChangesNotifier Platform::defaultEmptyChangesNotifier; #endif Platform::Platform() { //ctor } Platform::~Platform() { //dtor } bool Platform::AddExtension(std::shared_ptr extension) { std::cout << extension->GetName(); for (std::size_t i =0;iGetName() == extension->GetName() ) { std::cout << "(Already loaded!)" << std::endl; return false; } } //Load all creation/destruction functions for objects provided by the extension vector < gd::String > objectsTypes = extension->GetExtensionObjectsTypes(); for ( std::size_t i = 0; i < objectsTypes.size();++i) { creationFunctionTable[objectsTypes[i]] = extension->GetObjectCreationFunctionPtr(objectsTypes[i]); } extensionsLoaded.push_back(extension); std::cout << ", "; return true; } bool Platform::IsExtensionLoaded(const gd::String & name) const { for (std::size_t i =0;iGetName() == name ) return true; } return false; } std::shared_ptr Platform::GetExtension(const gd::String & name) const { for (std::size_t i =0;iGetName() == name ) return extensionsLoaded[i]; } return std::shared_ptr (); } std::shared_ptr Platform::CreateObject(gd::String type, const gd::String & name) const { if ( creationFunctionTable.find(type) == creationFunctionTable.end() ) { std::cout << "Tried to create an object with an unknown type: " << type << " for platform " << GetName() << "!" << std::endl; type = ""; if ( creationFunctionTable.find("") == creationFunctionTable.end() ) { std::cout << "Unable to create a Base object!" << std::endl; return std::shared_ptr(); } } //Create a new object with the type we want. gd::Object * object = (creationFunctionTable.find(type)->second)(name); object->SetType(type); return std::shared_ptr (object); } gd::Behavior* Platform::CreateBehavior(const gd::String & behaviorType) const { for (std::size_t i =0;iCreateBehavior(behaviorType); if ( behavior != NULL ) return behavior; } return NULL; } std::shared_ptr Platform::CreateBehaviorSharedDatas(const gd::String & behaviorType) const { for (std::size_t i =0;i behavior = extensionsLoaded[i]->CreateBehaviorSharedDatas(behaviorType); if ( behavior != std::shared_ptr() ) return behavior; } return std::shared_ptr(); } #if defined(GD_IDE_ONLY) std::shared_ptr Platform::CreateEvent(const gd::String & eventType) const { for (std::size_t i =0;i event = extensionsLoaded[i]->CreateEvent(eventType); if ( event != std::shared_ptr() ) return event; } return std::shared_ptr(); } #if !defined(GD_NO_WX_GUI) std::shared_ptr Platform::GetLayoutPreviewer(gd::LayoutEditorCanvas & editor) const { return std::shared_ptr(new gd::LayoutEditorPreviewer); } std::shared_ptr Platform::GetProjectExporter() const { return std::shared_ptr(new gd::ProjectExporter); } #endif #endif }