Tons of experimental updates.
This commit is contained in:
147
drawer.go
Normal file
147
drawer.go
Normal file
@@ -0,0 +1,147 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image/color"
|
||||
"loading/character"
|
||||
"loading/objects"
|
||||
"math"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
"github.com/hajimehoshi/ebiten/v2/text"
|
||||
"github.com/hajimehoshi/ebiten/v2/vector"
|
||||
)
|
||||
|
||||
func DrawBobble(b objects.Bobble, image *ebiten.Image) {
|
||||
|
||||
if b.Radius < 0 {
|
||||
return
|
||||
}
|
||||
vector.DrawFilledCircle(image, b.Pose.X, b.Pose.Y, b.Radius+10, b.Bordercolor, true)
|
||||
vector.DrawFilledCircle(image, b.Pose.X, b.Pose.Y, b.Radius, b.Color, true)
|
||||
}
|
||||
|
||||
func DrawCharacter(c character.Character, image *ebiten.Image) {
|
||||
|
||||
if len(c.Shape) <= 0 {
|
||||
return
|
||||
}
|
||||
|
||||
var path vector.Path
|
||||
path.MoveTo(c.Pose.X, c.Pose.Y)
|
||||
for _, p := range c.Shape {
|
||||
|
||||
//rotation time *dance*
|
||||
newX := c.Pose.X + float32(math.Cos(float64(c.Angle)))*(p.X) - float32(math.Sin(float64(c.Angle)))*(p.Y)
|
||||
newY := c.Pose.Y + float32(math.Sin(float64(c.Angle)))*(p.X) + float32(math.Cos(float64(c.Angle)))*(p.Y)
|
||||
path.LineTo(newX, newY)
|
||||
}
|
||||
path.Close()
|
||||
|
||||
var vs []ebiten.Vertex
|
||||
var is []uint16
|
||||
|
||||
vs, is = path.AppendVerticesAndIndicesForFilling(nil, nil)
|
||||
|
||||
for i := range vs {
|
||||
vs[i].SrcX = 1
|
||||
vs[i].SrcY = 1
|
||||
vs[i].ColorR = float32(c.Color.R) / 0xFF
|
||||
vs[i].ColorG = float32(c.Color.B) / 0xFF
|
||||
vs[i].ColorB = float32(c.Color.G) / 0xFF
|
||||
vs[i].ColorA = 1
|
||||
}
|
||||
|
||||
op := &ebiten.DrawTrianglesOptions{}
|
||||
|
||||
//pose information
|
||||
//angle := fmt.Sprintf("%.2f", c.Angle*180/math.Pi)
|
||||
//delta := fmt.Sprintf("%.2f", c.DeltaAngle*180/math.Pi)
|
||||
|
||||
//text.Draw(image, angle, mplusTinyFont, int(c.Pose.X+20), int(c.Pose.Y), color.White)
|
||||
//text.Draw(image, delta, mplusTinyFont, int(c.Pose.X+20), int(c.Pose.Y+15), color.White)
|
||||
|
||||
image.DrawTriangles(vs, is, whiteSubImage, op)
|
||||
}
|
||||
|
||||
func (g *Game) DrawLoading(image *ebiten.Image) {
|
||||
|
||||
//identifier
|
||||
text.Draw(image, versionInfo, mplusTinyFont, 20, 60, color.White)
|
||||
|
||||
//radial
|
||||
var xs []int
|
||||
var ys []int
|
||||
var tc []uint8
|
||||
var scales []float32
|
||||
|
||||
fade_scale := 0xFF / numTiles
|
||||
|
||||
for i := 0; i < numTiles; i++ {
|
||||
xs = append(xs, int(math.Cos(float64(g.counter)/(math.Pi*3)-float64(i)*math.Pi/3)*40+screenWidth/2-float64(tileWidth)/2))
|
||||
ys = append(ys, int(math.Sin(float64(g.counter)/(math.Pi*3)-float64(i)*math.Pi/3)*40+screenHeight/2-float64(tileHeight)/2))
|
||||
tc = append(tc, uint8(0xFF-fade_scale*i))
|
||||
|
||||
scales = append(scales, float32(math.Sin(float64(g.counter)/(math.Pi*12))/2+1))
|
||||
}
|
||||
|
||||
for i := numTiles - 1; i >= 0; i-- {
|
||||
drawTile(image, float32(xs[i]), float32(ys[i]), scales[i], color.RGBA{tc[i], tc[i], tc[i], 0xFF})
|
||||
}
|
||||
|
||||
//Percentage >:]
|
||||
//percent := (maxPercent - 1/math.Exp(float64(g.counter-1)-10/6)) / maxPercent
|
||||
offset := float64(4.605)
|
||||
exppart0 := float64(g.counter-1) / 10000
|
||||
|
||||
percent := maxPercent - 1/math.Exp(exppart0-offset)
|
||||
if percent < 0 {
|
||||
percent = 0
|
||||
}
|
||||
|
||||
//100-1/e^(x/1000 - 4.6)
|
||||
|
||||
text.Draw(image, fmt.Sprintf("%.2f%%", percent), mplusTinyFont, screenWidth/2-70/2, screenHeight-80, color.RGBA{0xC0, 0xC0, 0xC0, 0xC0})
|
||||
}
|
||||
|
||||
func drawTile(screen *ebiten.Image, x float32, y float32, scale float32, c color.RGBA) {
|
||||
var scaleFactor float32 = 1
|
||||
if scale > 0 {
|
||||
scaleFactor = scale
|
||||
}
|
||||
drawTileToScale(screen, x, y, scaleFactor, c)
|
||||
}
|
||||
|
||||
func drawTileToScale(screen *ebiten.Image, x float32, y float32, scale float32, c color.RGBA) {
|
||||
|
||||
var path vector.Path
|
||||
|
||||
//scale delta
|
||||
xd := tileWidth * scale
|
||||
yd := tileHeight * scale
|
||||
|
||||
//position at object origin shifted slightly for the half width/height adjustment
|
||||
path.MoveTo(x-xd/2, y-yd/2)
|
||||
path.LineTo(x+xd/2, y-yd/2)
|
||||
path.LineTo(x+xd/2, y+yd/2)
|
||||
path.LineTo(x-xd/2, y+yd/2)
|
||||
path.LineTo(x-xd/2, y+yd/2)
|
||||
path.Close()
|
||||
|
||||
var vs []ebiten.Vertex
|
||||
var is []uint16
|
||||
|
||||
vs, is = path.AppendVerticesAndIndicesForFilling(nil, nil)
|
||||
|
||||
for i := range vs {
|
||||
vs[i].SrcX = 1
|
||||
vs[i].SrcY = 1
|
||||
vs[i].ColorR = float32(c.R) / 0xFF
|
||||
vs[i].ColorG = float32(c.B) / 0xFF
|
||||
vs[i].ColorB = float32(c.G) / 0xFF
|
||||
vs[i].ColorA = 1
|
||||
}
|
||||
|
||||
op := &ebiten.DrawTrianglesOptions{}
|
||||
screen.DrawTriangles(vs, is, whiteSubImage, op)
|
||||
}
|
||||
Reference in New Issue
Block a user