1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package main
import (
"testing"
"time"
"age_of_empires/physics"
)
func TestGatherLoop(t *testing.T) {
// Initialize Game
game := &Game{}
// Town Center (Storage) at -100,0 (different grid cell from unit at 0,0)
tcBuilder := NewEntityBuilder().
WithPosition(physics.Point{X: -100, Y: 0}).
WithResourceStorage()
_ = game.Append(tcBuilder.Build())
// Mine (Source) at 0, 200
mineBuilder := NewEntityBuilder().
WithPosition(physics.Point{X: 0, Y: 200}).
WithResourceSource(100)
mineID := game.Append(mineBuilder.Build())
// Unit (Gatherer) at 0, 0
unitBuilder := NewEntityBuilder().
WithPosition(physics.Point{X: 0, Y: 0}).
WithMove().
WithOrder().
WithResourceGatherer(10)
unitID := game.Append(unitBuilder.Build())
// Set up simulated time
simTime := time.Now()
game.NowFunc = func() time.Time { return simTime }
// Simulate user selection: select the unit
game.GlobalSelection.Selected = append(game.GlobalSelection.Selected, unitID)
// Simulate right-click on mine position to trigger Gather via MainAction
minePosition := game.Position[mineID]
MainAction(game, unitID, minePosition, game.getMoveMap())
initialResources := game.ResourceAmount
dt := 16 * time.Millisecond
maxTicks := 100_000
deposited := false
for i := 0; i < maxTicks; i++ {
simTime = simTime.Add(dt)
game.Update()
if game.ResourceAmount > initialResources {
deposited = true
break
}
}
if !deposited {
t.Errorf("Unit failed to gather resources within %d ticks. ResourceAmount: %d", maxTicks, game.ResourceAmount)
}
}
|