<feed xmlns='http://www.w3.org/2005/Atom'>
<title>go_age_of_empire/main.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>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>Change patrol shortcut from A to Q</title>
<updated>2026-05-07T08:38:56Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-05-07T08:38:56Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=5c2d9ea10c9ed41fee41067c6d0d8d7fade8297c'/>
<id>urn:sha1:5c2d9ea10c9ed41fee41067c6d0d8d7fade8297c</id>
<content type='text'>
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>Switch font to Cinzel variable font</title>
<updated>2026-03-01T21:19:04Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-03-01T21:19:04Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=2e8da8cb6948664a77fa73cb0c66e0cc27419dc5'/>
<id>urn:sha1:2e8da8cb6948664a77fa73cb0c66e0cc27419dc5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Selection is now Selectable</title>
<updated>2026-02-17T07:00:18Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-02-17T07:00:18Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=8da30c8dd8cc0860768ff0e54f0d092ac94013fa'/>
<id>urn:sha1:8da30c8dd8cc0860768ff0e54f0d092ac94013fa</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Extracted TODOs</title>
<updated>2026-01-15T22:15:46Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-01-15T22:15:46Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=f1b75538593841398e801b209376721204548e98'/>
<id>urn:sha1:f1b75538593841398e801b209376721204548e98</id>
<content type='text'>
</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>
<entry>
<title>refactor: transition to struct-of-arrays ECS architecture</title>
<updated>2026-01-15T21:05:46Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-01-15T21:05:38Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=13626410c4d6db7fdc15ded5ee7865fcdbf0b88a'/>
<id>urn:sha1:13626410c4d6db7fdc15ded5ee7865fcdbf0b88a</id>
<content type='text'>
- Replace individual Entity structs with centralized component slices in Game struct (SoA layout).
- Implement bitmask-based component lookup (CM_Position, CM_Move, etc.).
- Convert logic from object-oriented Update() methods to standalone Systems (UpdateMoveSystem, UpdateGatherSystem, UpdateSpawnSystem).
- Update rendering, selection, and input handling to iterate over component arrays.
</content>
</entry>
<entry>
<title>Get time from Game</title>
<updated>2025-09-25T21:07:14Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2025-09-25T21:05:48Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/go_age_of_empire/commit/?id=b457ffe1fbb7799beba0bc4b53bc3bf1309ae799'/>
<id>urn:sha1:b457ffe1fbb7799beba0bc4b53bc3bf1309ae799</id>
<content type='text'>
</content>
</entry>
</feed>
