public void AtualizarPerfil() { perfilSelecionado.perfil.nomeEmpresa = nomeEmpresa.text; perfilSelecionado.perfil.nomeJogador = nomeJogador.text; perfilSelecionado.perfil.novoPerfil = false; // TODO(andre:2018-06-30): Criar interface grafica para criar a metodologia. EtapaMetodologia etapaPlanejamento = new EtapaMetodologia(TipoEtapaMetodologia.Planejamento, 1.0f, 3.0f); EtapaMetodologia etapaDesenvolvimento = new EtapaMetodologia(TipoEtapaMetodologia.Desenvolvimento, 1.0f, 3.0f); EtapaMetodologia etapaValidacao = new EtapaMetodologia(TipoEtapaMetodologia.Validacao, 1.0f, 3.0f); EtapaMetodologia etapaConcluir = new EtapaMetodologia(TipoEtapaMetodologia.Concluir, 2.0f); Metodologia metodologia = new Metodologia(); metodologia.etapas.Add(etapaPlanejamento); metodologia.etapas.Add(etapaDesenvolvimento); metodologia.etapas.Add(etapaValidacao); metodologia.etapas.Add(etapaConcluir); listaMetodologias.metodologias = new List <Metodologia>(); listaMetodologias.metodologias.Add(metodologia); metodologiaAtual.indiceMetodologia = 0; metodologiaAtual.metodologia = listaMetodologias.metodologias[metodologiaAtual.indiceMetodologia]; Funcionario funcionario = new Funcionario(10, 10, 10, 10); listaFuncionarios.funcionarios = new List <Funcionario>(); listaFuncionarios.funcionarios.Add(funcionario); }
public void DesenvolverProjeto(ProjetoAtual projetoAtual, DadosPerfil perfil, EtapaMetodologia etapaMetodologia) { Projeto projeto = projetoAtual.projeto; Prioridades prioridadesEscolhidasNormalizadas = projetoAtual.prioridadesEscolhidas.Normalizada(); // TODO(andre:2018-06-30): Usar data interna do jogo pra calcular o progresso float tempoPassado = Time.deltaTime; progresso += tempoPassado; float pontosDesign = etapaMetodologia.ObterMultiplicadorDesign(projeto, prioridadesEscolhidasNormalizadas); float pontosTecnologia = etapaMetodologia.ObterMultiplicadorTecnologia(projeto, prioridadesEscolhidasNormalizadas); // TODO(andre:2018-07-01): Definir como são gerados os pontos de erro float pontosErro = 0; // TODO(andre:2018-07-01): Definir como são gerados os pontos de pesquisa float pontosPesquisa = 0.15f; pontosDesign *= tempoPassado * habilidadeDesign; pontosTecnologia *= tempoPassado * habilidadeTecnologia; pontosErro *= tempoPassado * 10; pontosPesquisa *= tempoPassado * habilidadePesquisa; // TODO(andre:2018-06-30): Utilizar aleatoriedade pontosDesignAcumulados += pontosDesign; pontosTecnologiaAcumulados += pontosTecnologia; pontosErroAcumulados += pontosErro; pontosPesquisaAcumulados += pontosPesquisa; if (ultimaAtualizacao + etapaMetodologia.frequenciaAtualizacao < progresso) { ultimaAtualizacao = progresso; float pontosDesignGerados = Random.Range(pontosDesignAcumulados * 0.5f, pontosDesignAcumulados); float pontosTecnologiaGerados = Random.Range(pontosTecnologiaAcumulados * 0.5f, pontosTecnologiaAcumulados); float pontosErroGerados = Random.Range(pontosErroAcumulados * 0.5f, pontosErroAcumulados); float pontosPesquisaGerados = Random.Range(pontosPesquisaAcumulados * 0.1f, pontosPesquisaAcumulados); Debug.Log("Pontos gerados: " + pontosDesignGerados + " | " + pontosTecnologiaGerados + " | " + pontosErroGerados + " | " + pontosPesquisaGerados); projeto.pontosDesign += (int)pontosDesignGerados; projeto.pontosTecnologia += (int)pontosTecnologiaGerados; projeto.pontosErro += (int)pontosErroGerados; perfil.pontosPesquisa += (int)pontosPesquisaGerados; pontosDesignAcumulados = 0; pontosTecnologiaAcumulados = 0; pontosErroAcumulados = 0; pontosPesquisaAcumulados = 0; } }
IEnumerator AtualizarMetodologia() { float progressoEtapa = 0; Metodologia metodologia = metodologiaAtual.metodologia; EtapaMetodologia etapaAtual = metodologia.ObterEtapaAtual(); if (etapaAtual.temDuracao) { while (progressoEtapa < etapaAtual.duracao) { progressoEtapa += Time.deltaTime; foreach (Funcionario funcionario in listaFuncionariosContratados.funcionarios) { funcionario.DesenvolverProjeto(projetoAtual, perfilSelecionado.perfil, etapaAtual); } // GAMBIARRA: A ideia é que como a ultima etapa não tem tempo para concluir essa conta deveria funcionar de modo diferente // projetoAtual.progresso = (metodologia.indiceEtapaAtual + (progressoEtapa / etapaAtual.duracao)) / (float)metodologia.etapas.Count; projetoAtual.progresso = (metodologia.indiceEtapaAtual + (progressoEtapa / etapaAtual.duracao)) / ((float)metodologia.etapas.Count - 1); eventoAtualizarProgresso.Invoke(); yield return(null); } } else { avancarEtapaMetodologiaSemDuracao = false; while (!avancarEtapaMetodologiaSemDuracao) { foreach (Funcionario funcionario in listaFuncionariosContratados.funcionarios) { funcionario.DesenvolverProjeto(projetoAtual, perfilSelecionado.perfil, etapaAtual); } // GAMBIARRA: A ideia é que por não ter tempo para concluir essa etapa deveria funcionar de modo diferente // projetoAtual.progresso = (float)(metodologia.indiceEtapaAtual + 1) / (float)metodologia.etapas.Count; projetoAtual.progresso = 1; eventoAtualizarProgresso.Invoke(); yield return(null); } } metodologia.indiceEtapaAtual += 1; if (metodologia.indiceEtapaAtual >= metodologia.etapas.Count) { metodologia.indiceEtapaAtual = 0; ConcluirProjeto(); } else { eventoAvancarEtapaMetodologia.Invoke(); // MUITA GAMBIARRA // A etapa de conclusão não tem uma interface para comecar ela if (metodologia.ObterTipoEtapa() == TipoEtapaMetodologia.Concluir) { ComecarEtapaMetodologia(); } } }