# Seu primeiro script

Escreva um pequeno script Lua que desenha um sol, execute-o, desfaça-o e salve-o.

_Os atalhos estão escritos para Windows e Linux. No Mac, use ⌘ Cmd onde está Ctrl e ⌥ Option no lugar de Alt._

Scripts são pequenos programas em Lua que desenham e editam seu sprite por você: tudo o que você faz com
as ferramentas, um script faz com código. Aqui você vai escrever um que desenha um sol em uma nova
camada. Leva uns cinco minutos, e você não precisa ter programado antes.

## Crie um script

Abra um sprite (um novo de 32×32 serve) e escolha Scripts > Novo script.... Dê o nome "Sun" ao script e
clique em **Criar**.

O painel **Scripts** abre com algumas linhas de comentário (linhas que começam com `--`, que o Lua
ignora). Ele tem um editor de código, uma barra de ferramentas no topo e uma área de saída na parte de baixo. No
layout padrão, ele fica acoplado à direita da tela, para você ver os dois ao mesmo tempo (você pode movê-lo
como qualquer painel: veja [O espaço de trabalho](https://pxstud.io/pt-br/docs/manual/guides/workspace.md)).

![O painel Scripts mostrando o código do script Sun, com os botões Executar, Salvar rascunho e Publicar no topo e a linha que ele imprimiu na área de saída abaixo](https://pxstud.io/scripting/images/first-script-panel.light.webp)

_O painel Scripts com o script do sol, depois de executá-lo_

## Escreva o código

Substitua os comentários por isto:

```lua
-- Draws a sun on a new layer.
local layer = app.addLayer("Sun")
local frame = app.getActiveFrameId()
local w, h = app.getCanvasWidth(), app.getCanvasHeight()
local cx, cy = w // 2, h // 2
local r = math.min(w, h) // 4

-- the rays: eight short lines around the middle
for i = 0, 7 do
  local a = i * math.pi / 4
  app.drawLine(layer, frame,
    cx + math.floor(math.cos(a) * (r + 2) + 0.5), cy + math.floor(math.sin(a) * (r + 2) + 0.5),
    cx + math.floor(math.cos(a) * (r + 5) + 0.5), cy + math.floor(math.sin(a) * (r + 5) + 0.5),
    { color = "#f4a52e" })
end

-- the disc
app.drawEllipse(layer, frame, cx - r, cy - r, cx + r, cy + r, { color = "#ffd34e", fill = "filled" })
print("Drew a sun " .. (r * 2 + 1) .. " pixels across.")
```

O que ele faz:

- `app.addLayer` adiciona uma camada chamada "Sun" e devolve o id dela; `app.getActiveFrameId` devolve o
  quadro em que você está. Todo comando de desenho recebe uma camada e um quadro, assim como uma ferramenta pinta na
  camada ativa no quadro atual.
- `app.getCanvasWidth` e `app.getCanvasHeight` leem o tamanho do sprite, então o sol cabe em qualquer
  tela. As coordenadas são em pixels, com (0, 0) no canto superior esquerdo.
- `app.drawLine` e `app.drawEllipse` funcionam exatamente como as ferramentas Linha e Elipse.
  Tudo o que você não informa (aqui, o pincel) vem das configurações da ferramenta atual.
- `print` escreve uma linha na área de saída.

Enquanto você digita, o editor sugere funções `app.`; aponte para uma para ler o que ela faz.

## Execute

Clique em **Executar** (o botão de play) na barra de ferramentas do painel. A área de saída diz "Drew a sun 17
pixels across.", e a linha do tempo ganha uma nova camada, "Sun", com o sol na tela ao lado do painel.

Se algo der errado, a área de saída mostra o erro e a linha em que ele aconteceu fica destacada.
Corrija e execute de novo.

## Desfaça

Tudo o que uma execução muda é **um único passo de desfazer**: use `Ctrl+Z` e a camada e o sol somem
juntos. Mude uma cor ou o `+ 5` que define o comprimento dos raios, e execute de novo.

## Salve

Clique em **Salvar rascunho** (o botão de disquete). O script é salvo neste navegador, como seus sprites,
e um `*` depois do nome no painel indica alterações não salvas. Para abri-lo de novo mais tarde, escolha
Scripts > Abrir meu script...; os últimos cinco scripts que você abriu também aparecem logo abaixo dele no
menu Scripts.

**Publicar** compartilha um script na biblioteca de scripts; é preciso ter uma conta com o Sync (veja
[o guia de scripting](https://pxstud.io/pt-br/docs/scripting/guide.md#saving-and-publishing)).

## Próximos passos

- [O guia de scripting](https://pxstud.io/pt-br/docs/scripting/guide.md) explica como executar, interromper, janelas de script, comandos de script
  e os geradores oficiais.
- A [API de scripting](https://pxstud.io/pt-br/docs/scripting.md) lista todas as funções `app.`, agrupadas pelo que fazem:
  [desenho](https://pxstud.io/pt-br/docs/scripting/drawing.md), [camadas](https://pxstud.io/pt-br/docs/scripting/layers.md),
  [quadros](https://pxstud.io/pt-br/docs/scripting/frames.md), [cálculo de cores](https://pxstud.io/pt-br/docs/scripting/color.md) e mais.
