mirror of
https://github.com/mvvasilev/last_light.git
synced 2025-04-19 12:49:52 +03:00
92 lines
1.5 KiB
Go
92 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"mvvasilev/last_light/render"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/gdamore/tcell/v2"
|
|
)
|
|
|
|
func main() {
|
|
|
|
s, err := tcell.NewScreen()
|
|
|
|
if err != nil {
|
|
log.Fatalf("%~v", err)
|
|
}
|
|
|
|
if err := s.Init(); err != nil {
|
|
log.Fatalf("%+v", err)
|
|
}
|
|
|
|
// width, height := s.Size()
|
|
|
|
// if width < 50 || height < 50 {
|
|
// log.Fatalf("Your terminal must be at least 50x50")
|
|
// }
|
|
|
|
defStyle := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset)
|
|
|
|
rect := render.CreateRectangle(
|
|
0, 1, 10, 10,
|
|
'┌', '─', '┐',
|
|
'│', '#', '│',
|
|
'└', '─', '┘',
|
|
defStyle,
|
|
)
|
|
|
|
text := render.CreateText(1, 2, 8, 8, "Hello World! How are you today?", defStyle)
|
|
|
|
layers := render.CreateLayeredDrawContainer()
|
|
|
|
layers.Insert(0, rect)
|
|
layers.Insert(1, text)
|
|
|
|
//layers.Remove(text.UniqueId())
|
|
|
|
events := make(chan tcell.Event)
|
|
quit := make(chan struct{})
|
|
|
|
go s.ChannelEvents(events, quit)
|
|
|
|
lastTime := time.Now()
|
|
|
|
for {
|
|
deltaTime := 1 + time.Since(lastTime).Microseconds()
|
|
lastTime = time.Now()
|
|
|
|
s.Clear()
|
|
|
|
fps := 1_000_000 / deltaTime
|
|
|
|
fpsText := render.CreateText(0, 0, 16, 1, fmt.Sprintf("%v FPS", fps), defStyle)
|
|
|
|
layers.Draw(s)
|
|
fpsText.Draw(s)
|
|
|
|
s.Show()
|
|
|
|
select {
|
|
case ev, ok := <-events:
|
|
|
|
if !ok {
|
|
break
|
|
}
|
|
|
|
switch ev := ev.(type) {
|
|
case *tcell.EventResize:
|
|
s.Sync()
|
|
case *tcell.EventKey:
|
|
if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC {
|
|
s.Fini()
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
default:
|
|
}
|
|
}
|
|
|
|
}
|