Commit Graph

41 Commits

Author SHA1 Message Date
324cc795f0 [Add] Multi-line rendering in TextView. 2025-09-29 21:26:35 +01:00
d34c13ef8b [Change] Tried to fix stupid fucking animation jitter 2025-09-29 20:36:49 +01:00
4a6d33292a [Refactor] Abstract text editing into reusable components. 2025-09-28 23:31:17 +01:00
43907509eb [Add] Graphical application launcher. 2025-09-28 20:39:11 +01:00
996bf1c62c [Add] Temp desktop background and clock widget. 2025-09-28 17:24:41 +01:00
0e7f97ca81 [Refactor] Improve window buttons and fix state handling. 2025-09-28 15:37:15 +01:00
ea25cb6cc7 [Add] Taskbar and window management work
- Adds a taskbar that displays and manages open application windows
- close, minimise and restore functionality
- resizeable windows
- Refactored desktop event handling to manage window focus and render
  order
2025-09-28 14:12:11 +01:00
6876cbff95 [Add] Implement system boot sequence screen. 2025-09-28 03:10:12 +01:00
e72cc987ff [Add] Not your boring main menu. 2025-09-28 02:21:34 +01:00
b1bdb86b76 [Add] Implement screen manager state machine. 2025-09-28 00:09:26 +01:00
5cbcfeb54e [Refactor] More spring cleaning for the renderer. 2025-09-27 23:22:51 +01:00
e8ca1630c6 [Refactor] Consolidate duplicated matrix code into math util 2025-09-27 23:13:11 +01:00
cf48324516 [Refactor] Givin' the client some luv!
Refactored client-side rendering code to use a Color struct rather than
raw float arrays.
2025-09-27 22:58:04 +01:00
00e78cc2ba [Refactor] One GameState to rule them all!
Introduces a central GameState class to manage the client's lifecycle,
network connection and UI components. The Terminal has been demoted to a
pure UI widget and main has been simplified to a basic entrypoint as
they should be!
2025-09-27 18:07:01 +01:00
59783d2408 [Refactor] :O Machines now walk the earth!!
Old vfs_node was getting a bit big for its boots, trying to be a
filesystem, network interface and the whole damn computer all at once.

This server-side refactor introduces a 'Machine' class that rightfully
owns the VFS, network services and other machine-state sh.t.
2025-09-27 17:30:14 +01:00
28804998d7 [Remove] Unused include directive. 2025-09-27 00:38:12 +01:00
2c01d53b9d [Add] Add single-player mode. 2025-09-27 00:34:38 +01:00
fde6879720 [Add] Implement nmap network scanner. 2025-09-27 00:13:56 +01:00
bb17cf3473 [Add] Implement remote sessions and server exit. 2025-09-26 21:32:08 +01:00
6272800a22 [Refactor] Migrate networking from SDL_net to Asio.
the SDL3_net implementation was causing blocking behaviour and was
difficult to debug and has bad docs due to not being released. Caused
crashes all over. so moved to Asio. This thing took so damn long as this
also had it's issues!

- All networking now uses Asio's async callback model.
- TcpConnection class encapsulates logic for a single client-server
  connection, managing socket and message framing.
- Implmented thread-safe queues for handling incoming and outgoing
  messages between the network thread and the main application.
- Refactored ClientNetwork and NetworkManager, the primary client and
  server networking classes have been rewritten to use the new
asio-based architecture.
- Player objects on the server are not managed by std::unique_ptr to
  ensure proper lifetime management and prevent memleaks.
- VFSManager is now a single instance on the server, passed by reference
  to new players, avoding redundant script loading for every connection.
- Resolved server crash that occured immediately upon client connection.
  This was traced to an object lifetime issue within Asio's async
handlers which was fixed by simplifying the send operation.
2025-09-25 22:41:01 +01:00
388c6429cf [Change] Remove hybrid local/remote network model
Client architecture has been refactored to be fully
server-authoritative, remove the previous "hybrid" model that supported
both local and remote command execution, that was a stupid idea.

- Client now connects to server on startup.
- The local command processor and VFS have been removed from the
  Terminal class.
- All command processing is now handled by the server.
- The client is now just a thin client essentially

I'll in the future enable single player mode by running the server on
the local machine in a separate thread.
2025-09-23 20:54:39 +01:00
b30c497769 [Add] CoW foundation and scriptable rm command.
Putting down the nessassary steps for the Copy-on-Write described in the
previous commit. Implemented the first script based write command, 'rm'
2025-09-21 22:39:16 +01:00
ea0605711d [Refactor] Shared VFS template for CoW foundation.
Refactors the Virtual file System creation process to improve memory
efficiency at scale. This is laying the ground work for a copy-on-write
system.

Previously, each new VFS instance was a full copy, which won't scale to
a large number of NPC's. Especially now that we are loading in entire
Lua scripts.

- Added VFSManager class which now manages the lifecycle of all VFS
  instances.
- VFSManager creates a single "template" VFS on initilisation. The
  template holds the shared, read-only directories like '/bin' and their
command scripts.
- When a new VFS is created (for a client or NPC), it links it's 'bin'
  directory to the shared template's '/bin' by pointer rather than
creating a copy of it.

this makes sure the content for *all* common command scripts exists in
memory only once, regardless of the number of NPC's we will later
generate.
2025-09-21 21:50:06 +01:00
76e61336a1 Fix some fucking weird quirk in a Fedora VM. 2025-09-21 17:30:22 +01:00
03b56b44e4 Explicitly tell linker where to find SDL3_net 2025-09-21 17:10:04 +01:00
274ff9f665 [Fix] SDL3_net has no official release. Use main branch. 2025-09-21 17:04:41 +01:00
019059e209 [Add] Dependency management to build system. 2025-09-21 16:36:45 +01:00
208314f54a [Add] Remote SSH sessions and window management.
This is the beginning of the remote session functionality. It allows
players to connect to different NPC systems via an 'ssh' command.

*Server*
- Can now manage a world of multiple NPC file systems that are
  identified by IP addresses.
- Implemented SSH command to allow connection to remote NPC systems.
  Each remote session is managed via a 'CommandProcessor'.
- 'exit' command causes the remote server to terminate the client
  connection

*Client*
- Terminal can enter a 'remote' state via the SSH command which sends
  subsequent commands to the server.
- the local 'exit' command will close the terminal window.
- Refactored UI object ownership to prevent memory leaks and ensure
  proper cleanup when a window is closed or the terminal application.
2025-09-21 15:22:35 +01:00
a73aa4feaf Create hybrid authority model for command processing. 2025-09-21 00:22:04 +01:00
dbe6e437ad [Add] Process cd and ls commands. 2025-09-20 22:23:04 +01:00
92106a3c44 [Add] Client/server networking and 'ls' command. 2025-09-20 18:58:24 +01:00
70f096abc4 [Add] Bound-checked terminal scrolling. 2025-09-20 15:51:55 +01:00
846b8595f4 [Add] Blinking terminal cursor. 2025-09-20 14:13:36 +01:00
2d79aba17a [Add] Window focus and event routing. 2025-09-20 14:05:00 +01:00
8a902d3034 [Add] Desktop and draggable UI windows. 2025-09-20 13:48:12 +01:00
1bce18e993 [Change] Render terminal conte in UI window. 2025-09-20 13:06:13 +01:00
a0c5eab1cf [Add] Implement basic UI windowing system. 2025-09-20 12:30:57 +01:00
8cc30eaa17 [Add] Implement initial interactive terminal. 2025-09-20 03:46:38 +01:00
f86015736d [Add] Text rendering. 2025-09-20 03:16:59 +01:00
c3ebd0e501 [Add] Initialise SDL and OpenGL window. 2025-09-20 01:39:32 +01:00
01e6d432a4 [Add] Initial project structure. 2025-09-20 01:03:03 +01:00