A Campainha, evento de início e fim de aula, é representada pela meia esfera verde que se encontra em cima da mesa, visível na figura 16. Ao objecto encontra associado um script de LSL, o “SensorAssiduidade”. Este script foi desenvolvido de forma a comunicar com as quatro tochas e permitir controlar pelo menos 99 avatares. O
Página - 78
conjunto dos 99 avatares com avatar do professor perfaz um total de 100 avatares, e este é o número máximo de avatares que é possível visualizar por região na versão cliente do SL (Linden Lab, 2008d).
Figura 16 – Campainha antes de iniciar a aula
O evento de início de aula é despoletado pelo professor, ao clicar na Campainha, representada na figura 17. Assim, o script da Campainha que estava adormecido entra em funcionamento, mudando de cor para vermelho, e solicita ao professor que confirme se de facto é mesmo para iniciar uma aula.
Para tal, no canto superior direito do cliente SL, surge uma caixa de diálogo de cor azul através da função llDialog() que guarda na variável UserMoodle o nome do avatar do professor, e na variável detected o seu UUID, dando início à transferência dos dados entre as componentes do sistema em execução no mundo virtual SL e o módulo de assiduidade, integrado no Moodle (base de dados SecondLife).
Página - 79 Figura 17 – Confirmação de início de aula
Caso o professor clique no botão cancelar, o script “SensorAssiduidade” volta a adormecer. Mas no caso de clicar no botão “Iniciar” o script vai solicitar à base de dados do Moodle todos os shortname das disciplinas que o UUID guardado na variável detected lecciona, através da função llHTTPRequest()que envia o UUID do professor. Para tal é executada a página list_courses.php.
Os shortname das disciplinas são devolvidos através do evento
http_response() e ao serem recebidas são guardadas na lista ListCourses, e simultaneamente o texto por cima da Campainha muda para “Toque Novamente na CAMPAINHA para Seleccionar a Disciplina" com a cor verde representada na figura 18.
Ao clicar novamente na Campainha, uma de duas situações podem acontecer: a lista ListCourses está vazia, o que significa que o professor não tem qualquer disciplina registada no Moodle, ou tem pelo menos uma, abrindo uma caixa de diálogo para seleccionar a disciplina.
Página - 80 Figura 18 - Aguardando dados da BD SecondLife
Caso a lista ListCourses não tenha qualquer elemento, o que significa que não existem disciplinas registadas no Moodle em nome do professor, o script dá a mensagem “Não se encontra registado como professor ou não tem disciplinas no Moodle” e retorna ao seu estado inicial de adormecido.
Caso a lista ListCourses não esteja vazia, surgirá no canto superior direito do cliente SL uma caixa de diálogo de cor azul, em que cada um dos botões corresponde a uma disciplina, visível na figura 19. Pode acontecer que o professor leccione no Moodle várias disciplinas. No entanto a função llDialog() só permite no máximo 12 botões (Linden Lab, 2008e), pelo que foi necessário desenvolver o script de forma a permitir no máximo 24 botões, o que corresponde a 22 disciplinas e mais 2 botões para navegar entre cada entre página da caixa de diálogo.
Ao clicar num dos botões das disciplinas o shortname da mesma fica armazenado na variável course. Esta variável mantém-se inalterada durante todo o período de tempo de execução do script SensorAssiduidade.
Página - 81 Figura 19 – Seleccionar a disciplina
Depois de escolhida a disciplina através de um clique no respectivo botão, o
script principal envia uma mensagem para todos os presentes, informando “É uma aula
de ???”, em que “???” é a disciplina escolhida pelo professor. Esta mensagem é enviada através da função llSay(). As mensagens enviadas através desta função são propagadas num raio de 20 metros (Linden Lab, 2008g). Como a sala de aula tem um comprimento inferior a 20 metros foi utilizada esta função, no entanto existem outras que atingem um raio maior, como é o caso de llShout() para uma distância de 100 metros, e llRegionSay() para toda a região.
Depois de escolhida a disciplina através de um clique no respectivo botão, o
script comunica com as quatro tochas colocadas nos cantos enviando uma mensagem
“llSay(-111001,"Give me your key")” e fica à escuta de uma comunicação vinda de cada uma delas através do evento listen(). Como já foi referido, a comunicação com as tochas utiliza canais de comunicação diferentes. Na comunicação de resposta de cada uma das tochas é enviado o UUID do canto respectivo que é armazenado nas respectivas variáveis PosCorner1, PosCorner2, PosCorner3 e PosCorner4.
Página - 82
Após receber os UUID das quatro tochas é criada a lista ordenada PosCorners com as coordenadas de cada uma obtidas através da função
llGetObjectDetails(UUID,[OBJECT_POS]), permitindo assim determinar quais são os dois cantos opostos mais distantes na diagonal, que em todos os testes efectuados verificou-se tratar-se dos vectores das posições 0 e 3 da PosCorners, possibilitando assim identificar e determinar a área ocupada pela sala de aulas. O vector de ordem 0 da PosCorners fica armazenado na variável Corner1, e o vector de ordem 3 fica armazenado na variável Corner2.
A recolha e registo das coordenadas é um dos elementos fundamentais para a execução deste projecto, porque é através das coordenadas das tochas que é possível validar se os avatares se encontram ou não dentro da área definida pelas quatro tochas, as quais definem a área da sala de aulas e assim respectivamente validar a presença ou não do avatar na sala de aula.
Depois de apurados os vectores Corner1 e Corner2 é enviada uma nova mensagem informando os presentes que a aula iniciou, com recurso a
Página - 83 Figura 20 – Inicio da aula