void Viewer::startsubTask1(){
    //qWarning("Start subtask %d",(task_pos/3)+1);

    if (task_pos+3<=task_files.size()){
        rankings[0]=0;
        rankings[1]=1;
        rankings[2]=2;

        addTerrain(task_files[task_pos+0]);
        addTerrain(task_files[task_pos+1]);
        addTerrain(task_files[task_pos+2]);

        curTerr = 0;
        //updateGL();
        emit updateTasklabel(QString::number((task_pos/3)+1)+"/"+QString::number(task_files.size()/3));
        emit rankingChanged();
    }
    else{
        qWarning("Task 1  ended");
        task_status = 1;
        task_id = TASK0;
        emit updateIDlabel("TASK "+QString::number(task_id));
        emit updateTasklabel(QString::number(curTerr+1)+"/"+QString::number(terrains.size()));
        emit taskIsNot1(true);
        emit taskIsNot0(true);
        startTask2("task2_files.txt");
    }
}
void Viewer::startTask2(QVector<QString> tlist){
    if (tlist.size()==0)    return;

    QMessageBox msgBox;
    msgBox.setText("Task 2 is about to begin\n You will find information about this task on the bottom left area of the screen");
    msgBox.exec();

    task_files = tlist;
    task_id = TASK2;
    task_status = 1;
    task_pos = 0;
    addTerrain(task_files.front());
    emit updateTasklabel(QString::number(task_pos+1)+"/"+QString::number(task_files.size()));
    emit updateIDlabel("TASK "+QString::number(task_id));
    emit taskIsNot1(true);
    emit taskIsNot0(true);
    emit infoChanged(task2_info);
}
bool SimpleMageTowerlvl2::init()
{
	if (!Sprite::init())
	{
		return false;
	}
	setTowerType(MAGE_2);
	setLevel(2);
	addTerrain();
	initTower(2);
	setListener();
	setScope(180.0f);
	setUpdateMoney(240);
	setBuildMoney(260);
	isUpdateMenuShown = false;
	schedule(schedule_selector(SimpleMageTowerlvl2::shoot), 2.0f);
	SoundManager::playMageTower2Ready();
	return true;
}
bool ArchMageTower::init()
{
	if (!Sprite::init())
	{
		return false;
	}
	setTowerType(ARCHMAGE);
	DelayBullet[0] = NULL;
	DelayBullet[1] = NULL;
	DelayBullet[2] = NULL;
	setLevel(4);
	addTerrain();
	initTower(4);
	setListener();
	setScope(220.0f);
	setBuildMoney(730);
	isUpdateMenuShown = false;
	SoundManager::playArchmageReady();
	schedule(schedule_selector(ArchMageTower::Attack), 2.0f);
	schedule(schedule_selector(ArchMageTower::AtTwister), 7.0f);
	return true;
}
/*
QString Viewer::updateTlabel(){
    //if (task_id == TASK0)
     return QString::number(curTerr)+"/"+QString::number(terrains.size());
}
*/
bool Viewer::moveNext(){
    //qWarning("next %d!n",task_id);
    switch(task_id){

    case TASK0:
        {
            if (curTerr<terrains.size()-1){
                curTerr+=1;
                updateGL();
                emit updateTasklabel(QString::number(curTerr+1)+"/"+QString::number(terrains.size()));
                return true;
            }
            return false;
        }

    case TASK1:
        {
            endsubTask1();
            //qWarning("task ended!n");
            startsubTask1();
            updateGL();
            return true;
        }

    case TASK2:
        {
            if (terrains.size()>0){
                DeleteTerrain(curTerr);
                curTerr -= 1;

            }
                if (task_pos+1<task_files.size()){
                    task_pos+=1;
                    addTerrain(task_files[task_pos]);
                    emit updateTasklabel(QString::number(task_pos+1)+"/"+QString::number(task_files.size()));
                }
                else{

                    qWarning("Task 2  ended");
                    DeleteAll();
                    task_status = 1;
                    task_id = TASK0;
                    emit updateIDlabel("TASK "+QString::number(task_id));
                    emit updateTasklabel(QString::number(curTerr+1)+"/"+QString::number(terrains.size()));
                    emit taskIsNot0(false);
                    emit infoChanged(task0_info);

                    QMessageBox msgBox;
                    msgBox.setText("Thank you for participating to this experiment!\n  Let me know that you are done.");
                    msgBox.exec();

                }

                updateGL();


                return false;
        }

    }
    return false;
}