---
# System prepended metadata

title: CGRA 2020/2021

---

# 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.
![screenshot1-1](imagens/Screenshots/proj-t01g09-1-1.png)
Visto de costas.
![screenshot1-2](imagens/Screenshots/proj-t01g09-1-2.png)

#### Fundo de areia e ninho
Fundo de areia com alturas e ninho representados.
![screenshot2-1](imagens/Screenshots/proj-t01g09-2-1.png)
![screenshot2-2](imagens/Screenshots/proj-t01g09-2-2.png)

#### Superfície da Água
Superfície da água com distorção e alturas.
![screenshot3-1](imagens/Screenshots/proj-t01g09-3-1.png)
![screenshot3-2](imagens/Screenshots/proj-t01g09-3-2.png)

#### Pedras
Várias pedras com diferentes tamanhos espalhadas aleatóriamente pelo fundo de areia, com visão panoramica.
![screenshot4-1](imagens/Screenshots/proj-t01g09-4-1.png)
Detalhes de uma pedra.
![screenshot4-2](imagens/Screenshots/proj-t01g09-4-2.png)

#### Pilares
Pilares com textura de madeira.
![screenshot5-1](imagens/Screenshots/proj-t01g09-5-1.png)
![screenshot5-2](imagens/Screenshots/proj-t01g09-5-2.png)

#### Elementos Adicionais
Grupo de três pirâmides com cores diferentes (verde claro ou verde escuro) representando algas.
![screenshot6-1](imagens/Screenshots/proj-t01g09-6-1.png)
![screenshot6-2](imagens/Screenshots/proj-t01g09-6-2.png)

#### Recolha de Pedras e Largar no Ninho 
Rochas depois de largadas no ninho.
![screenshot7-1](imagens/Screenshots/proj-t01g09-7-1.png)
Peixe depois de recolher uma pedra.
![screenshot7-2](imagens/Screenshots/proj-t01g09-7-2.png)


#### Funcionalidades Adicionais

##### Lançamento de Rochas
Peixei apanhou uma rocha e deslocou-se até perto do ninho, subindo até a altura maxima.
![Screenshot8-1](imagens/Screenshots/proj-t01g09-8-1.png)
O utilizador clicou no 'C' lançando a rocha, esta encontra-se no meio da água
![screenshot8-2](imagens/Screenshots/proj-t01g09-8-2.png)
A rocha chegou ao patamar da areia e foi colocada numa posição predeterminada no ninho
![screenshot18-3](imagens/Screenshots/proj-t01g09-8-3.png)

##### 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.
![screenshot8-4](imagens/Screenshots/proj-t01g09-8-4.png)
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.
![screenshot8-5](imagens/Screenshots/proj-t01g09-8-5.png)

##### Algas
Temos aqui uma captura de ecrã com algas muito próximas da camara.
![screenshot8-6](imagens/Screenshots/proj-t01g09-8-6.png)


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.