diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-01-31 00:16:53 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2023-01-31 00:16:53 +0100 |
| commit | d76117cc913c738002c7562189ada75748645ff1 (patch) | |
| tree | 0b0acd248870eb57eee272fa60905fdfc578dd14 /go/game/ai.go | |
| parent | 37204e799318a8140372b1fa8e5265e02af3fe96 (diff) | |
| download | muhqs-game-d76117cc913c738002c7562189ada75748645ff1.tar.gz muhqs-game-d76117cc913c738002c7562189ada75748645ff1.zip | |
intermediate commit
Diffstat (limited to 'go/game/ai.go')
| -rw-r--r-- | go/game/ai.go | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/go/game/ai.go b/go/game/ai.go index 1b4b4e79..01820a19 100644 --- a/go/game/ai.go +++ b/go/game/ai.go @@ -48,7 +48,7 @@ func (ai *UnitAI) Execute(f func(*UnitAI)) { } func NewUnitAI(s *State, u *Unit) *UnitAI { - aiDesc := u.Card.getAI() + aiDesc := u.Card().getAI() if aiDesc == "" { return nil } @@ -64,8 +64,8 @@ func NewUnitAI(s *State, u *Unit) *UnitAI { case "shy": go ai.Execute(ShyAI) case "wandering": - aiDesc := u.Card.getAI() - x, err := strconv.Atoi(strings.Split(u.Card.getAI(), " ")[1]) + aiDesc := u.Card().getAI() + x, err := strconv.Atoi(strings.Split(u.Card().getAI(), " ")[1]) if err != nil { log.Fatalf("Invalid wandering AI description %s", aiDesc) } @@ -102,9 +102,9 @@ func (m *Map) generateMapGraphFor(u *Unit) *dijkstra.Graph { } func findPathTo(graph *dijkstra.Graph, u *Unit, pos Position) (dijkstra.BestPath, error) { - srcId, err := graph.GetMapping(u.GetTile().Position.String()) + srcId, err := graph.GetMapping(u.Tile().Position.String()) if err != nil { - log.Fatalf("No mapping %s in Graph: %s", u.GetTile().Position.String(), err) + log.Fatalf("No mapping %s in Graph: %s", u.Tile().Position.String(), err) } destId, err := graph.GetMapping(pos.String()) @@ -120,7 +120,7 @@ func findPathsToUnits(graph *dijkstra.Graph, m *Map, u *Unit, units []*Unit) []* for _, unit := range units { var bestPathToUnit *dijkstra.BestPath = nil - for _, adjacentTile := range TilesInRangeFromOrigin(m, unit.GetTile().Position, 1) { + for _, adjacentTile := range TilesInRangeFromOrigin(m, unit.Tile().Position, 1) { path, err := findPathTo(graph, u, adjacentTile.Position) if err != nil { continue @@ -148,7 +148,7 @@ func moveToRandomTile(ai *UnitAI) Action { idx = ai.s.Rand.Intn(len(moveTargets) - 1) } moveTarget := moveTargets[idx] - a := NewMoveActionPrototype(ai.u).Specialize(moveTarget) + a := NewMoveActionPrototype(ai.u).Specialize(ai.s, moveTarget) return a } @@ -158,7 +158,7 @@ func moveTowardsNearestEnemyUnit(ai *UnitAI) Action { } graph := ai.s.Map.generateMapGraphFor(ai.u) - enemyUnits := ai.s.EnemyUnits(ai.u.GetController()) + enemyUnits := ai.s.EnemyUnits(ai.u.Controller()) if len(enemyUnits) == 0 { return nil } @@ -185,13 +185,13 @@ func moveTowardsNearestEnemyUnit(ai *UnitAI) Action { var x, y int fmt.Sscanf(mapping, "(%d, %d)", &x, &y) nextStep := Position{X: x, Y: y} - if IsPositionInRange(ai.u.GetTile().Position, nextStep, ai.u.Movement.Range) { + if IsPositionInRange(ai.u.Tile().Position, nextStep, ai.u.Movement.Range) { target = nextStep } else { break } } - a := NewMoveActionPrototype(ai.u).Specialize(ai.s.Map.TileAt(target)) + a := NewMoveActionPrototype(ai.u).Specialize(ai.s, ai.s.Map.TileAt(target)) return a } @@ -206,7 +206,7 @@ func attackAttackableEnemyPerm(ai *UnitAI) Action { idx = ai.s.Rand.Intn(len(attackablePerms) - 1) } attackablePerm := attackablePerms[idx] - a := NewAttackActionPrototype(ai.u).Specialize(attackablePerm) + a := NewAttackActionPrototype(ai.u).Specialize(ai.s, attackablePerm) return a } @@ -254,7 +254,7 @@ func ShyAI(ai *UnitAI) { // 1. inEnemyAttackRange := false out: - for _, enemyUnit := range ai.s.EnemyUnits(ai.u.GetController()) { + for _, enemyUnit := range ai.s.EnemyUnits(ai.u.Controller()) { for _, p := range enemyUnit.AttackablePermanents(ai.s.Map) { if p == ai.u { inEnemyAttackRange = true @@ -263,8 +263,12 @@ out: } } if !inEnemyAttackRange && ai.u.HasFullAction() { - // return NewFullActionPrototype(u).Specialize(u.FullActionResolveFunc()) - a := NewFullActionPrototype(ai.u).Specialize() + fullActions := ai.u.Card().Impl.fullActionPrototypes(ai.u) + idx := 0 + if len(fullActions) > 1 { + idx = ai.s.Rand.Intn(len(fullActions) - 1) + } + a := fullActions[idx].Specialize(ai.s, ai.u) ai.actions <- a } @@ -287,8 +291,8 @@ out: // proceed at 1. func WanderingAI(ai *UnitAI, x int) { // 1. - for _, enemyUnit := range ai.s.EnemyUnits(ai.u.GetController()) { - if IsPositionInRange(ai.u.GetTile().Position, enemyUnit.GetTile().Position, x) { + for _, enemyUnit := range ai.s.EnemyUnits(ai.u.Controller()) { + if IsPositionInRange(ai.u.Tile().Position, enemyUnit.Tile().Position, x) { AggressiveAI(ai) break } |
