# CGRA 2020/2021
## Group T01G09
## Project Notes
Project developed by:
| Name | Number | E-Mail |
| ---------------- | --------- | ------------------ |
| Rafael Camelo | 201907729 | up201907729@fe.up.pt|
| Mário Ferreira | 201907727 | up201907727@fe.up.pt|
----
Observações:
* Decidimos aumentar o tamanho do MyFish, visto apenas 0.5 unidades de comprimento como sugerido no enunciado este ficaria misculo comparado com o resto, atualmente tem cerca de 1.5 unidades de comprimento.
* Para representar o ninho, optámos por modificar a textura utilizada para o fundo da areia e mudámos a cor, na área correspondente do ninho, no mapa de altura do fundo de areia. O ninho tem de raio aproximadamente 9 unidades.
* Implementámos colisões com os pilares representados e limites no mapa definidos pelo tamanho do fundo de areia.
* Permitimos que o peixe pare em qualquer ponto ao longo da subida/descida (ao invés de apenas permitir que ele esteja no limite superior ou limite inferior). Para tal, se o peixe estiver no movimento de subida, usando a tecla 'l', este movimento para. A mesma lógica se aplica ao movimento de descida, usando a tecla 'p' para parar este movimento
* Como funcionalidades adicionais decidimos implementar as Algas , o lançamento de Rochas e criar mais peixes animados.
- Para as Algas implementamos a classe MySeaweed, esta classe desenha 3 algas (piramides) proximas umas das outras com cores que variam entre verde escuro e verde claro.
- Para o lançamento de rochas é preciso o peixe controlado pelo utilizador estar fora do ninho, a um máximo de 7 unidades dele e o peixe não pode estar no patamar da areia (SeaFloor), pois assim apenas largaria a rocha no mesmo local que a lançou (9 < distancia(Peixe -> CentroNinho) < 16 e Peixe.Ycoord > 0). Para lançar a rocha, se todos os criterios anteriores se verificarem, o utilizador tem clicar na tecla 'C' (a mesma para apanhar ou largar no ninho), a pedra vai descrever uma trajétoria parabólica até chegar ao patamar da areia e aí vai para uma das posições pré determinadas no ninho.
- Para os peixes animados definimos a sua posição inicial, velocidade (constante) e ângulo de viragem. Estes dois últimos valores definem o raio da trajetória do peixe.
## Screenshots
#### Detalhes do Peixe
#### Peixe
Peixe com textura em 60% do corpo e barbatanas animadas: Visto de frente.

Visto de costas.

#### Fundo de areia e ninho
Fundo de areia com alturas e ninho representados.


#### Superfície da Água
Superfície da água com distorção e alturas.


#### Pedras
Várias pedras com diferentes tamanhos espalhadas aleatóriamente pelo fundo de areia, com visão panoramica.

Detalhes de uma pedra.

#### Pilares
Pilares com textura de madeira.


#### Elementos Adicionais
Grupo de três pirâmides com cores diferentes (verde claro ou verde escuro) representando algas.


#### Recolha de Pedras e Largar no Ninho
Rochas depois de largadas no ninho.

Peixe depois de recolher uma pedra.

#### Funcionalidades Adicionais
##### Lançamento de Rochas
Peixei apanhou uma rocha e deslocou-se até perto do ninho, subindo até a altura maxima.

O utilizador clicou no 'C' lançando a rocha, esta encontra-se no meio da água

A rocha chegou ao patamar da areia e foi colocada numa posição predeterminada no ninho

##### Peixes Animados
Podemos ver um peixe animado proximo e de lado para a camara, conseguimos observar tambem um peixe virado para a camara no centro da areia, esse seria o peixe controlado pelo utilizador e por fim vemos ao fundo um outro peixe animado.

Agora vendo o nosso pedaço de oceano de cima, podemos observar os mesmo 3 peixes da captura de ecrã anterior, os dois animados a esquerda a fazer um movimento circular e o controlado pelo user no centro do pedaço de areia.

##### Algas
Temos aqui uma captura de ecrã com algas muito próximas da camara.

Desenvolver este projeto foi uma experiência muito agradavél.
Sentimos que o trabalho desenvolvido ao longo das aulas práticas foi bastante útil para a elaboração deste projeto, no sentido que enventualmente usamos tudo o que foi lecionado nas TPs. Para além disto, os enunciados para o projeto (e para os trabalhos semanais) eram muito explícitos e ao mesmo tempo davam alguma liberdade para nós, desenvolvedores, adicionarmos/modificarmos certos aspetos.
Inicialmente tivemos algumas dificuldades em compreender como os *shaders* funcionam, mas pelo final do projeto já eramos capazes de implementar e usar bem *shaders*.
O trabalho foi divido igualmente por nós, pois tivemos sempre, com raras exceções, juntos em chamada a desenvolver código.