Commit Graph

10 Commits

Author SHA1 Message Date
Steve Biedermann 29275c38fc fix(tiled): enforce tmx exports and group objects by category
Normalize export filenames to .tmx and return the actual saved path in command replies. Separate floors, structures, ground items and spawn points into named object layers, with a reserved wiring/plumbing layer. Reuse the same categories in the Tiled converter and preserve undo behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 22:20:13 +02:00
Steve Biedermann 8f24528304 feat(world)!: add layered floors and painted-tile conversion
Separate floors from structures for occupancy, rendering, interaction and deconstruction. Convert marked Tiled tiles to stateful gameplay buildings, retain a configurable default terrain tile, and preserve legacy saved terrain without reseeding it.

Bundle a Tiled conversion extension with editable per-object properties, conflict checks and single-step undo. Cover conversion, persistence, collision and gameplay in Rust tests and run the extension tests in CI.

BREAKING CHANGE: network protocol version 6 adds layered building state and default terrain metadata; clients and servers must be upgraded together.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 21:40:20 +02:00
Steve Biedermann 4d7d777e86 feat(chat): add native text editing, history and command completion
Use Bevy editable text with word navigation, keyboard and pointer selection, system clipboard integration and IME-aware submission. Add bounded history with draft restoration and permission-aware Tab completion. Cover native keyboard, mouse and clipboard event handling in tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:22:32 +02:00
Steve Biedermann 43051c9f5d feat(world)!: add lossless Tiled export and import
Preserve building state, machine contents and progress in editable Tiled properties. Share property decoding between seeds and imports; replace terrain and objects atomically while keeping characters. Persist terrain in schema version 2 and replicate it to existing and joining clients.

BREAKING CHANGE: network protocol version 5 replicates authoritative terrain; older clients and servers cannot connect.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:22:13 +02:00
Steve Biedermann 0c9136eaae feat!: move characters freely instead of tile by tile
Test / Clippy and tests (nextest) (push) Failing after 1m59s Details
Windows package / Build Windows package (push) Failing after 59s Details
Characters have a continuous Position simulated on the server with a
square collision box, sliding along walls and corner assist into
openings. GridPos is derived from the position, so interactions,
building and reach stay tile-based. The exact position is saved.

BREAKING CHANGE: protocol version 4 replaces SetMoveDir with SetMovement
and replicates Position.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 23:15:16 +02:00
Steve Biedermann 2d6f52e8a4 feat!: start menu, file-based UI, machine windows and server access control
- Start menu with new game (optionally hosted), load/delete saves and join
  server screens; CLI options skip it.
- Menus and HUD are built from rsn layouts in assets/ui with a shared theme,
  bindings, conditional visibility and tooltips.
- Machine windows place slots and backgrounds from the machine's ui
  definition; slots are filled from and emptied into the inventory.
- Chat with / commands, pause menu, clickable inventory, craft and build
  menus.
- Server passwords, admins, whitelist, bans, kicks and admin commands from
  the terminal or chat; changes are written to the config file. The hosting
  player is always admin.
- Clients keep a player id in client.toml; characters belong to it.

BREAKING CHANGE: protocol version 3 adds the player id and password to
Login, and characters are keyed by player id instead of name, so characters
in existing worlds are not restored.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 22:29:05 +02:00
Steve Biedermann 09ace2607c feat(server): add file and command line config
Add a dedicated server configuration file (`server.toml`) with clap-based
command line overrides. The server now supports runtime config changes via
terminal commands, and config edits are written back to the TOML file while
preserving comments.

Also let host mode feed the shared network startup through the same server
config resource.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 21:41:58 +02:00
Steve Biedermann afd3d3a537 feat(server): store worlds in sqlite or postgres with sqlx
Worlds are identified by a UUID and every table is keyed by it, so many
worlds can share one database. The schema is created and migrated
automatically. Autosaves are written on a background tokio runtime; exit
saves block until done.

Singleplayer saves are one SQLite file per save game in the platform data
directory. The dedicated server takes --database URL (default
sqlite://saves/server.sqlite) and --world NAME|UUID.

BREAKING CHANGE: the rsn save format and the server's --save FILE option
are removed; existing saves are not migrated.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 20:47:43 +02:00
Steve Biedermann 3cf0561401 feat: add data-driven machines
Machines give a building input/output slots and their own timed recipes.
The server processes them, replicates their state and saves it with the
world. The furnace becomes a machine and an assembler is added as an
example with a custom window layout. The client window follows with the
new UI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 20:28:16 +02:00
Steve Biedermann a43949be14 feat: add persistent-world station game
Bevy ECS workspace with three crates:
- game_core: rsn data definitions, components, Tiled map loader, protocol
- game_server: authoritative simulation, Rune scripting, persistence,
  dedicated server binary
- game_client: rendering, UI and input; embeds the server for
  singleplayer and hosting

Items, recipes, buildings and skills are defined in assets/data, behavior
in Rune scripts under assets/scripts, and maps are made in Tiled.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-18 19:44:13 +02:00