diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-07-09 07:53:48 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-07-09 07:53:48 +0200 |
| commit | 057adf65468e7b6ec544686b80433093a9f9deab (patch) | |
| tree | 174ea7c587102120afa14b3530e199cf436d2c69 | |
| parent | 5af6361f22d727a4abacd724cf9152e67f73328a (diff) | |
Extract entity main action
| -rw-r--r-- | main.go | 27 | ||||
| -rw-r--r-- | order.go | 13 |
2 files changed, 26 insertions, 14 deletions
@@ -43,6 +43,7 @@ type Game struct { UnitBuilder EntityBuilder } +// TODO: This could be a maintained index func (g *Game) getMoveMap() physics.MoveMap { blocked := map[physics.Point]bool{} for _, e := range g.Entities { @@ -70,6 +71,16 @@ func (g *Game) Closest(from physics.Point, candidates []physics.Point) (physics. return closest, closestDistance } +// TODO: This could be a maintained index +func (g *Game) entityAt(position physics.Point) *Entity { + for _, e := range g.Entities { + if e.Position.IsEnabled && e.Position.Value == position { + return e + } + } + return nil +} + func (g *Game) updateSelecting(cursor physics.Point, moveMap physics.MoveMap) { if inpututil.IsMouseButtonJustPressed(ebiten.MouseButtonLeft) { g.Selection.Start = cursor @@ -77,22 +88,10 @@ func (g *Game) updateSelecting(cursor physics.Point, moveMap physics.MoveMap) { } if inpututil.IsMouseButtonJustReleased(ebiten.MouseButtonRight) { destination := cursor.Div(100).Mul(100) - var entityAtDestination *Entity - for _, e := range g.Entities { - if e.Position.IsEnabled && e.Position.Value == destination { - entityAtDestination = e - break - } - } + entityAtDestination := g.entityAt(destination) slog.Info("destination", slog.String("destination", destination.String())) for _, e := range g.Entities { - if e.Selection.IsEnabled && e.Selection.Value.IsSelected { - if entityAtDestination != nil && entityAtDestination.ResourceSource.IsEnabled { - Gather(e, entityAtDestination, g) - } else { - physics.StartMove(&e.Move, e.Position, destination, moveMap) - } - } + e.MainAction(g, destination, entityAtDestination, moveMap) } } if inpututil.IsMouseButtonJustReleased(ebiten.MouseButtonLeft) { @@ -1,5 +1,7 @@ package main +import "age_of_empires/physics" + type Order interface { Update(e *Entity, g *Game) } @@ -10,3 +12,14 @@ func (e *Entity) UpdateOrder(g *Game) { } e.Order.Value.Update(e, g) } + +func (e *Entity) MainAction(g *Game, destination physics.Point, entityAtDestination *Entity, moveMap physics.MoveMap) { + if !e.Selection.IsEnabled || !e.Selection.Value.IsSelected { + return + } + if entityAtDestination != nil && entityAtDestination.ResourceSource.IsEnabled { + Gather(e, entityAtDestination, g) + return + } + physics.StartMove(&e.Move, e.Position, destination, moveMap) +} |
