/********************************************************************
 *  Nomes: Gabriel Capella                       Números USP: 8962078 
 *         João Herique Luciano                               8535957
 * 
 *  Tarefa:    RedCore - EP2 MAC0463
 *  Arquivo:   AppDelegate.cpp
 *  Descrição: Classe para inicializar jogo. Padrão da biblioteca.
 ********************************************************************/

#include "AppDelegate.h"
#include "BeginScene.h"
#include "audio/include/SimpleAudioEngine.h"
using namespace CocosDenshion;

USING_NS_CC;

static cocos2d::Size designResolutionSize = cocos2d::Size(1080/2, 1920/2);

AppDelegate::AppDelegate() {
}

AppDelegate::~AppDelegate()  {
    SimpleAudioEngine::end();
}

void AppDelegate::initGLContextAttrs() {
    // set OpenGL context attributes: red,green,blue,alpha,depth,stencil
    GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8};
    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) {

        // Personaliza para descktop
        #if (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
        director->setContentScaleFactor(2);
        glview = GLViewImpl::createWithRect(
            "RedCore",
            cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height)
        );
        #else
        glview = GLViewImpl::create("RedCore");
        #endif

        director->setOpenGLView(glview);
    }

    // turn on display FPS
    #if DEBUG
    director->setDisplayStats(true);
    #endif

    // 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::NO_BORDER
    );

    register_all_packages();

    Scene* scene = BeginScene::createScene();
    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();
    SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
    SimpleAudioEngine::getInstance()->pauseAllEffects();
}

// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
    Director::getInstance()->startAnimation();
    SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
    SimpleAudioEngine::getInstance()->resumeAllEffects();
}
