LSL Linden Scripting Language Trabalhando com Scripts Parte
LSL - Linden Scripting Language Trabalhando com Scripts Parte 5 Monitora: Cintia Caetano Mestrado UFF – IC 2009/011 1
Algumas Definições As propriedades de um objeto (cor, textura, tamanho, forma, etc. ) podem ser alteradas, posteriormente, por meio de script. Transparência = Alpha Face = Lados do objeto (integer) ALL_SIDES = todas as faces do objeto. Seu valor é sempre -1. 2 2
ll. Set. Color / Get. Alpha ll. Set. Color(cor, face); Muda a cor da face (integer) especificada do objeto, para a cor, de tipo vector, informada. ll. Get. Color(face); Retorna um valor do tipo vector, que representa a cor atual da face passada como parâmetro. ll. Get. Alpha(face); Retorna um float com o valor da transparência da face passada como parâmetro. 3 3
ll. Set. Alpha / ll. Get. Scale ll. Set. Alpha(alpha, face); Esta função define quão transparente será determinada face de nosso objeto. Passa a transparência desejada (tipo float), e informa a face (tipo integer). ll. Get. Scale(); Retorna um valor do tipo vector, que representa o tamanho do objeto. 4 4
ll. Set. Scale(tamanho); Altera o tamanho do objeto, para o tamanho que passarmos como argumento. Para representar o tamanho de um objeto, utiliza-se um valor do tipo vector. Nota: Um objeto não pode ter medida menor que 0. 01 metro (1 centímetro), e nem ser maior que 10 metros. 5 5
ll. Set. Texture / ll. Get. Texture ll. Set. Texture(textura, face); Aplica a textura passada como parâmetro, na face especificada do objeto. A face é um tipo integer e a textura é um nome de qualquer textura que tenhamos em nosso inventário. ll. Get. Texture(face); Retorna uma string com o nome da textura atual do objeto. 6 6
ll. Scale. Texture ll. Scale. Texture(x, y, face); Essa função ajusta a escala da textura, passando como argumentos x e y, (número de vezes que a textura se repetirá em cada eixo), e especificamos a face. Quando o assunto é textura, devemos entender escala de outra forma. Para textura, no SL, escala significa quantas vezes a mesma se repetirá, independentemente, nos eixos x e y. 7 7
ll. Get. Texture. Scale / ll. Get. Texture. Rot ll. Get. Texture. Scale(face); Retorna um vector com o valor de cada escala. Apesar do valor retornado ser do tipo vector, 3 floats, não fazemos uso e nem importa o terceiro valor (eixo z). ll. Get. Texture. Rot(face); Retorna um float contendo a rotação, em radianos, da textura. 8 8
ll. Rotate. Texture ll. Rotate. Texture(rotação, face); Esta função rotaciona a textura, na rotação especificada, e na face especificada. Nota: O parâmetro rotação, deve ser passado como um float, representando radianos. Por exemplo, se quisermos que nossa textura fique inclinada 45º, devemos passar 45 * DEG_TO_RAD como parâmetro rotação. 9 9
ll. Set. Texture. Anim ll. Set. Texture. Anim(modo, face, tamanho. X, tamanho. Y, inicio, duração, taxa); Essa função é um pouco grande e será explicada a cada parâmetro. 10 10
ll. Set. Texture. Anim Parâmetro Modo Neste primeiro parâmetro indicamos como a animação da textura deve se comportar. ANIM_ON – esta constante ativa a animação, é necessária sempre. ROTATE – esta constante faz com que a textura fique girando. SCALE – esta constante anima a escala, ou tamanho, de nossa textura. 11 11
ll. Set. Texture. Anim SMOOTH - utilizando ROTATE ou SCALE, temos uma movimentação brusca, pois a imagem muda de uma posição para outra abruptamente. Utilizando a constante SMOOTH, a transição entre cada posição da animação é feita suavemente, resultando em uma aparência bem mais agradável. PING_PONG – animamos nossa textura, fazendo a mesma se mover de um lado para o outro. Como no jogo ping-pong, ela vai e volta, vai e volta. 12 12
ll. Set. Texture. Anim REVERSE – inverte a direção da animação. LOOP – a animação não realiza apenas uma vez, mas sim continuamente. Nota: quando definimos o modo, podemos combinar varias das constantes acima, desde que não misturemos as constantes ROTATE e SCALE juntas. 13 13
ll. Set. Texture. Anim Parâmetro Face Define a face em que a animação ocorrerá. Parâmetro tamanho. X Este parâmetro especifica o tamanho da textura, no eixo x, em comparação a nosso objeto. Este parâmetro é ignorado com ROTATE e SCALE. Parâmetro tamanho. Y Mesmo caso anterior, mas aplicada no eixo y. 14 14
ll. Set. Texture. Anim Parâmetro Início Este parâmetro varia de acordo com o modo escolhido. Se estivermos utilizando SCALE, inicio é o numero de textura que teremos como inicio. Se estivermos utilizando ROTATE, inicio é lido pela função como radianos. Parâmetro Duração Com este parâmetro informamos o limite da animação. Se estivermos utilizando SCALE, é o numero máximo de texturas que teremos. 15 15
ll. Set. Texture. Anim Parâmetro Taxa Com parâmetro, recebe a velocidade com que nossa animação ocorrerá, em quadros por segundo. Por exemplo, no modo SCALE, passando 1 como início, e 10 como duração, temos um total de 10 quadros necessários para completar a animação. Se especificarmos 1 como taxa, cada quadro levara 1 segundo para ser animado, resultando em 10 segundos para a conclusão da animação. Se especificarmos 10 como taxa, em apenas um segundo nossa animação estará concluída. 16 16
Exemplo 1 ll. Set. Texture. Anim(ANIM_ON|SCALE, ALL_SIDES, 1, 1, 1. 0, 1. 0); ANIM_ON|SCALE – ativa a animação e define a animação SCALE. ALL_SIDES – anima todos os lados O 3º e 4º parâmetros são ignorados Define que a animação iniciará com uma textura (5º parâmetro) E terminara com 10 texturas (6º parâmetro). Por fim (7º parâmetro) uma taxa de 1 quadro por segundo como velocidade. 17 17
Exemplo 2 ll. Set. Texture. Anim(ANIM_ON|SCALE|SMOOTH, ALL_SIDES, 1, 1, 1. 0, 1. 0); Adiciona a constante SMOOTH ao modo. Nota: Perceba que a textura transita suavemente entre cada quadro, tornando a visualização bem mais agradável. 18 18
Exemplo 3 ll. Set. Texture. Anim(ANIM_ON|SCALE|SMOOTH |LOOP, ALL_SIDES, 1, 1, 1. 0, 1. 0); Adiciona a constante LOOP. Corrige o inconveniente de a animação ser executada apenas uma vez. 19 19
Exemplo 4 ll. Set. Texture. Anim(ANIM_ON|SCALE|SMOOTH| LOOP|PING_PONG, ALL_SIDES, 1, 1, 1. 0, 1. 0) ; Adiciona a constante PING_PONG. Faz a animação ir e vir. 20 20
Exemplo 5 ll. Set. Texture. Anim(ANIM_ON|ROTATE|SMOOT H|LOOP, ALL_SIDES, 1, 1, 1. 0, TWO_PI, 2. 0); Altera SCALE para Rotate. Nota: Não se esqueça que com ROTATE, os parâmetros início e duração são considerados em radianos. 21 21
Exercício 15 string textura; string s 1; string s 2; string s 3; string s 4; string s 5; string s 6; string s 7; string s 8; string s 9; string s 0; integer i; 22 22
Exercício 15 default { state_entry() { s 1="Steel Plate"; s 2="Water Ripple"; s 3="Rock - Heavy Moss"; s 4="Bricks"; s 5="Atoll Road Planks"; s 6="Wood. Floor"; s 7="Floor Tile 3"; s 8="Floor Tile 5"; 23 23
Exercício 15 s 9="Hair Straight Thick"; s 0="Old wood"; i=0; } touch_start(integer c) { if (i==0) textura=s 0; if (i==1) textura=s 1; if (i==2) textura=s 2; if (i==3) textura=s 3; if (i==4) textura=s 4; if (i==5) textura=s 5; if (i==6) textura=s 6; 24 24
Exercício 15 if (i==7) textura=s 7; if (i==8) textura=s 8; if (i==9) textura=s 9; ll. Set. Texture(textura, ALL_SIDES); i++; if (i>=10) i=0; } } 25 25
Exercício 15 No exemplo anterior, muda de textura, seqüencialmente, conforme recebe toques. Preste muita atenção ao nome informado para cada textura, preste atenção nas maiúsculas e minúsculas. Arraste cada textura, que for utilizar no script, para a pasta contents do objeto. 26 26
Exercício 16 string textura; string s 1; string s 2; string s 3; string s 4; string s 5; string s 6; string s 7; string s 8; string s 9; string s 0; integer i; 27 27
Exercício 16 default { state_entry() { s 1="Steel Plate"; s 2="Water Ripple"; s 3="Rock - Heavy Moss"; s 4="Bricks"; s 5="Atoll Road Planks"; s 6="Wood. Floor"; s 7="Floor Tile 3"; s 8="Floor Tile 5"; s 9="Hair Straight Thick“; 28 28
Exercício 16 s 0="Old wood"; } touch_start(integer c) { i=ll. Round(ll. Frand(10. 0)); if (i==0) textura=s 0; if (i==1) textura=s 1; if (i==2) textura=s 2; if (i==3) textura=s 3; if (i==4) textura=s 4; if (i==5) textura=s 5; if (i==6) textura=s 6; if (i==7) textura=s 7; 29 29
Exercício 16 if (==8) textura=s 8; if (i==9) textura=s 9; ll. Set. Texture(textura, ALL_SIDES); } } 30 30
Exercício 16 Nota: a mudança do tipo de textura ocorrerá de forma randômica, aleatória. Conforme o objeto é tocado, escolhe aleatoriamente uma textura para aplicar ao objeto. 31 31
Exercício 17 vector cor; default { state_entry() { } touch_start(integer c) { ll. Set. Color(<0. 0, 0. 0>, ALL_SIDES); ll. Set. Timer. Event(0. 1); } 32 32
Exercício 17 timer() { cor=ll. Get. Color(ALL_SIDES); if(cor. x < 0. 99) { cor. x += 0. 03; ll. Set. Color(cor, ALL_SIDES); return; } if(cor. y < 0. 99) { cor. y += 0. 03; 33 33
Exercício 17 ll. Set. Color(cor, ALL_SIDES); return; } if(cor. z < 0. 99) { cor. z += 0. 03; ll. Set. Color(cor, ALL_SIDES); return; } ll. Set. Color(ZERO_VECTOR, ALL_SIDES); } } 34 34
Exercício 17 Quando o objeto for tocado, sua cor do será alterada para preta. Um evento timer será configurado para responder a cada 0, 1 segundos. A cada 0. 1 segundos, o script verificará se cada componente da cor chegou ao limite, se ainda não tiver chegado, ele incrementa o componente da cor e atualiza a cor do objeto. 35 35
Exercício 18 default { state_entry() { ll. Rotate. Texture(45 * DEG_TO_RAD, ALL_SIDES); } touch_start(integer c) { ll. Say(0, (string) (ll. Get. Texture. Rot (ALL_SIDES) * RAD_TO_DEG)); } } 36 36
Exercício 19 default { state_entry() { ll. Scale. Texture(4, 2, ALL_SIDES); } touch_start(integer total_number) { ll. Say(0, (string)ll. Get. Texture. Scale(ALL_SIDES)); } } 37 37
Bibliográfia Guia de Script no Second Life. By Valdinei Rodrigues dos Reis Creating Your World: The Official Guide to Advanced Content Creation for Second Life. by Aimee Weber, Kimberly Rufer-Bach and Richard Platel. Wiley Publishing, Inc. ISBN: 978 -0 -470 -17114 -1 Second Life For Dummies. By Sarah Robbins, Mark Bell. Wiley Publishing, Inc. ISBN: 978 -0 -470 -18025 -9. Second Life: o Guia Oficial. By A P Watt Ltd. Editora: Ediouro. Ano: 2007. Edição: 1. ISBN: 9788500019616. LSL Guide http: //wiki. secondlife. com/wiki 38 38
- Slides: 38