/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. */ #include "AppDelegate.h" #include "SampleScene.h" #include "LAppLive2DManager.hpp" #include "LAppDefine.hpp" #include "LAppPal.hpp" #if USE_AUDIO_ENGINE && USE_SIMPLE_AUDIO_ENGINE #error "Don't use AudioEngine and SimpleAudioEngine at the same time. Please just select one in your game!" #endif #if USE_AUDIO_ENGINE #include "audio/include/AudioEngine.h" using namespace ax::experimental; #elif USE_SIMPLE_AUDIO_ENGINE #include "audio/include/SimpleAudioEngine.h" using namespace CocosDenshion; #endif USING_NS_AX; static ax::Size designResolutionSize = ax::Size(LAppDefine::RenderTargetWidth, LAppDefine::RenderTargetHeight); static ax::Size smallResolutionSize = ax::Size(480, 320); static ax::Size mediumResolutionSize = ax::Size(1024, 768); static ax::Size largeResolutionSize = ax::Size(2048, 1536); AppDelegate::AppDelegate() { } AppDelegate::~AppDelegate() { Director::getInstance()->getEventDispatcher()->removeEventListener(_recreatedEventlistener); LAppLive2DManager::ReleaseInstance(); #if USE_AUDIO_ENGINE AudioEngine::end(); #elif USE_SIMPLE_AUDIO_ENGINE SimpleAudioEngine::end(); #endif } // if you want a different context, modify the value of glContextAttrs // it will affect all platforms void AppDelegate::initGLContextAttrs() { // set OpenGL context attributes: red,green,blue,alpha,depth,stencil,multisamplesCount GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8, 0}; GLView::setGLContextAttrs(glContextAttrs); } // if you want to use the package manager to install more packages, // don't modify or remove this function static int register_all_packages() { return 0; //flag for packages manager } bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto glView = director->getOpenGLView(); if(!glView) { #if (AX_TARGET_PLATFORM == AX_PLATFORM_WIN32) || (AX_TARGET_PLATFORM == AX_PLATFORM_MAC) || (AX_TARGET_PLATFORM == AX_PLATFORM_LINUX) glView = GLViewImpl::createWithRect("Demo", ax::Rect(0, 0, designResolutionSize.width, designResolutionSize.height)); #else glView = GLViewImpl::create("Demo"); #endif director->setOpenGLView(glView); } // turn on display FPS director->setStatsDisplay(true); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0f / 60); // Set the design resolution glView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::SHOW_ALL); // auto frameSize = glView->getFrameSize(); // // if the frame's height is larger than the height of medium size. // if (frameSize.height > mediumResolutionSize.height) // { // director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); // } // // if the frame's height is larger than the height of small size. // else if (frameSize.height > smallResolutionSize.height) // { // director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); // } // // if the frame's height is smaller than the height of medium size. // else // { // director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); // } register_all_packages(); // prepare for Cubism Framework API. _cubismOption.LogFunction = LAppPal::PrintMessage; _cubismOption.LoggingLevel = LAppDefine::CubismLoggingLevel; Csm::CubismFramework::StartUp(&_cubismAllocator, &_cubismOption); _recreatedEventlistener = ax::EventListenerCustom::create(EVENT_RENDERER_RECREATED, [this](EventCustom*) { LAppLive2DManager::GetInstance()->RecreateRenderer(); }); director->getEventDispatcher()->addEventListenerWithFixedPriority(_recreatedEventlistener, -1); // create a scene. it's an autorelease object auto scene = SampleScene::createScene(); // run director->runWithScene(scene); return true; } // This function will be called when the app is inactive. Note, when receiving a phone call it is invoked. void AppDelegate::applicationDidEnterBackground() { Director::getInstance()->stopAnimation(); #if USE_AUDIO_ENGINE AudioEngine::pauseAll(); #elif USE_SIMPLE_AUDIO_ENGINE SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); SimpleAudioEngine::getInstance()->pauseAllEffects(); #endif } // this function will be called when the app is active again void AppDelegate::applicationWillEnterForeground() { Director::getInstance()->startAnimation(); #if USE_AUDIO_ENGINE AudioEngine::resumeAll(); #elif USE_SIMPLE_AUDIO_ENGINE SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); SimpleAudioEngine::getInstance()->resumeAllEffects(); #endif // Director::getInstance()->startAnimation(); }