cleanup
This commit is contained in:
parent
55817d4511
commit
ac0f65fb3e
@ -7,7 +7,7 @@ import (
|
||||
"github.com/FooSoft/lazarus/math"
|
||||
)
|
||||
|
||||
type Palette struct {
|
||||
type DatPalette struct {
|
||||
Colors [256]math.Color3b
|
||||
}
|
||||
|
||||
@ -17,13 +17,13 @@ type color struct {
|
||||
R byte
|
||||
}
|
||||
|
||||
func NewFromReader(reader io.Reader) (*Palette, error) {
|
||||
func NewFromReader(reader io.Reader) (*DatPalette, error) {
|
||||
var colors [256]color
|
||||
if err := binary.Read(reader, binary.LittleEndian, &colors); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
palette := new(Palette)
|
||||
palette := new(DatPalette)
|
||||
for i, color := range colors {
|
||||
palette.Colors[i] = math.Color3b{R: color.R, G: color.G, B: color.B}
|
||||
}
|
||||
@ -31,8 +31,8 @@ func NewFromReader(reader io.Reader) (*Palette, error) {
|
||||
return palette, nil
|
||||
}
|
||||
|
||||
func NewFromGrayscale() *Palette {
|
||||
palette := new(Palette)
|
||||
func NewFromGrayscale() *DatPalette {
|
||||
palette := new(DatPalette)
|
||||
for i := 0; i < 256; i++ {
|
||||
value := uint8(i)
|
||||
palette.Colors[i] = math.Color3b{R: value, G: value, B: value}
|
||||
|
@ -38,12 +38,12 @@ type Frame struct {
|
||||
Data []byte
|
||||
}
|
||||
|
||||
type Sprite struct {
|
||||
type Dc6Animation struct {
|
||||
Directions []Direction
|
||||
}
|
||||
|
||||
func NewFromReader(reader io.ReadSeeker) (*Sprite, error) {
|
||||
sprite := new(Sprite)
|
||||
func NewFromReader(reader io.ReadSeeker) (*Dc6Animation, error) {
|
||||
sprite := new(Dc6Animation)
|
||||
|
||||
var fileHead fileHeader
|
||||
if err := binary.Read(reader, binary.LittleEndian, &fileHead); err != nil {
|
||||
|
@ -1,16 +1,7 @@
|
||||
package mpq
|
||||
|
||||
/*
|
||||
|
||||
// Build Tags
|
||||
|
||||
// Windows
|
||||
#cgo windows CFLAGS: -D_MPQ_WINDOWS
|
||||
#cgo windows LDFLAGS: -Lstormlib -lstorm -lwininet -lz -lbz2 -lstdc++
|
||||
|
||||
// Linux
|
||||
#cgo linux CFLAGS: -D_MPQ_LINUX
|
||||
#cgo linux LDFLAGS: -L./stormlib/ -lstorm -lz -lbz2 -lstdc++
|
||||
|
||||
*/
|
||||
// #cgo windows CFLAGS: -D_MPQ_WINDOWS
|
||||
// #cgo windows LDFLAGS: -Lstormlib -lstorm -lwininet -lz -lbz2 -lstdc++
|
||||
// #cgo linux CFLAGS: -D_MPQ_LINUX
|
||||
// #cgo linux LDFLAGS: -L./stormlib/ -lstorm -lz -lbz2 -lstdc++
|
||||
import "C"
|
||||
|
@ -1,15 +1,5 @@
|
||||
package mpq
|
||||
|
||||
// #ifdef _MPQ_WINDOWS
|
||||
// #include <windows.h>
|
||||
// #include <stdlib.h>
|
||||
// #endif
|
||||
// #ifdef _MPQ_LINUX
|
||||
// #include <stdlib.h>
|
||||
// #define WINAPI
|
||||
// DWORD GetLastError();
|
||||
// #endif
|
||||
//
|
||||
// #define DWORD unsigned int
|
||||
// #define LPDWORD unsigned int *
|
||||
// #define LPOVERLAPPED void *
|
||||
@ -18,13 +8,21 @@ package mpq
|
||||
// #define bool unsigned char
|
||||
// #define LONG int
|
||||
//
|
||||
// #include <stdlib.h>
|
||||
// #ifdef _MPQ_WINDOWS
|
||||
// #include <windows.h>
|
||||
// #endif
|
||||
// #ifdef _MPQ_LINUX
|
||||
// #define WINAPI
|
||||
// DWORD GetLastError();
|
||||
// #endif
|
||||
//
|
||||
// bool WINAPI SFileOpenArchive(const TCHAR * szMpqName, DWORD dwPriority, DWORD dwFlags, HANDLE * phMpq);
|
||||
// bool WINAPI SFileCloseArchive(HANDLE hMpq);
|
||||
// bool WINAPI SFileOpenFileEx(HANDLE hMpq, const char * szFileName, DWORD dwSearchScope, HANDLE * phFile);
|
||||
// DWORD WINAPI SFileSetFilePointer(HANDLE hFile, LONG lFilePos, LONG * plFilePosHigh, DWORD dwMoveMethod);
|
||||
// bool WINAPI SFileReadFile(HANDLE hFile, void * lpBuffer, DWORD dwToRead, LPDWORD pdwRead, LPOVERLAPPED lpOverlapped);
|
||||
// bool WINAPI SFileCloseFile(HANDLE hFile);
|
||||
//
|
||||
import "C"
|
||||
import (
|
||||
"bytes"
|
||||
@ -42,13 +40,13 @@ type File interface {
|
||||
Close() error
|
||||
}
|
||||
|
||||
type Archive interface {
|
||||
type MpqArchive interface {
|
||||
OpenFile(path string) (File, error)
|
||||
GetPaths() []string
|
||||
Close() error
|
||||
}
|
||||
|
||||
func NewFromFile(path string) (Archive, error) {
|
||||
func NewFromFile(path string) (MpqArchive, error) {
|
||||
cs := C.CString(path)
|
||||
defer C.free(unsafe.Pointer(cs))
|
||||
|
||||
|
@ -4,7 +4,6 @@ Copy the stormlib folder to an easy to access directory. I used /mingw64/home/th
|
||||
|
||||
(from mingw64 console)
|
||||
|
||||
$ cd /mingw64/home/thegtproject/stormlib
|
||||
$ cmake -DCMAKE_SYSTEM_NAME="windows" -DCMAKE_INSTALL_PREFIX="/mingw64" .
|
||||
$ make && make install
|
||||
|
||||
|
@ -14,7 +14,7 @@ import (
|
||||
"github.com/FooSoft/lazarus/formats/dc6"
|
||||
)
|
||||
|
||||
func loadPalette(path string) (*dat.Palette, error) {
|
||||
func loadPalette(path string) (*dat.DatPalette, error) {
|
||||
fp, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -23,7 +23,7 @@ func loadPalette(path string) (*dat.Palette, error) {
|
||||
return dat.NewFromReader(fp)
|
||||
}
|
||||
|
||||
func loadSprite(path string) (*dc6.Sprite, error) {
|
||||
func loadSprite(path string) (*dc6.Dc6Animation, error) {
|
||||
fp, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -32,7 +32,7 @@ func loadSprite(path string) (*dc6.Sprite, error) {
|
||||
return dc6.NewFromReader(fp)
|
||||
}
|
||||
|
||||
func extractSprite(spritePath string, palette *dat.Palette, targetDir string) error {
|
||||
func extractSprite(spritePath string, palette *dat.DatPalette, targetDir string) error {
|
||||
sprite, err := loadSprite(spritePath)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -14,7 +14,7 @@ import (
|
||||
"github.com/FooSoft/lazarus/platform"
|
||||
)
|
||||
|
||||
func loadPalette(path string) (*dat.Palette, error) {
|
||||
func loadPalette(path string) (*dat.DatPalette, error) {
|
||||
fp, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -23,7 +23,7 @@ func loadPalette(path string) (*dat.Palette, error) {
|
||||
return dat.NewFromReader(fp)
|
||||
}
|
||||
|
||||
func loadSprite(path string) (*dc6.Sprite, error) {
|
||||
func loadAnimation(path string) (*dc6.Dc6Animation, error) {
|
||||
fp, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -33,8 +33,8 @@ func loadSprite(path string) (*dc6.Sprite, error) {
|
||||
}
|
||||
|
||||
type scene struct {
|
||||
sprite *dc6.Sprite
|
||||
palette *dat.Palette
|
||||
animation *dc6.Dc6Animation
|
||||
palette *dat.DatPalette
|
||||
texture graphics.Texture
|
||||
|
||||
directionIndex int
|
||||
@ -65,8 +65,8 @@ func (s *scene) Advance(window *platform.Window) error {
|
||||
|
||||
imgui.DialogBegin("DC6 Viewer")
|
||||
imgui.Image(s.texture)
|
||||
direction := s.sprite.Directions[directionIndex]
|
||||
if imgui.SliderInt("Direction", &directionIndex, 0, len(s.sprite.Directions)-1) {
|
||||
direction := s.animation.Directions[directionIndex]
|
||||
if imgui.SliderInt("Direction", &directionIndex, 0, len(s.animation.Directions)-1) {
|
||||
frameIndex = 0
|
||||
}
|
||||
frame := direction.Frames[frameIndex]
|
||||
@ -88,7 +88,7 @@ func (s *scene) Advance(window *platform.Window) error {
|
||||
}
|
||||
|
||||
func (s *scene) updateTexture(window *platform.Window) error {
|
||||
frame := s.sprite.Directions[s.directionIndex].Frames[s.frameIndex]
|
||||
frame := s.animation.Directions[s.directionIndex].Frames[s.frameIndex]
|
||||
colors := make([]math.Color3b, frame.Size.X*frame.Size.Y)
|
||||
for y := 0; y < frame.Size.Y; y++ {
|
||||
for x := 0; x < frame.Size.X; x++ {
|
||||
@ -129,13 +129,13 @@ func main() {
|
||||
os.Exit(2)
|
||||
}
|
||||
|
||||
sprite, err := loadSprite(flag.Arg(0))
|
||||
animation, err := loadAnimation(flag.Arg(0))
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var palette *dat.Palette
|
||||
var palette *dat.DatPalette
|
||||
if len(*palettePath) > 0 {
|
||||
palette, err = loadPalette(*palettePath)
|
||||
if err != nil {
|
||||
@ -146,7 +146,7 @@ func main() {
|
||||
palette = dat.NewFromGrayscale()
|
||||
}
|
||||
|
||||
scene := &scene{sprite: sprite, palette: palette}
|
||||
scene := &scene{animation: animation, palette: palette}
|
||||
window, err := platform.NewWindow("Viewer", math.Vec2i{X: 1024, Y: 768}, scene)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
|
Loading…
Reference in New Issue
Block a user