Repos / shark / c92329dd2a
commit c92329dd2af7bd6db9446eb256e6af2b1a93ecad
Author: Nhân <hi@imnhan.com>
Date: Sun Sep 17 14:19:15 2023 +0700
remove old Game logic
diff --git a/main.go b/main.go
index ba19b37..e90c8a0 100644
--- a/main.go
+++ b/main.go
@@ -11,7 +11,6 @@
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
- "github.com/hajimehoshi/ebiten/v2/inpututil"
"go.imnhan.com/shark/must"
)
@@ -51,22 +50,6 @@ type Position struct{
var DurationTillHungry time.Duration
var WalkChance, StopChance int
-type Game struct {
- CurrentAnim *Anim
- CurrentFrame int
- Ticks int
- IsDragging bool
- PreviousMousePos Vector
- WinStartPos Vector
- MouseStartPos Vector
- Size int
- LastFed time.Time
- X int
- Y int
- MaxX int
- MaxY int
-}
-
type Vector struct{ x, y int }
func CreateVector(x, y int) Vector {
@@ -86,140 +69,10 @@ func GlobalCursorPosition() Vector {
return Vector{cx + wx, cy + wy}
}
-func (g *Game) Update() error {
- if g.X < 0 {
- g.X = 0
- } else if g.X > g.MaxX {
- g.X = g.MaxX
- }
- if g.Y < 0 {
- g.Y = 0
- } else if g.Y > g.MaxY {
- g.Y = g.MaxY
- }
- ebiten.SetWindowPosition(g.X, g.Y)
-
- isHungry := false
-
- if time.Now().Sub(g.LastFed) >= DurationTillHungry {
- // The only allowed interaction when hungry is right-click to feed.
- isHungry = true
- g.IsDragging = false
- if g.CurrentAnim != Hungry {
- g.CurrentAnim = Hungry
- g.Ticks = 0
- g.CurrentFrame = 0
- return nil
- } else if inpututil.IsMouseButtonJustPressed(ebiten.MouseButtonRight) {
- g.CurrentAnim = Feeding
- g.Ticks = 0
- g.CurrentFrame = 0
- g.LastFed = time.Now()
- return nil
- }
- }
-
- if !isHungry && g.CurrentAnim != Feeding {
- handleNonHungryInputs(g)
- }
-
- switch g.CurrentAnim {
- case WalkLeft:
- g.X -= g.Size
- case WalkRight:
- g.X += g.Size
- }
-
- g.Ticks++
- if g.Ticks < 10 {
- return nil
- }
- g.Ticks = 0
- g.CurrentFrame++
-
- if g.CurrentFrame >= len(g.CurrentAnim.Frames) {
- g.CurrentFrame = 0
- if g.CurrentAnim == RightClick || g.CurrentAnim == Feeding {
- g.CurrentAnim = Idle
- }
-
- if g.CurrentAnim == Idle {
- if randBool(WalkChance) {
- if randBool(50) {
- g.CurrentAnim = WalkLeft
- } else {
- g.CurrentAnim = WalkRight
- }
- }
- } else if g.CurrentAnim == WalkLeft || g.CurrentAnim == WalkRight {
- if randBool(StopChance) {
- g.CurrentAnim = Idle
- }
- }
- }
- return nil
-}
-
func randBool(chance int) bool {
return rand.Intn(100) < chance
}
-func handleNonHungryInputs(g *Game) {
- if inpututil.IsMouseButtonJustPressed(ebiten.MouseButtonRight) {
- if g.CurrentAnim == Idle {
- g.CurrentAnim = RightClick
- g.Ticks = 0
- g.CurrentFrame = 0
- }
- }
-
- if inpututil.IsMouseButtonJustPressed(ebiten.MouseButtonLeft) {
- g.IsDragging = true
- g.CurrentAnim = Drag
- g.Ticks = 0
- g.CurrentFrame = 0
- g.PreviousMousePos = GlobalCursorPosition()
- g.WinStartPos = CreateVector(ebiten.WindowPosition())
- g.MouseStartPos = GlobalCursorPosition()
- }
- if inpututil.IsMouseButtonJustReleased(ebiten.MouseButtonLeft) {
- g.IsDragging = false
- g.CurrentAnim = Idle
- g.Ticks = 0
- g.CurrentFrame = 0
- }
-
- mousePos := GlobalCursorPosition()
- if g.IsDragging && mousePos != g.PreviousMousePos {
- newWinPos := g.WinStartPos.Add(mousePos.Subtract(g.MouseStartPos))
- g.X = newWinPos.x
- g.Y = newWinPos.y
- ebiten.SetWindowPosition(g.X, g.Y)
- }
-
- g.PreviousMousePos = mousePos
-}
-
-func (g *Game) Draw(screen *ebiten.Image) {
- screen.DrawImage(g.CurrentAnim.Frames[g.CurrentFrame], nil)
- /*
- debugStr := ""
- debugStr += fmt.Sprintf("%v\n", g.Ticks)
- debugStr += fmt.Sprintf("%v\n", g.LastFed)
- if ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) {
- debugStr += "Dragging\n"
- }
- if ebiten.IsMouseButtonPressed(ebiten.MouseButtonRight) {
- debugStr += "Right click\n"
- }
- ebitenutil.DebugPrint(screen, debugStr)
- */
-}
-
-func (g *Game) Layout(outsideWidth, outsideHeight int) (w, h int) {
- return SPRITE_X, SPRITE_Y
-}
-
func NewAnim(sprites embed.FS, subdir string) *Anim {
files := must.One(sprites.ReadDir("sprites/" + subdir))
var frames []*ebiten.Image
@@ -245,7 +98,7 @@ func init() {
}
func main() {
- var sizeFlag, xFlag, yFlag, walkChanceFlag, stopChanceFlag int
+ var sizeFlag, xFlag, yFlag int
var secondsUntilHungryFlag int64
flag.IntVar(
&sizeFlag, "size", 1, "Size multiplier: make Gura as big as you want",
@@ -258,24 +111,13 @@ func main() {
)
flag.IntVar(&xFlag, "x", 9999, "X position on screen")
flag.IntVar(&yFlag, "y", 9999, "Y position on screen")
- flag.IntVar(&walkChanceFlag, "walk", 5, "chance to start walking, in %")
- flag.IntVar(&stopChanceFlag, "stop", 40, "chance to stop walking, in %")
+ flag.IntVar(&WalkChance, "walk", 5, "chance to start walking, in %")
+ flag.IntVar(&StopChance, "stop", 40, "chance to stop walking, in %")
flag.Parse()
- var game Game
- game.CurrentAnim = Idle
- game.LastFed = time.Now()
DurationTillHungry = time.Duration(secondsUntilHungryFlag) * 1_000_000_000
- game.Size = sizeFlag
- WalkChance = walkChanceFlag
- StopChance = stopChanceFlag
- game.X = xFlag
- game.Y = yFlag
-
- screenX, screenY := ebiten.ScreenSizeInFullscreen()
- game.MaxX = screenX - SPRITE_X*game.Size
- game.MaxY = screenY - SPRITE_Y*game.Size
+ ebiten.SetWindowPosition(xFlag, yFlag)
ebiten.SetWindowSize(SPRITE_X*sizeFlag, SPRITE_Y*sizeFlag)
ebiten.SetWindowTitle("Shark!")
ebiten.SetWindowDecorated(false)