Objeto SceneGraphicItem¶
Objeto SceneGraphicItem¶
O Objeto GraphicItem representa um único item gráfico no Scene, como, por exemplo, um token.
Herança¶
O o**bjeto SceneGraphicItem** herda de SceneBaseObject e possui também todas as suas características.
Abstração¶
Esta é uma classe abstrata e você nunca encontrará um objeto SceneGraphicItem vivo sem ser uma das seguintes classes:
Por ser uma abstração, um objeto SceneGraphicItem possui todas as características que são comuns aos objetos listados acima.
Características¶
Além das características herdadas, o objeto SceneGraphicItem também possui as seguintes características:
Propriedades e atributos¶
| Propriedade | Tipo | Descrição |
|---|---|---|
| scene | Objeto Scene | (Somente Leitura) Contém o Objeto Scene a qual este item gráfico pertence. |
| objectType | String: "token" "effectArea" "userDrawing" | (Somente Leitura) Contém um texto que identifica o tipo do objeto gráfico e pode conter um dos seguintes valores: "token" - este item gráfico é um Objeto SceneToken "effectArea" - este item gráfico é um Objeto SceneEffectArea "userDrawing" - este item gráfico é um Objeto SceneUserDrawing |
| width | Double | Contem a LARGURA do item em métrica de mundo. |
| height | Double | Contem a ALTURA do item em métrica de mundo. |
| layer | Enumerado: "background" "objects" "tokens" | Define em qual camada do tabuleiro este item se encontra. |
| x | Double | Contém, em métrica de mundo, a posição do item no eixo X. |
| y | Double | Contém, em métrica de mundo, a posição do item no eixo Y. |
| z | Double | Contém um número para definir a ordem Z do item, isto é, a ordem em que o item é desenhado na tela. Exemplo: Se A e B forem dois items de uma mesma camada do scene e se A possuir ordem Z equivalente a 5 e B possuir ordem Z equivalente a 10, o item A aparecerá abaixo do item B na tela. |
| rotation | Double | Contém um ângulo em graus que define a rotação do item na interface. |
| visible | Boolean | Se for true, o item deve ser desenhado para todos. Se for false, o item deve ser desenhado apenas para o mestre. |
| snapToGrid | Boolean | Define como o item deve se posicionar em relação ao grid. Se for true, o item deve se ajeitar para se encaixar na grid do tabuleiro. Se for false, o item não deve tentar ajeitar sua posição de forma automática. |
| locked | Boolean | Se true, os usuários não conseguirão mover o item pelo scene. Ótimo para, após o tabuleiro tiver sido montado pelo mestre, evitar que os usuários movam peças sem querer e desmontarem o scene. |
| selected | Boolean | Indica se o item está contido na lista de itens selecionados do usuário atual. |
| isHover | Boolean | Indica se o mouse do usuário está em cima do item. |
| isMine | Boolean | (Somente Leitura) Contém true se o usuário atual do RRPG puder controlar/for dono do item. |
| ownerUserID | String | Contém o login do usuário do RRPG que é dono deste item. |
| canBeRendered | Boolean | (Somente Leitura) Contém true se o item pode ser renderizado na tela do usuário. O valor desta propriedade considera o Fog of War do tabuleiro. |
| canvas | Objeto SceneCanvas | (Somente Leitura) Contém o objeto SceneCanvas do item. Este objeto contém as operações gráficas que compõe a aparência do item; Se for um SceneToken, por exemplo, você encontrará um item dentro de canvas que é responsável por desenhar a imagem no tabuleiro. Se for um SceneUserDrawing, dentro de canvas você encontrará as informações do desenho que o usuário fez. |
Métodos¶
| Método | Descrição |
|---|---|
| item:getCenter([snapToGrid]) | Retorna onde no mundo do tabuleiro fica o centro do item. Parâmetros: (OPCIONAL) snapToGrid - Booleano. Se True, o scene retornará a posição mais perto do centro do item que se encaixe na grid. False, o scene não tentará fazer nenhum tipo de arredondamento. Se este parâmetro não for informado, o scene usará o valor da propriedade "snapToGrid" do item como parâmetro. Retorno: A função retorna dois números na seguinte ordem: worldX - A posição central no eixo X em relação ao tabuleiro, em métrica de mundo. worldY - A posição central no eixo Y em relação ao tabuleiro, em métrica de mundo. Exemplo: local wX, wY = scene.items[1]:getCenter(); |
| item:setCenter(worldX, worldY[, snapToGrid]) | Move o item de forma que seu centro ocupe a posição passada como parâmetro. Parâmetros: worldX - Posição no eixo X do tabuleiro, em métrica de mundo, onde o centro do item deve ficar. worldY - Posição no eixo Y do tabuleiro, em métrica de mundo, onde o centro do item deve ficar. (OPCIONAL) snapToGrid - Booleano. Caso seja True, o Scene tentará arredondar a posição de forma que o item se encaixe no grid do tabuleiro. Se não informado, o scene utiliza o valor da propriedade "snapToGrid" do próprio item. |
| item:getBounds() | Retorna as informações dos limites do item no scene. Esta função retorna 5 valores na seguinte ordem: left - Valor numérico em métrica de mundo contendo o valor da propriedade "x" do item. top - Valor numérico em métrica de mundo contendo o valor da propriedade "y" do item. right - Valor numérico em métrica de mundo contendo o valor da propriedade "x + width" do item. bottom - Valor numérico em métrica de mundo contendo o valor da propriedade "y + height" do item. rotation - Valor numérico contendo o valor da propriedade "rotation" do item. |
| item:setBounds(left, top, right, bottom[, rotation]) | Altera os limites do item no scene. Parâmetros left - Valor numérico em métrica de mundo contendo o valor da propriedade "x" do item. top - Valor numérico em métrica de mundo contendo o valor da propriedade "y" do item. right - Valor numérico em métrica de mundo contendo o valor da propriedade "x + width" do item. bottom - Valor numérico em métrica de mundo contendo o valor da propriedade "y + height" do item. (OPCIONAL) rotation - Valor numérico contendo o valor da propriedade "rotation" do item. |
| item:getCellsOccupied() | Retorna as células do grid que o item está ocupando no momento. Parâmetros: Não há Retorno: Um array (tabela lua indexada de 1 a #tabela) de tabelas luas, cada uma contendo as propriedades "i"e "j" das coordenadas Aij de cada célula ocupada pelo item. |
| item:compareZOrder(otherItem) | Realiza uma comparação de ordem Z entre dois graphics itens e retorna a ordem em relação aos dois. Parâmetros: otherItem - Outro objeto SceneGraphicItem com o qual deseja comparar Retorno: -1 se item fica abaixo de otherItem 0 se item fica exatamente na mesma ordem z 1 se item fica acima de otherItem |
| item:doSnapToGrid() | Ajusta a posição atual do item para que fique agarrado ao grid. |
| item:delete() | Remove o item do tabuleiro. |
Eventos¶
| Nome do evento | Descrição |
|---|---|
| onBeforeDraw | Evento de renderização. Quando estiver neste evento, utilize os métodos de renderização do viewport para realizar pinturas na tela do usuário. Não realize tarefas pesadas neste evento! Este evento é chamado antes do RRPG desenhar o item gráfico na tela. |
| onAfterDraw | Evento de renderização. Quando estiver neste evento, utilize os métodos de renderização do viewport para realizar pinturas na tela do usuário. Não realize tarefas pesadas neste evento! Este evento é chamado depois do RRPG desenhar o item gráfico na tela. |
| onBoundsChange | Evento que é chamado quando os limites do item for alterado (posição, largura, altura, rotação, etc..) Parâmetros: item - objeto SceneGraphicItem que sofreu a alteração nos limites. |
Exemplos¶
Exemplo 1 - Um plugin que movimenta de forma simples os itens do Scene com o mouse¶
| require("scene.lua"); SceneLib.registerPlugin( function (scene, attachment) -- Variáveis para armazenar informações sobre o "arrastar" dos itens local objMouseDown = nil; -- Qual objeto está sendo arrastado local selecaoX, selecaoY; -- Em que ponto do item o usuário clicou (em relação ao centro do item) -- Manipular o evento onMouseUp do Viewport afim de detectar o click do mouse * scene.viewport.onMouseDown = **function*(event) -- Converter para métrica de mundo a posição do clique local wx, wy = scene.viewport:screenToWorld(event.x, event.y); -- Descobrir qual item se encontra neste ponto objMouseDown = scene.items:itemAtPoint(wx, wy); if objMouseDown ~= nil then -- Existe um item nesta posição. * *-- Vamos obter onde fica a posição central deste item local centerX, centerY = objMouseDown:getCenter(); if objMouseDown.snapToGrid then -- Movimento "agarrado" ao grid * *-- Vamos pegar a posição do mundo e arredondar para o centro -- de uma célula mais próxima local cellI, cellJ = scene.grid:worldToCell(wx, wy); wx, wy = scene.grid:cellToWorld(cellI, cellJ); end; -- calcular onde no item o usuário clicou, em relação ao seu centro. selecaoX = wx - centerX; selecaoY = wy - centerY; end; end; -- Manipular o evento onMouseMove para arrastar o item scene.viewport.onMouseMove = function(event) if objMouseDown ~= nil then -- Mouse moveu e existe um item selecionado -- Converter a posição clicada para métrica de mundo local wx, wy = scene.viewport:screenToWorld(event.x, event.y); if objMouseDown.snapToGrid then -- Movimento agarrado ao grid -- Arredondar a posição do mouse para o centro de uma célula mais -- próxima. local newCellI, newCellJ = scene.grid:worldToCell(wx, wy); wx, wy = scene.grid:cellToWorld(newCellI, newCellJ); end; -- Calcular o novo centro do item local centerX, centerY = objMouseDown:getCenter(); centerX = wx - selecaoX; centerY = wy - selecaoY; -- Setar o novo centro do item. objMouseDown:setCenter(centerX, centerY); end; end; -- Manipular o evento onMouseUp para parar de arrastar o item scene.viewport.onMouseUp = function(event) -- Mouse liberou o click, vamos -- sinalizar para o onMouseMove que não estamos mais arrastando -- ninguem objMouseDown = nil; end; end); |
|---|
Exemplo 2 - Um plug-in que adiciona/remove uma marca personalizada quando o usuário clica nos itens do scene.¶
| require("scene.lua"); SceneLib.registerPlugin( function (scene, attachment) -- Manipular o evento OnMouseDown do Viewport scene.viewport.onMouseDown = function(event) -- Usuário clicou no Scene -- Transformar as coordenadas de tela em métrica de mundo local worldX, worldY = scene.viewport:screenToWorld(event.x, event.y); -- Localizar o item que o usuário clicou local item = scene.items:itemAtPoint(worldX, worldY); if item ~= nil then -- Encontrou um item na posição clicada. * **local* NOME_MINHA_MARCA = "MarcaExemplo"; -- Localizar uma operação gráfica neste item com o nosso nome local opGrafica = item.canvas:findByName(NOME_MINHA_MARCA); if opGrafica == nil then --[[ A operação gráfica da minha marca ainda não existe neste token/item. Vamos criar ]] opGrafica = item.canvas:addBitmap(); opGrafica.name = NOME_MINHA_MARCA; -- Abaixo, URL da imagem da nossa marca. opGrafica.url = "https://wiki.teamfortress.com/w/images/d/dd/Bleed_drop.png?t=20110425044341"; opGrafica.x = 0.25; opGrafica.width = 0.3; opGrafica.y = -0.1; opGrafica.height = 0.3; opGrafica.z = 10; else -- Vamos apagar nossa operação gráfica previamente criada opGrafica:delete(); end; end; end; end); |
|---|
Item sem a marca |
Item com a marca |
|---|---|
Created with the Personal Edition of HelpNDoc: Protect Your Confidential PDFs with These Simple Security Measures
Item sem a marca
Item com a marca