diff options
Diffstat (limited to 'integration_test.go')
| -rw-r--r-- | integration_test.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/integration_test.go b/integration_test.go new file mode 100644 index 0000000..8305719 --- /dev/null +++ b/integration_test.go @@ -0,0 +1,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) + } +} |
