void Patron::onRegisterProvider(Handler< ::donut::Heap> const& heap) { Handler<Universe> universe = this->universe_.lock(); if( unlikely(!universe) ){ DONUT_EXCEPTION(Exception, "[BUG] Failed to lock universe."); } Handler<World> world = this->world_.lock(); if( unlikely(!world) ){ DONUT_EXCEPTION(Exception, "[BUG] Failed to lock world."); } //world heap->registerProvider(this->worldProvider_ = Handler<WorldProvider>( new WorldProvider(heap, world) )); // heaven heap->registerProvider(this->heavenProvider_ = Handler<HeavenProvider>( new HeavenProvider(heap, world->heaven()) )); // angel heap->registerProvider(this->loneAngelProvider_ = Handler<LoneAngelProvider>( new LoneAngelProvider(heap, world->heaven()) )); heap->registerProvider(this->twinAngelProvider_ = Handler<TwinAngelProvider>( new TwinAngelProvider(heap, world->heaven()) )); // angel target heap->registerProvider(this->angelElementTargetProvider_ = Handler<AngelElementTargetProvider>( new AngelElementTargetProvider(heap, world->heaven()) )); heap->registerProvider(this->angelWidgetTargetProvider_ = Handler<AngelWidgetTargetProvider>( new AngelWidgetTargetProvider(heap, world->heaven()) )); // servant heap->registerProvider(this->haloServantProvider_ = Handler<HaloServantProvider>( new HaloServantProvider(heap, world->heaven()) )); heap->registerProvider(this->contentUnderlineServantProvider_ = Handler<ContentUnderlineServantProvider>( new ContentUnderlineServantProvider(heap, world->heaven()) )); heap->registerProvider(this->elementServantProvider_ = Handler<ElementServantProvider>( new ElementServantProvider(heap, world->heaven()) )); //ウィジットのプロバイダを設定 world->elementFactory()->registerDonutProvider(heap); world->widgetFactory()->registerDonutProvider(heap); universe->hexe()->registerGeistProvider(heap); }