aboutsummaryrefslogtreecommitdiff
path: root/go/game/ai.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-01-31 00:16:53 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2023-01-31 00:16:53 +0100
commitd76117cc913c738002c7562189ada75748645ff1 (patch)
tree0b0acd248870eb57eee272fa60905fdfc578dd14 /go/game/ai.go
parent37204e799318a8140372b1fa8e5265e02af3fe96 (diff)
downloadmuhqs-game-d76117cc913c738002c7562189ada75748645ff1.tar.gz
muhqs-game-d76117cc913c738002c7562189ada75748645ff1.zip
intermediate commit
Diffstat (limited to 'go/game/ai.go')
-rw-r--r--go/game/ai.go36
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
}