// Jogo de Lógica em LSL: Primitiva botão // vagnercsousa@yahoo.com.br, 20-jan-2008 SP // mesmo anterior integer iBtsPorLado = 4; integer iBotoes = 16; integer iPartes = 9; // número particular do botão integer iMyNumber; // (1) botões vizinhos integer direita(integer i) { return ((i / iBtsPorLado) * iBtsPorLado + ((i + 1) % iBtsPorLado)); } integer esquerda(integer i) { return ((i / iBtsPorLado) * iBtsPorLado + (i + iBtsPorLado - 1) % iBtsPorLado); } integer acima(integer i) { return ((i - iBtsPorLado + iBotoes) % iBotoes); } integer abaixo(integer i) { return ((i + iBtsPorLado) % iBotoes); } // (2) troca cor mudarCor() { if (llGetColor(ALL_SIDES) == <0,1,0>) llSetColor(<1,0,0>, ALL_SIDES); else llSetColor(<0,1,0>, ALL_SIDES); } default { on_rez(integer start_number) { // (3) inicia como verde llSetColor(<0, 1, 0>, ALL_SIDES); // número pulo-do-gato iMyNumber = start_number; // para manter mesmo após reset llSetObjectDesc((string)iMyNumber); } state_entry() { // (4) nome usado no outro script llSetObjectName("Botao"); // torna verde em cada recomeço llSetColor(<0, 1, 0>, ALL_SIDES); // recupera número após reset iMyNumber = (integer)llGetObjectDesc(); } link_message(integer link, integer number, string message, key id) { // (5) mensagem vinda do outro script if (llSubStringIndex(message, "Tamanho") != -1) { // decompõe mensagem em lista list lista = llParseString2List(message, [":"], []); // posição 0 da lista é a palavra "Tamanho" // posição 1 é o vetor tamanho propriamente dito vector vBtnScale = (vector)llList2String(lista, 1); llSetScale(vBtnScale); // redimensiona o botão } // (7) mudança de cor if (message == "Mudar") { if (number == iMyNumber) mudarCor(); } // (9) auxiliar para fim do jogo if (message == "Ha alguem verde?") { if (llGetColor(ALL_SIDES) == <0, 1, 0>) llMessageLinked(LINK_ROOT, 0, "Sim, estou verde", ""); } // esse é bem óbvio if (message == "Resetar Jogo") { llResetScript(); } } touch_start(integer total_number) { // (6) envia mensagens para botões integer btCentro = iMyNumber; integer btDir = direita(btCentro); integer btEsq = esquerda(btCentro); integer btAcima = acima(btCentro); integer btAbaixo = abaixo(btCentro); llMessageLinked(LINK_THIS, btCentro, "Mudar", ""); llMessageLinked(LINK_ALL_CHILDREN, btDir, "Mudar", ""); llMessageLinked(LINK_ALL_CHILDREN, btEsq, "Mudar", ""); llMessageLinked(LINK_ALL_CHILDREN, btAcima, "Mudar", ""); llMessageLinked(LINK_ALL_CHILDREN, btAbaixo, "Mudar", ""); // (8) notifica objeto root que um botão foi clicado llMessageLinked(LINK_ROOT, btCentro, "Botao Clicado", ""); } }