Files
Basalt/docs/tips/design.md
Robert Jelic 4d614372a1 Updated docs
There is still stuff to do
2022-08-28 18:18:26 +02:00

3.6 KiB

Hello! This page contains some tips on how to create cool designs with Basalt

To understand this page, it is recommended to familiarize yourself with Animations as animations are important for creating cool looking designs

Animation-move

Here i will show you how you can move objects by using the animation object.

local basalt = require("basalt")

local main = basalt.createFrame()
local sub = main:addFrame():setSize("parent.w - 2",12):setPosition("-parent.w",4)
      sub:addLabel()
        :setText("Cool Title")
        :setBackground(colors.black)
        :setForeground(colors.lightGray)
        :setSize("parent.w", 1)

local button = sub:addButton()
    :setBackground(colors.black)
    :setForeground(colors.lightGray)
    :setPosition(-12,9)
local button2 = sub:addButton()
    :setBackground(colors.black)
    :setForeground(colors.lightGray)
    :setPosition("parent.w + 12",9)

local anim = main:addAnimation()
    :setObject(sub)
    :move(2,4,1.5)
    :setObject(button)
    :move(2,9,1,1.5):
    setObject(button2)
    :move(sub:getWidth()-12,9,1,1.5)
    :play()

basalt.autoUpdate()

As you can see, you only need 1 animation but you can still move 3 objects.

Animation-offset

Here is a example which changes the offset on your base frame. It shows you, how you could create multiple pages and switch between them in a cool looking way:

local basalt = require("basalt")

local main = basalt.createFrame()
local mainAnim = main:addAnimation()

local frames = {
    main:addFrame():setPosition(1,2):setSize("parent.w", "parent.h-1"):setBackground(colors.lightGray),
    main:addFrame():setPosition("parent.w+1",2):setSize("parent.w", "parent.h-1"):setBackground(colors.lightGray),
    main:addFrame():setPosition("parent.w*2+1",2):setSize("parent.w", "parent.h-1"):setBackground(colors.lightGray),
    main:addFrame():setPosition("parent.w*3+1",2):setSize("parent.w", "parent.h-1"):setBackground(colors.lightGray),
}

frames[1]:addLabel():setText("This is frame 1")
frames[2]:addLabel():setText("This is frame 2")
frames[3]:addLabel():setText("This is frame 3")
frames[4]:addLabel():setText("This is frame 4")

local menubar = main:addMenubar():ignoreOffset()
        :addItem("Page 1",nil,nil,1)
        :addItem("Page 2",nil,nil,2)
        :addItem("Page 3",nil,nil,3)
        :addItem("Page 4",nil,nil,4)
        :setSpace(3)
        :setSize("parent.w",1)
        :onChange(function(self, value)
            mainAnim:clear()
                    :cancel()
                    :setObject(main)
                    :offset(value.args[1] * main:getWidth() - main:getWidth(), 0, 2)
                    :play()
        end)


basalt.autoUpdate()

Visually showing

Here I'll show you how to visually show the user when something isn't working. this is just one example that you can apply to other topics as well.

local basalt = require("basalt")

local password = "12345"

local main = basalt.createFrame()

main:addLabel():setText("Password:"):setPosition(2,2)
local input = main:addInput():setInputType("password"):setPosition(2,3):setSize(24,1)
local submit = main:addButton():setPosition(2,5):setText("Submit")
submit:onClick(basalt.schedule(function()
    if(password==input:getValue())then
        basalt.debug("Password correct!")
    else
        basalt.debug("Wrong password!")
        submit:setBackground(colors.red)
        sleep(0.05)
        submit:setPosition(3,5)
        sleep(0.05)
        submit:setPosition(2,5)
        sleep(0.05)
        submit:setPosition(1,5)
        sleep(0.05)
        submit:setPosition(2,5)
        submit:setBackground(colors.gray)
    end
end))

basalt.autoUpdate()