Skip to content

GAIPS/ChemTouchV2

Repository files navigation

Em relação à rotação dos objetos

O código que influência a rotação chama-se MaintainRotation e se encontra em Assets/V2/Scripts/Rotation aparecendo também em Container.cs para limpar a lista no release mencionado mais abaixo.

Apesar de estar funcional os únicos elementos que funcionam 100% é na faca, tablets, caixas e InkBrush sendo o código implementado no prefab de ambas as caixas + Carbon e em cada elemento que precisa da rotação. Em baixo podemos ver um exemplo na caixa:

image

Para funcionar corretamente é necessário colocar todos os elementos adicionados dentro da caixa (não sendo child) dentro da lista para correr direito pois eles irão se mover com o a sua própria rotação se não for o caso. Já para os átomos foi adicionado no prefab como mencionado anteriormente para afectar todos os átomos no jogo.

image

Está atualmente desativado pois ocorre um bug como podemos ver neste video nos 4 min e 55 sec mas a implementação está lá, tem é de evitar conflitos devido aos átomos serem adicionado às moléculas sendo necessário ver a integração do mesmo em MoleculeV2 (o que força também a rotação normal denovo pois eles não saem de molecule (clone) após ficarem sozinhos).

Como a faca, tablet e as tintas não são prefabs os únicos que estão completos com o código é o V2 e V2PT.

Em relação aos tempos

O código que faz a contagem dos tempos chama-se TimerManager e se encontra em Assets/V2/Scripts/PlayerTime sendo chamado em ContainerLock, AtomicManager e AtomicIdentifier.

É chamado em ContainerLock pois é aonde geralmente (modo normal e hard) que o jogador desbloqueia a caixa, da mesma forma que no AtomicIdentifier é chamado em IdentifyMolecules().

image

Em AtomicManager é que é feito maioria da lógica. Este foi inserido em restart() e mainMenu() para controlar quando o jogador reinicia o jogo (não troca de jogador) e quando volta ao Menu (Muda de jogador), em Start() irá criar o objeto que não será destruido (para garantir que mantém a ordem dos jogadores).

Devido à forma como o código foi implementado a forma de iniciar os tempos e contar são diferentes. Quando é tutorial o tempo é iniciado no Start() e parado até que a mensagem é mostrada completamente, isto é importante para não dar contar o tempo do tutorial além de haver um bug no tutorial que se for completo antes de todas as mensagens acabarem não será possivel passar para o próximo puzzle depois de abrir a caixa. Já para a versão normal, hard e livre é iniciado em IncreaseStep após o blindfold desaparecer

Como mencionado anteriormente, o modo normal e hard é contado quando o jogador desbloqueia as caixas em ContainerLock e no Livre quando faz o scan. Já para o tutorial é adicionado em cada case do CheckConnectionCreation(), CheckConnectionDestruction(), CheckMoleculeToggle() e CheckUnlockSucess() nos casos de sucesso.

Já para quando o jogo termina é atualizado no Update(). Um exemplo de teste + como está sendo guardado é possivel se ver neste video. No video não mostra voltar ao menu nem sair do jogo porque o controller estava batendo na parede e não ainda não tinha sido mudado para OnApplicationQuit(), respetivamente.

Extras

Mudado acesso das moleculas no modo livre

Esta mudança é vista melhor no commit build: changed way to access the dictionary onde o código mudado se encontra em Assets/V2/Scripts/AtomicIdentifier e o dicionário de moleculas em Assets/V2/Scripts/AtomDictionary/MoleculeDatabase.cs. Usando a imagem abaixo para explicar o dicionário:

image

MoleculeData é o struct que está no inicio do MoleculeDatabase onde o namePT e nameEN será o nome que irá aparecer quando o utilizador verificar a molecula dependendo se estiverem na versão em português e inglês, respetivamente. AtomCounts será o tipo de cada átomo e a quantidade de átomos irá aparecer na molécula e connectionRequirements será os tipos de conexões eixstentes para formar a molécula (AtomType.Nitrogen, AtomType.Nitrogen, 1, 2) indica que existirá 1 conexão dupla entre 2 nitrogénios enquanto que (AtomType.Nitrogen, AtomType.Oxygen, 2, 1) indica que existirá 2 conexões simples entre nitrogénio e Oxigénio.

descriptionPT e descriptionEN é a descrição que irá aparecer abaixo do namePT e nameEN mencionados anteriormente.

Possivel trabalho futuro

Devido a como o código está estruturado e feito moléculas circulares são impossiveis de ser criadas:

image

Uma solução de forma a não modificar a forma como está sendo criado os átomos seria criar algo semelhante à faca que, em vez de cortar, agarra nos eletrões livres e força a conexão entre os 2 eletrões livres.

De igual forma, moléculas como o Cloreto de amonia é impossivel de ser criada por 2 razões:

ammonium-chloride-structure

  1. Quando a molécula é adicionada para ser identificada, adicionar as 2 separadas é ter 2 mol's diferentes e o identifier só identifica 1 delas.
  2. O azoto (N) só tem 3 eletrões quando ele pode ter 4 dependendo de certas situações.

De igual forma podia ser possível a criação de 2 items. O primeiro selecionaria as 2 moléculas diferentes e faria com que elas fossem 1 só e o segundo aumentaria/diminuiria a quantitade de eletrões no átomo (ver AtomoV2, é possível ter de ser criado prefabs para este segundo caso).

About

Virtual Reality Educational Game for Stereochemistry

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages