// File: rcolomina[P]the_charmed_house/src/manager.cpp
// Function: Manager::run()
void Manager::run(){

    //Marcar la primera entrada al metodo
    primera_entrada=true;

    while(continuar_loop){

        ///DIBUJAR ESCENARIO///
        if(primera_entrada)
        {
            //prologo();
            cout<<endl;
            dibujar();
            cout<<endl;
            cout<<get_descripcion_estado_actual()<<endl;
            primera_entrada=false;
        }

        ///RECOGIDA DE COMMANDOS CONSOLA///
//	     cout<<"[Escena: "<<escena_actual->get_nombre()<<"]"
//				  <<"[Objetos: "<<escena_actual->get_objetos_disponibles()<<"]"
//				  <<"[Salidas: "<<escena_actual->
//				  <<endl<<">>>";

        cout<<">>>";

        //EXTRACCION DEL COMANDOS Y LOS PARAMETROS
        string entrada_consola;
        getline(cin,entrada_consola);
        //cout<<"Se ha introducido: "<<comando;
        list<string> lista_comandos;
        istringstream iss(entrada_consola);
        do{string sub;
            iss >> sub;
            //					  cout<< "Substring: " << sub << endl;
            lista_comandos.push_back(sub);
        }while(iss);

        if(!lista_comandos.empty()){
            comando=lista_comandos.front();
            lista_comandos.pop_front();
        }

        if(!lista_comandos.empty()){
            parametro1=lista_comandos.front();
            lista_comandos.pop_front();
        }

        if(!lista_comandos.empty()){
            parametro2=lista_comandos.front();
            lista_comandos.pop_front();
        }

        //list<string> params;
        //params.push_back(parametro1);
        //params.push_back(parametro2);

        ///TRATAMIENTO DE COMANDOS	  
        int ret_val = invocador_comandos.exec(comando,parametro1,parametro2);
        if(ret_val == 1)
        {
            contador_mal_comportamiento++;
        }

	  
        //Actualizar Objetos
        actualizar_objetos();

        //Actualizar Salidas
        actualizar_salidas();
    }

    //TODO: GUARDAR LA PARTIDA CON TODOS SUS ESTADOS

    //SALIDA DEL JUEGO
    if(contador_mal_comportamiento < 3 )
    {
        string goodbye_message = "GRACIAS POR JUGAR! :),TE ESPERO PRONTO DE VUELTA.";
        cout<<endl<<goodbye_message<<endl<<endl;
    }
    else
    {
	  
        cout<<endl<<
            endl<<
            "Eres una desgracia humana mentalmente o no tienes"<<
            " la sufiente madurez, así que vuelve tan sólo cuando hayas soluciodado ese asunto. ADIOS!.";				
        cout<<endl<<"ERES UN MALEDUCADO, NECESITAS CLASES DE MODALES."<<endl<<endl;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x310, %rsp            # imm = 0x310
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x2a8(%rbp)
movb $0x1, 0x2c0(%rax)
movq -0x2a8(%rbp), %rax
testb $0x1, 0x30(%rax)
je 0x3d780
movq -0x2a8(%rbp), %rax
testb $0x1, 0x2c0(%rax)
je 0x3d441
movq 0x33c2b(%rip), %rdi     # 0x70fb8
movq %rdi, -0x2c0(%rbp)
movq 0x33bf5(%rip), %rsi     # 0x70f90
movq %rsi, -0x2c8(%rbp)
callq 0x5400
movq -0x2a8(%rbp), %rdi
callq 0x3d920
movq -0x2c8(%rbp), %rsi
movq -0x2c0(%rbp), %rdi
callq 0x5400
movq -0x2a8(%rbp), %rsi
leaq -0x28(%rbp), %rdi
movq %rdi, -0x2b8(%rbp)
callq 0x3d950
movq -0x2c0(%rbp), %rdi
movq -0x2b8(%rbp), %rsi
callq 0x5350
movq %rax, -0x2b0(%rbp)
jmp 0x3d3f9
movq -0x2b0(%rbp), %rdi
movq 0x33b89(%rip), %rsi     # 0x70f90
callq 0x5400
jmp 0x3d40e
leaq -0x28(%rbp), %rdi
callq 0x5748
movq -0x2a8(%rbp), %rax
movb $0x0, 0x2c0(%rax)
jmp 0x3d441
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x5748
jmp 0x3d90c
movq 0x33b70(%rip), %rdi     # 0x70fb8
leaq 0x137ef(%rip), %rsi     # 0x50c3e
callq 0x53a0
leaq -0x58(%rbp), %rdi
movq %rdi, -0x2d0(%rbp)
callq 0x5540
movq -0x2d0(%rbp), %rsi
movq 0x33b66(%rip), %rdi     # 0x70fd8
callq 0x50f0
jmp 0x3d479
leaq -0x70(%rbp), %rdi
callq 0x3e650
leaq -0x1f0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
movl $0x8, %edx
callq 0x5660
jmp 0x3d499
jmp 0x3d49b
leaq -0x210(%rbp), %rdi
movq %rdi, -0x2d8(%rbp)
callq 0x5540
movq -0x2d8(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x54f0
jmp 0x3d4c3
leaq -0x70(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x3e670
jmp 0x3d4d5
leaq -0x210(%rbp), %rdi
callq 0x5748
movq -0x1f0(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x1f0(%rbp,%rax), %rdi
callq 0x54e0
movb %al, -0x2d9(%rbp)
jmp 0x3d501
movb -0x2d9(%rbp), %al
testb $0x1, %al
jne 0x3d49b
jmp 0x3d50d
leaq -0x70(%rbp), %rdi
callq 0x3e6b0
testb $0x1, %al
jne 0x3d593
leaq -0x70(%rbp), %rdi
callq 0x3e6d0
movq -0x2a8(%rbp), %rdi
movq %rax, %rsi
addq $0x38, %rdi
callq 0x5060
jmp 0x3d538
leaq -0x70(%rbp), %rdi
callq 0x3e700
jmp 0x3d593
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3d772
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3d769
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x5748
jmp 0x3d75d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3d75d
leaq -0x70(%rbp), %rdi
callq 0x3e6b0
testb $0x1, %al
jne 0x3d5c7
leaq -0x70(%rbp), %rdi
callq 0x3e6d0
movq -0x2a8(%rbp), %rdi
movq %rax, %rsi
addq $0x58, %rdi
callq 0x5060
jmp 0x3d5be
leaq -0x70(%rbp), %rdi
callq 0x3e700
leaq -0x70(%rbp), %rdi
callq 0x3e6b0
testb $0x1, %al
jne 0x3d5fb
leaq -0x70(%rbp), %rdi
callq 0x3e6d0
movq -0x2a8(%rbp), %rdi
movq %rax, %rsi
addq $0x78, %rdi
callq 0x5060
jmp 0x3d5f2
leaq -0x70(%rbp), %rdi
callq 0x3e700
movq -0x2a8(%rbp), %rsi
movq %rsi, %rax
addq $0x2c8, %rax            # imm = 0x2C8
movq %rax, -0x2e8(%rbp)
addq $0x38, %rsi
leaq -0x238(%rbp), %rdi
callq 0x5180
jmp 0x3d624
movq -0x2a8(%rbp), %rsi
addq $0x58, %rsi
leaq -0x258(%rbp), %rdi
callq 0x5180
jmp 0x3d63d
movq -0x2a8(%rbp), %rsi
addq $0x78, %rsi
leaq -0x278(%rbp), %rdi
callq 0x5180
jmp 0x3d656
movq -0x2e8(%rbp), %rdi
leaq -0x238(%rbp), %rsi
leaq -0x258(%rbp), %rdx
leaq -0x278(%rbp), %rcx
callq 0x38990
movl %eax, -0x2ec(%rbp)
jmp 0x3d67f
leaq -0x278(%rbp), %rdi
callq 0x5748
leaq -0x258(%rbp), %rdi
callq 0x5748
leaq -0x238(%rbp), %rdi
callq 0x5748
movl -0x2ec(%rbp), %eax
movl %eax, -0x214(%rbp)
cmpl $0x1, -0x214(%rbp)
jne 0x3d71e
movq -0x2a8(%rbp), %rax
movl 0x148(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x148(%rax)
jmp 0x3d71e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3d710
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3d704
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x5748
leaq -0x258(%rbp), %rdi
callq 0x5748
leaq -0x238(%rbp), %rdi
callq 0x5748
jmp 0x3d75d
movq -0x2a8(%rbp), %rdi
callq 0x3da90
jmp 0x3d72c
movq -0x2a8(%rbp), %rdi
callq 0x3dac0
jmp 0x3d73a
leaq -0x1f0(%rbp), %rdi
callq 0x51b0
leaq -0x70(%rbp), %rdi
callq 0x3e730
leaq -0x58(%rbp), %rdi
callq 0x5748
jmp 0x3d361
leaq -0x1f0(%rbp), %rdi
callq 0x51b0
leaq -0x70(%rbp), %rdi
callq 0x3e730
leaq -0x58(%rbp), %rdi
callq 0x5748
jmp 0x3d90c
movq -0x2a8(%rbp), %rax
cmpl $0x3, 0x148(%rax)
jge 0x3d883
leaq -0x299(%rbp), %rdi
movq %rdi, -0x2f8(%rbp)
callq 0x56d0
movq -0x2f8(%rbp), %rdx
leaq 0x1348d(%rip), %rsi     # 0x50c42
leaq -0x298(%rbp), %rdi
callq 0x299c0
jmp 0x3d7c3
leaq -0x299(%rbp), %rdi
callq 0x5420
movq 0x337e2(%rip), %rdi     # 0x70fb8
movq 0x337b3(%rip), %rsi     # 0x70f90
callq 0x5400
movq %rax, -0x300(%rbp)
jmp 0x3d7eb
movq -0x300(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x5350
movq %rax, -0x308(%rbp)
jmp 0x3d807
movq -0x308(%rbp), %rdi
movq 0x3377b(%rip), %rsi     # 0x70f90
callq 0x5400
movq %rax, -0x310(%rbp)
jmp 0x3d823
movq -0x310(%rbp), %rdi
movq 0x3375f(%rip), %rsi     # 0x70f90
callq 0x5400
jmp 0x3d838
leaq -0x298(%rbp), %rdi
callq 0x5748
jmp 0x3d903
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x299(%rbp), %rdi
callq 0x5420
jmp 0x3d90c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x5748
jmp 0x3d90c
movq 0x3372e(%rip), %rdi     # 0x70fb8
movq 0x336ff(%rip), %rsi     # 0x70f90
callq 0x5400
movq %rax, %rdi
movq 0x336f0(%rip), %rsi     # 0x70f90
callq 0x5400
movq %rax, %rdi
leaq 0x133c5(%rip), %rsi     # 0x50c74
callq 0x53a0
movq %rax, %rdi
leaq 0x133e8(%rip), %rsi     # 0x50ca6
callq 0x53a0
movq 0x336ee(%rip), %rdi     # 0x70fb8
movq 0x336bf(%rip), %rsi     # 0x70f90
callq 0x5400
movq %rax, %rdi
leaq 0x13423(%rip), %rsi     # 0x50d03
callq 0x53a0
movq %rax, %rdi
movq 0x336a1(%rip), %rsi     # 0x70f90
callq 0x5400
movq %rax, %rdi
movq 0x33692(%rip), %rsi     # 0x70f90
callq 0x5400
addq $0x310, %rsp            # imm = 0x310
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x56c0
nopw %cs:(%rax,%rax)