/* * Adiciona uma cor, remaneja os aneis para que possa caber mais um */ public void ganhaCor(List <Colored.Corenum> coresDisponiveis) { /* * Os aneis (ativos) tem o mesmo tamanho. Mas comecam em lugares diferente, * e para isso rotacionamos eles. * Tambem temos de fazer cada anel preenchero suficiente para ocupar sua porcao do circulo * * Eu estou pintando os aneis conforme o camaleao ganha cores. * As cores que estao representadas na gameScene sao meramente ilustrativas. * * Isso da um pouco mais de flexibilidade. * No momento o que determina as cores realmente, e a funcao GetColor que esta em Colored * * */ float rotacaoArco = 360 / coresDisponiveis.Count; double tamArco = 1.0 / coresDisponiveis.Count; float rotacao = 0; //print("oba nova cor"); for (int i = 0; i < _rings.Length; i++) { Image r = _rings[i]; Image rImage = null; foreach (Transform t in r.transform) { rImage = t.GetComponent <Image>(); } //print("coresDisponiveis agora sao " + coresDisponiveis.Count); if (i < coresDisponiveis.Count) { //print(rImage.name); rImage.color = Colored.GetColor(coresDisponiveis[i]); //print("vou pintar o anel de nome " + rImage.name + "com cor " + rImage.color.ToString()); } else { //print("deixei o anel de id " + i + " transparente"); rImage.color = new Color(0, 0, 0, 0); } //print(r.name + " vai ter uma rotacao " + rotacao + " e vai preencher " + tamArco); //Euler angles sao graus de 0 ate 360 //é para usar euler angles e nao rotation //rotation é um formato interno do unity e nao é muito facil de usar r.rectTransform.localEulerAngles = new Vector3(0, 0, rotacao); r.fillAmount = (float)tamArco; rotacao += rotacaoArco; } }
/* * Troca a cor central para a cor desejada * Destaca o anel correspondente * Retorna os outros aneis para suas formas normais * * * Note que no unity é necessário usar um for para capturar o primeiro elemento filho, mesmo que ele seja o unico * Bem, isso é uma merda. */ public void setCentralColor(Colored.Corenum cor) { _centralColor.color = Colored.GetColor(cor); Image rImage = null; foreach (Image r in _rings) { foreach (Transform t in r.transform) { rImage = t.GetComponent <Image>(); } if (rImage.color == Colored.GetColor(cor)) { r.sprite = anelSelecionado; } else { r.sprite = anel; } } }
/* * Troca a cor central para a cor desejada * Destaca o anel correspondente * Retorna os outros aneis para suas formas normais * * * Note que no unity é necessário usar um for para capturar o primeiro elemento filho, mesmo que ele seja o unico * Bem, isso é uma merda. */ public void setCentralColor(Colored.Corenum cor) { _centralRock.color = Colored.GetColor(cor); _selectedRock = _rocks[(int)cor]; }