2018-12-18 02:16:52 +00:00
|
|
|
package main
|
|
|
|
|
2018-12-22 03:44:19 +00:00
|
|
|
import (
|
|
|
|
"image/color"
|
|
|
|
"log"
|
|
|
|
"os"
|
2018-12-18 02:16:52 +00:00
|
|
|
|
2018-12-30 01:04:37 +00:00
|
|
|
imgui "github.com/FooSoft/imgui-go"
|
2018-12-22 03:44:19 +00:00
|
|
|
"github.com/FooSoft/lazarus/formats/dat"
|
|
|
|
"github.com/FooSoft/lazarus/formats/dc6"
|
2018-12-29 19:52:30 +00:00
|
|
|
"github.com/FooSoft/lazarus/math"
|
|
|
|
"github.com/FooSoft/lazarus/platform"
|
2018-12-22 03:44:19 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func loadPalette(path string) (*dat.Palette, error) {
|
|
|
|
fp, err := os.Open(path)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
defer fp.Close()
|
|
|
|
return dat.NewFromReader(fp)
|
|
|
|
}
|
|
|
|
|
|
|
|
func loadSprite(path string) (*dc6.Sprite, error) {
|
|
|
|
fp, err := os.Open(path)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
defer fp.Close()
|
|
|
|
return dc6.NewFromReader(fp)
|
|
|
|
}
|
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
func loadTexture(window *platform.Window, spritePath, palettePath string) (*platform.Texture, error) {
|
2018-12-22 03:44:19 +00:00
|
|
|
sprite, err := loadSprite(spritePath)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
palette, err := loadPalette(palettePath)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
frame := sprite.Directions[0].Frames[0]
|
|
|
|
colors := make([]color.RGBA, frame.Width*frame.Height)
|
|
|
|
for y := 0; y < frame.Height; y++ {
|
|
|
|
for x := 0; x < frame.Width; x++ {
|
|
|
|
colors[y*frame.Width+x] = palette.Colors[frame.Data[y*frame.Width+x]]
|
|
|
|
}
|
2018-12-18 02:16:52 +00:00
|
|
|
}
|
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
return window.CreateTextureRgba(colors, frame.Width, frame.Height)
|
2018-12-22 03:44:19 +00:00
|
|
|
}
|
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
type scene struct {
|
|
|
|
texture *platform.Texture
|
|
|
|
}
|
2018-12-18 02:16:52 +00:00
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
func (s *scene) Init(window *platform.Window) error {
|
|
|
|
var err error
|
|
|
|
s.texture, err = loadTexture(window, "/home/alex/loadingscreen.dc6", "/home/alex/pal.dat")
|
|
|
|
return err
|
|
|
|
}
|
2018-12-22 03:44:19 +00:00
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
func (s *scene) Advance(window *platform.Window) error {
|
2018-12-30 01:04:37 +00:00
|
|
|
imgui.Text("Hello")
|
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
window.RenderTexture(
|
|
|
|
s.texture,
|
|
|
|
math.Rect4i{X: 0, Y: 0, W: 256, H: 256},
|
|
|
|
math.Rect4i{X: 0, Y: 0, W: 256, H: 256},
|
|
|
|
)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *scene) Shutdown(window *platform.Window) error {
|
|
|
|
return s.texture.Destroy()
|
|
|
|
}
|
2018-12-22 03:44:19 +00:00
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
func main() {
|
|
|
|
platform.Init()
|
|
|
|
defer platform.Shutdown()
|
|
|
|
|
|
|
|
window, err := platform.CreateWindow("Viewer", 1280, 720, new(scene))
|
2018-12-18 02:16:52 +00:00
|
|
|
if err != nil {
|
2018-12-22 03:44:19 +00:00
|
|
|
log.Fatal(err)
|
2018-12-18 02:16:52 +00:00
|
|
|
}
|
2018-12-29 19:52:30 +00:00
|
|
|
defer window.Destroy()
|
2018-12-18 02:16:52 +00:00
|
|
|
|
2018-12-29 19:52:30 +00:00
|
|
|
if err := platform.ProcessEvents(); err != nil {
|
|
|
|
log.Fatal(err)
|
2018-12-18 02:16:52 +00:00
|
|
|
}
|
|
|
|
}
|