<feed xmlns='http://www.w3.org/2005/Atom'>
<title>go_age_of_empire/integration_test.go, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://git.kagamino.dev/go_age_of_empire/atom?h=main</id>
<link rel='self' href='https://git.kagamino.dev/go_age_of_empire/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/'/>
<updated>2026-06-06T18:59:12Z</updated>
<entry>
<title>Add examples catalog with subcommand dispatch</title>
<updated>2026-06-06T18:59:12Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-06-06T18:59:12Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=d9a54f1319cc9dcc2861cecc9edfde14cf039c5b'/>
<id>urn:sha1:d9a54f1319cc9dcc2861cecc9edfde14cf039c5b</id>
<content type='text'>
- Extract game engine from package main to engine/ library package
- Create examples/ package with registry, Entry type, and BuilderDeps
- Register default world as an example (moved from main())
- Add combat example: two teams of units facing each other
- Rewrite main.go as thin dispatch: go run . example [name]
- Update README with examples catalog one-liner
</content>
</entry>
<entry>
<title>Fix unit stopping when destination is occupied by another unit</title>
<updated>2026-05-07T10:23:50Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-05-07T10:23:50Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=9590420f5f7595021771c216f3129827a0591b37'/>
<id>urn:sha1:9590420f5f7595021771c216f3129827a0591b37</id>
<content type='text'>
When a unit arrived exactly MOVE_SPEED away from its destination, it would
move there via moveToward rather than snapping. On the next tick, its own
cell appeared blocked in the moveMap, triggering a repath to an adjacent
cell — causing infinite oscillation. Fix by excluding the unit's own current
cell from the blocked check before repathing. Also adds repath-to-adjacent
logic so units that arrive while the destination is genuinely occupied by
someone else settle next to it instead of stopping mid-journey.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add Input abstraction between ebiten and simulation update</title>
<updated>2026-05-07T10:07:02Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-05-07T10:07:02Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=20abde4dd780b51840e3498336bf907f0fd9164c'/>
<id>urn:sha1:20abde4dd780b51840e3498336bf907f0fd9164c</id>
<content type='text'>
Introduces Input snapshot struct collected once per tick via CollectInput,
and UpdateSimulation(Input) as the ebiten-free simulation entrypoint.
Integration tests now drive the game through simulated inputs rather than
direct method calls.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add viewport/camera system with pan, zoom, and world-space cursor conversion</title>
<updated>2026-05-07T08:31:42Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-05-07T08:31:42Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=b2ca89d8193d98aa21e9637257c3e7a7216b9bd8'/>
<id>urn:sha1:b2ca89d8193d98aa21e9637257c3e7a7216b9bd8</id>
<content type='text'>
- New camera.go: Camera struct with arrow-key pan, scroll-wheel zoom toward
  cursor, middle-mouse drag, exponential velocity decay, and world-bounds clamping
- Layout() now returns screen dimensions (960x640) instead of world size so
  the camera GeoM transform drives all rendering
- All world entities, halos, text, path lines and spawn target converted via
  camera transform in draw.go; banners remain in screen space
- selection.go: separate startScreen field so the drag-select box draws in
  screen space while selection logic stays in world space
- Banner heights and font sizes scaled down to fit the 640px logical screen
- Three new integration tests: ScreenToWorld round-trip, bounds clamping,
  zoom-toward-cursor stability

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: prevent entities from overlapping when arriving at the same cell</title>
<updated>2026-03-01T20:52:49Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-03-01T20:52:49Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=5728ebc309b4753c939d751c7fd489b108e5dc09'/>
<id>urn:sha1:5728ebc309b4753c939d751c7fd489b108e5dc09</id>
<content type='text'>
Update UpdateMoveSystem to maintain the moveMap as entities move
within a tick. When an entity snaps to a grid cell:
- Block the new cell in the moveMap immediately
- Unblock the old cell

Before snapping, check if the target cell was already claimed by
another entity earlier in the same tick. If so, repath instead of
overlapping.
</content>
</entry>
<entry>
<title>First integration test</title>
<updated>2026-01-15T22:03:12Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-01-15T22:03:12Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=d1e361f74e0d424b4d6a99adea1463982d9f1475'/>
<id>urn:sha1:d1e361f74e0d424b4d6a99adea1463982d9f1475</id>
<content type='text'>
</content>
</entry>
</feed>
