Artykuły o Second Life

Część 14 - LSL, czyli interakcja z wirtualnym światem Second Life

Tak jak pisałem, dzisiaj temat dla osób, które interesują się programowaniem. Nie będę tutaj nauczał krok po kroku, jak pisać skrypty, lecz ogólnie omówię, jak one wyglądają w Second Life.

 

Zacznę od tego, iż w tym wirtualnym świecie używa się języka LSL, czyli Linden Scripting Language, przeze mnie tłumaczone jako Lindenowy Język Skryptowy. Być może ktoś inaczej by to przetłumaczył.

Czym on się charakteryzuje? Charakteryzuje się on pewną swoją prostotą. Jako że pamięć na skrypt jest ograniczona, a wszelkie programy w nim mają ścisły związek z obiektami, zazwyczaj pojedynczy plik źródłowy jest krótki. Jednak szczegółów nie podam, ile zajmuje ta pamięć.

Oskryptowany wagonik i sygnalizacja świetlnaLSL można wykorzystać w przeróżnych celach. Na załączonych do artykułu screenach widać dziwne napisy, które w gruncie rzeczy nic szczególnego nie robią. chociaż... Napis na wiszącym w powietrzu wagoniku informuje, jaka jest jego pozycja względem regionu. Prócz tego skrypt powoduje, że ten wagonik porusza się powoli wzdłuż jednej z osi (kiedy dojdzie do jednego z jej końców, zatrzymuje się na parę sekund, po czym porusza się w drugim kierunku).

Sygnalizacja świetlna, niby banalne urządzenie, lecz jest nieco bardziej skomplikowanym obiektem. Nie dosyć, że składa się z kilkunastu primów, to jeszcze niektóre z nich posiadają własny skrypt, a nad wszystkim czuwa jeden w tzw. root primie. On jest odpowiedzialny za to, czy ma migać żółte światło, czy sygnalizacja ma kierować ruchem (zmiana świateł z zielonego na czerwone i vice versa).

 

Komunikat na chacie wygenerowany przez skryptNa budynku w tle widzimy brązowy kwadracik. Jest to jedne z obiektów odpowiedzialnych za otwieranie i zamykanie drzwi. Kiedy awatar wejdzie na specjalny obiekt (schody lub wycieraczka), drzwi automatycznie się otwierają i po paru sekundach zamykają. Ten kwadracik ma jeszcze jedną funkcję - może zablokować drzwi, jeżeli w okienku chata wpiszemy odpowiednią komendę na odpowiednim kanale. Oczywiście, program sprawdza również, czy właściciel obiektu wpisze tę komendę.

Okno edytora skryptówNa screenie z mapą widzimy fragment kodu, który ma za zadawanie wyświetlić napis. Jak widać, mamy tutaj kilka parametrów: treść napisu, jego kolor w palecie RGB oraz alpha.

 

Skrypt w LSL składa się ze stanów (states). Domyślnym jest default i nie można go pominąć. Można również pisać swoje stany (wagonik i sygnalizacja świetlna działają na stanach). Każdy stan ma w swoim wnętrzu zdarzenia (events). Domyślnym jest state_entry. Te zdarzenia są wywoływane np. poprzez kliknięcie w obiekt, poprzez kolizję awatarem, poprzez frazę wysłaną z chata itp. Jest tych stanów sporo. Część z nich jest powiązana z funkcjami. Zdefiniowane w LSL funkcje zaczynają się od dwóch małych liter L, np. llGetPos() (funkcja zwraca wektor położenia obiektu). Można również napisać własną funkcję.

Kolejnym elementem języka są zmienne. Jest ich zaledwie kilka: integer, string, float, key, vector, rotation, list. Każda z nich jest specyficzna, np. vector przechowuje nam np. vector koloru lub położenia. Składa się z trzech wartości typu float. Można się do nich odwołać jak w języku obiektowym, czyli po nazwie zmiennej wpisujemy kropkę i dalej x, y lub z. Lista może natomiast zapisać wartości różnego typu, przy czym odczyt typu w niewłaściwy sposób może powodować błąd wykonania skryptu.

Jeżeli ktoś zna język Java, na pewno termin rzutowanie coś mu mówi. Otóż przez rzutowanie można przypisać do zmiennej jednego typu wartość zmiennej innego typu, np. chcemy na chacie wyświetlić pozycję naszego obiektu. Wystarczy wpisać np. llSay(0, (string)llGetPos()). Mamy tutaj zwracanie wartości typu vector i rzutowanie go na łańcuch znaków i wysłany na kanale 0, czyli kanale słyszalnym przez każdego awatara. Ten komunikat jest widoczny w Second Life przez awatary znajdujące się w zasięgu 20 metrów od obiektu (o tym zagadnieniu jeszcze zapewne wspomnę).

 

Prócz zmiennych, które definiujemy, mamy też stałe, które Linden Lab wpisało w LSL, np. ALL_SIDES, która określa, że działanie funkcji ma wpływ na wszystkie ściany (faces) obiektu. Można w ten sposób nałożyć kolor lub teksturę na cały obiekt bez potrzeby zgadywania, ile ten obiekt ma ścian.

 

Więcej informacji znajdziemy na stronie http://wiki.secondlife.com/wiki/LSL_Portal , czyli oficjalnej wiki języka LSL. Jest ona w języku angielskim. Na stronie http://slwiki.e-woody.info znajdziemy zaczątki jej tłumaczenia na język polski (jeżeli ktoś ma nadmiar czasu, może nam - ekipie tworzącej tę stronę - pomóc. Będziemy wdzięczni). Pomoc do języka LSL możemy też znaleźć w katalogu klienta SL. Nie jest ona aktualizowana, ale zawsze może pomóc.

2010-06-03, Piotr Górski

Mapa pogodowa dla Konina
© 2015