2023-05-04 19:31:33 +03:00
|
|
|
package gx
|
|
|
|
|
2023-05-22 23:39:01 +03:00
|
|
|
import (
|
|
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
|
|
//"github.com/hajimehoshi/ebiten/v2/vector"
|
2023-05-23 16:19:55 +03:00
|
|
|
//"fmt"
|
2023-05-22 23:39:01 +03:00
|
|
|
//"image"
|
|
|
|
)
|
|
|
|
|
2023-05-04 19:31:33 +03:00
|
|
|
// The type describes rectangle geometry.
|
2023-05-22 23:39:01 +03:00
|
|
|
type Rectangle struct {
|
|
|
|
// Position of up left corner
|
|
|
|
// and the point to
|
|
|
|
// rotate around(relatively of position, not absolute).
|
|
|
|
T Transform
|
2023-05-04 19:31:33 +03:00
|
|
|
// Width and height.
|
|
|
|
W, H Float
|
2023-05-23 16:19:55 +03:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// The type describes rectangle that can be drawn.
|
|
|
|
type DrawableRectangle struct {
|
|
|
|
Rectangle
|
2023-05-25 00:42:48 +03:00
|
|
|
|
|
|
|
// Solid color of the rectangle.
|
|
|
|
// Will be ignored if the Shader
|
|
|
|
// field is not nil.
|
2023-05-23 16:19:55 +03:00
|
|
|
Color Color
|
2023-05-25 00:42:48 +03:00
|
|
|
|
2023-05-26 18:31:04 +03:00
|
|
|
// Shader to be applied
|
|
|
|
Shader *Shader
|
|
|
|
// Shader variables.
|
|
|
|
Uniforms map[string] any
|
|
|
|
// Shader images
|
|
|
|
Images [4]*Image
|
2023-05-25 00:42:48 +03:00
|
|
|
|
2023-05-26 18:31:04 +03:00
|
|
|
// Should be draw or not.
|
2023-05-23 16:19:55 +03:00
|
|
|
Visible bool
|
2023-05-22 23:39:01 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Return points of corners of the rectangle.
|
|
|
|
func (r Rectangle) Corners() []Point {
|
|
|
|
return []Point{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get 2 triangles that the rectangle consists of.
|
|
|
|
func (r Rectangle) Triangles() Triangles {
|
|
|
|
return Triangles{}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*func MustNewImage(w, h int) (*Image) {
|
|
|
|
img, err := NewImage(w, h)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return img
|
|
|
|
}*/
|
|
|
|
|
2023-05-30 13:12:11 +03:00
|
|
|
func (r Rectangle) ContainsPoint(p Point) bool {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2023-05-22 23:39:01 +03:00
|
|
|
func NewImage(w, h int) (*Image) {
|
|
|
|
return ebiten.NewImage(w, h)
|
2023-05-04 19:31:33 +03:00
|
|
|
}
|
|
|
|
|
2023-05-26 18:31:04 +03:00
|
|
|
func (r *DrawableRectangle) IsVisible() bool {
|
2023-05-23 16:19:55 +03:00
|
|
|
return r.Visible
|
|
|
|
}
|
|
|
|
|
2023-05-26 18:31:04 +03:00
|
|
|
func (r *DrawableRectangle) Draw(
|
2023-05-22 23:39:01 +03:00
|
|
|
e *Engine,
|
|
|
|
i *Image,
|
|
|
|
) {
|
2023-05-23 16:25:21 +03:00
|
|
|
t := r.T
|
2023-05-25 00:42:48 +03:00
|
|
|
|
2023-05-23 16:19:55 +03:00
|
|
|
// Draw solid color if no shader.
|
|
|
|
if r.Shader == nil {
|
2023-05-22 23:39:01 +03:00
|
|
|
img := NewImage(1, 1)
|
2023-05-23 16:19:55 +03:00
|
|
|
img.Set(0, 0, r.Color)
|
2023-05-26 18:31:04 +03:00
|
|
|
|
|
|
|
t.S.X *= r.W
|
|
|
|
t.S.Y *= r.H
|
|
|
|
|
|
|
|
m := t.Matrix(e)
|
|
|
|
rm := e.Camera().RealMatrix(e, true)
|
|
|
|
|
|
|
|
m.Concat(rm)
|
|
|
|
|
2023-05-22 23:39:01 +03:00
|
|
|
opts := &ebiten.DrawImageOptions{
|
|
|
|
GeoM: m,
|
|
|
|
}
|
|
|
|
i.DrawImage(img, opts)
|
|
|
|
return
|
|
|
|
}
|
2023-05-23 16:19:55 +03:00
|
|
|
|
2023-05-26 18:31:04 +03:00
|
|
|
|
2023-05-25 00:42:48 +03:00
|
|
|
// Use the Color as base image if no is provided.
|
2023-05-26 18:31:04 +03:00
|
|
|
var did bool
|
|
|
|
if r.Images[0] == nil {
|
|
|
|
r.Images[0] = NewImage(1, 1)
|
|
|
|
r.Images[0].Set(0, 0, r.Color)
|
|
|
|
did = true
|
2023-05-25 00:42:48 +03:00
|
|
|
}
|
|
|
|
|
2023-05-26 18:31:04 +03:00
|
|
|
w, h := r.Images[0].Size()
|
|
|
|
if !did {
|
|
|
|
t.S.X /= Float(w)
|
|
|
|
t.S.Y /= Float(h)
|
|
|
|
|
|
|
|
t.S.X *= r.W
|
|
|
|
t.S.Y *= r.H
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
rm := e.Camera().RealMatrix(e, true)
|
|
|
|
m := t.Matrix(e)
|
|
|
|
m.Concat(rm)
|
|
|
|
|
2023-05-25 00:42:48 +03:00
|
|
|
// Drawing with shader.
|
2023-05-22 23:39:01 +03:00
|
|
|
opts := &ebiten.DrawRectShaderOptions{
|
2023-05-23 16:25:21 +03:00
|
|
|
GeoM: m,
|
2023-05-26 18:31:04 +03:00
|
|
|
Images: r.Images,
|
|
|
|
Uniforms: r.Uniforms,
|
2023-05-22 23:39:01 +03:00
|
|
|
}
|
2023-05-25 00:42:48 +03:00
|
|
|
i.DrawRectShader(w, h, r.Shader, opts)
|
2023-05-04 19:31:33 +03:00
|
|
|
}
|
|
|
|
|