O Objeto GraphicItem representa um único item gráfico no Scene, como, por exemplo, um token.
O objeto SceneGraphicItem herda de SceneBaseObject e possui também todas as suas características.
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.
Além das características herdadas, o objeto SceneGraphicItem também possui as seguintes características:
Propriedade |
Tipo |
Descrição |
scene |
(Somente Leitura) Contém o Objeto Scene a qual este item gráfico pertence. |
|
objectType |
String:
|
(Somente Leitura) Contém um texto que identifica o tipo do objeto gráfico e pode conter um dos seguintes valores:
|
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:
|
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. |
(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étodo |
Descrição |
item:getCenter([snapToGrid]) |
Retorna onde no mundo do tabuleiro fica o centro do item. Parâmetros:
Retorno: A função retorna dois números na seguinte ordem:
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:
|
item:getBounds() |
Retorna as informações dos limites do item no scene. Esta função retorna 5 valores na seguinte ordem:
|
item:setBounds(left, top, right, bottom[, rotation]) |
Altera os limites do item no scene. Parâmetros
|
item:getCellsOccupied() |
Retorna as células do grid que o item está ocupando no momento. Parâmetros: Não há Retorno:
|
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:
Retorno:
|
item:doSnapToGrid() |
Ajusta a posição atual do item para que fique agarrado ao grid. |
item:delete() |
Remove o item do tabuleiro. |
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:
|
|
|
|
|
|
|
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); |
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 com a marca |
Created with the Personal Edition of HelpNDoc: Protect Your Confidential PDFs with These Simple Security Measures