6 ms·
more info pls.
by dioxide 5mo ago
more info pls.
- alex_x 5mo agothere is not much to brag about yet :'( About a year ago I was curious about building an ECS-based game engine with world simulations like in dwarf fortress, but obviously at much smaller scale while playing Starfield. Something cool started to materialise after tinkering so I thought why not turn it into a space-sim roguelike with a simulated living world. I use swift because it gives me fantastic devex with all its great type inference and macros + raylib gives me cross platform input handling / rendering and window management. C-interop setup is basically instant - you point compiler to c headers and the API becomes immediately visible on swift side As for swift ergonomics, I particularly love that I can now write very readable code, like: > world.addRelation(attacker, Attacks.self, target) > world.addRelation(player, Owns.self, sword) or > for (entity, position) in world.query(Position.self).with(Health.self, Velocity.self).without(Enemy.self) {}
- kenshi 5mo agoThis sounds cool. You mentioned Swift's macros - would you mind talking a bit how you are using them?
- alex_x 5mo agoa lot of cool-looking stuff in my ECS is supported by Swift parameter packs; however, once you start using them a lot you find limits pretty soon. One example: the following wouldn't compile in swift: func query<each T, each K>( _ body: ((repeat each T), (repeat each K)) -> Void ) { ... } so you kinda work around it with extra type wrappers but this looks ugly - I've been using macros to hide some of the ugliness away xD edit: the example is oversimplified just to show the point - in this example compiler can't really tell where T ends and K starts, so its logical; but I had more complex cases where a human would've been able to infer types correctly
- sivakon 5mo agoDo you use any bindings or directly use C functions (with a modulemap) in Swift?
- alex_x 5mo agoNo bindings, I wrote a few wrappers myself to make often used functions a bit more swifty, but otherwise its pretty smooth sailing