gg/cmd/test/main.go
2024-06-03 00:36:02 +05:00

136 lines
2.3 KiB
Go

package main
import (
"surdeus.su/core/gg"
"surdeus.su/core/gg/ox"
//"surdeus.su/core/gg/mx"
"surdeus.su/core/gg/ax"
"github.com/hajimehoshi/ebiten/v2/examples/resources/images"
//_ "github.com/silbinarywolf/preferdiscretegpu"
"bytes"
"log"
"fmt"
)
type Context = gg.Context
const (
LayerHighest gg.Layer = -iota
LayerDebug
LayerTriangle
LayerPlayer
LayerRect
LayerBackground
LayerLowest
)
const (
Stand ax.AnimationID = iota
Walk
)
var (
playerAnimations ax.AnimationSet
playerImg *gg.Image
player *Player
rectMove ox.Rectangle
rect *Rect
tri *Tri
bgShader = gg.MustNewShader([]byte(`
package main
//kage:unit pixels
//var cameraScaleX, cameraScaleY
var Zoom float
var PosX, PosY float
var Cage float
var Width float
const (
)
func Fragment(dst vec4, src vec2, _ vec4) vec4 {
c := imageSrc0UnsafeAt(src)
dstSize := imageDstSize()/Zoom
absDst := vec2(
dst.x/Zoom - dstSize.x/2 - PosX,
dst.y/Zoom - dstSize.y/2 - PosY,
)
cx := c*step(Cage-Width, mod(absDst.x-Width/2, Cage))
cy := c*step(Cage-Width, mod(absDst.y-Width/2, Cage))
if cx.a == 0 {
return cy
}
return cx
}
`))
)
func main() {
e := gg.NewEngine(gg.WindowConfig{
Title: "Test title",
Width: 720,
Height: 480,
VSync: true,
Fullscreen: false,
})
camera = NewCamera()
e.SetCamera(camera)
var err error
playerImg, err = gg.LoadImage(bytes.NewReader(images.Runner_png))
if err != nil {
log.Fatal(err)
}
rect = NewRect()
playerAnimations, err = ax.AnimationSetFromImage(
playerImg,
8, 3,
10, 1,
ax.AD(Stand).DefRow(0, 0, 1, 2, 3, 4),
ax.AD(Walk).DefRow(1, 0, 1, 2, 3, 4, 5, 6, 7),
)
if err != nil {
panic(err)
}
player = NewPlayer()
tri = NewTri(ox.T())
/*circle := &gg.Circle{}
circle.Transform = gg.T()
circle.Rotation = 300
circle.Color = gg.Rgba(1, 1, 1, 1)
circle.Antialias = true
circle.Layer = HighestL
circle.Visible = true*/
//e.Spawn(circle)
text, err := NewText()
if err != nil {
panic(err)
}
e.Spawn(text)
//fmt.Println(rect.GetLayer(), player.GetLayer())
fmt.Println("Starting...")
objects := []gg.Object{
camera, &Debug{},
player, rect, tri,
NewGrid(), text,
}
for _, object := range objects {
e.Spawn(object)
}
err = e.Run()
if err != nil {
panic(err)
}
}