Commit Graph

53 Commits

Author SHA1 Message Date
RadsammyT eeccb7421b feat: LuaJIT Animations (#1001)
## What are the changes about?
TL;DR:
![ly_meme](/attachments/f4c3a93b-6ede-42ab-a351-292e2105d4e2)

Slaps the entire LuaJIT runtime onto Ly, allowing for the creation of custom dynamic animations like GameOfLife, ColorWave, Doom, etc.
This PR adds the [ziglua](https://github.com/natecraddock/ziglua?ref=zig-0.16) dependency for its zig bindings and considerable buildtime config (mainly lua version selection).

### Example
 <video src="/attachments/3f91cf72-ae24-459c-8ef6-099f71e866fd" title="Screencast_20260519_172320" controls></video>
```lua
ly.frame_delay = 5
local timer = 0
local clock = os.clock()
local clock_diff = 0
function draw()
	timer = timer + 1
	byte = string.byte(' ')
	clock_diff = os.clock() - clock
	clock = os.clock()
	timer = timer + clock_diff
	for x = 0, ly.width-1 do
		for y = 0, ly.height-1 do
			local xc = 0xFF
			if x < 255 then xc = ((x + math.floor(timer / 2)) * 3) % 255 else xc = 0 end
			local yc = 0xFF
			if y < 255 then yc = ((y) * 3) % 255 else yc = 0 end
			ly.putCell(byte, xc, bit.bor(xc, yc), x, y)
		end
	end
end
```

### The API

The API that Ly gives to the user is minimal. A table is globally available, named `ly`, which provides the following:

| Member  | Purpose  |
|---------|---------|
| `ly.width` & `ly.height` | Respective Width/Height from the `TerminalBuffer` |
| `ly.putCell(byte, fg, bg, x, y)` | Literally `Cell.init(byte, fg, bg).put(x, y)`.|
| `ly.clock()` | The current real-time, in microseconds. |

### Error Handling

On a Lua Error, Ly won't quit but will instead paint the entire background red. The lua error in question can be found in the Ly log file and on-screen.
```log
2026-05-19 16:13:40 [err/Lua] Error (Cannot call draw()): attempt to call a nil value
2026-05-19 11:05:51 [err/Lua] Lua Error: ...dsammyt/programming/probe/ly/scratch/testConfig/test.lua:30: bad argument #1 to 'ipairs' (table expected, got number)
```

## Pre-requisites

- [X] I have tested & confirmed the changes work locally
- [X] I have run `zig fmt` throughout my changes

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/1001
Reviewed-by: AnErrupTion <anerruption+codeberg@disroot.org>
2026-06-19 20:05:00 +02:00
AnErrupTion 4c066ce564
Handle termbox2 errors
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-05-17 13:26:46 +02:00
AnErrupTion 78794b3e10
Stream dur reading instead of reading all at once
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-05-15 23:22:50 +02:00
AnErrupTion 741e9e0345
Use correct naming convention for functions in DurFile.zig
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-05-12 20:35:17 +02:00
Titanium Brain b3830d5bb6 fix(dur): apply correct offset for animations bigger than the terminal (#966)
Animations bigger than the rendering area would have an alignment to the
top left instead of center.

## What are the changes about?

Fixes incorrect offset calculations for dur movies bigger than the screen.

## What existing issue does this resolve?
N/A

## Pre-requisites

- [x] I have tested & confirmed the changes work locally
- [x] I have run `zig fmt` throughout my changes

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/966
Reviewed-by: AnErrupTion <anerruption+codeberg@disroot.org>
2026-05-09 21:06:45 +02:00
Titanium Brain b8ae126623 Apply the typestate pattern to DurFormat (#972) 2026-05-04 12:34:32 +02:00
AnErrupTion 80d4b114f3
Fix 32-bit issues on Ly's side
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-04-26 18:37:33 +02:00
AnErrupTion 5edf5251f6 Update to Zig 0.16.0 (#962)
Signed-off-by: AnErrupTion <anerruption@disroot.org>

## What are the changes about?

Ports the code base to Zig 0.16.0.

## What existing issue does this resolve?

N/A

## Pre-requisites

- [x] I have tested & confirmed the changes work locally
- [x] I have run `zig fmt` throughout my changes

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/962
2026-04-25 17:37:34 +02:00
AnErrupTion 60e3380375
Switch to single-instance Widget model
And make widget() functions return pointers to widgets instead of just
widgets

Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-03-21 16:19:33 +01:00
AnErrupTion acac884cfe
Add support for local keybinds
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-03-17 22:58:39 +01:00
AnErrupTion 64539f4342
Split UI code into ly-ui library
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-03-17 21:44:33 +01:00
AnErrupTion 5564fed664
Add Widget.calculateTimeout function
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-02-12 00:27:07 +01:00
AnErrupTion 7c7aed9cb2
Make animation timeout independent of event loop
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-02-11 23:51:32 +01:00
AnErrupTion 6773f74788
Add widget display name to improve logging
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-02-11 21:51:07 +01:00
AnErrupTion d268d5bb45
Add the cascade animation as a separate widget
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-02-10 17:43:55 +01:00
AnErrupTion 207b352888
Add central Widget struct + clean up code
In particular, move all termbox2 usage to TerminalBuffer.zig &
keyboard.zig

Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-02-10 00:22:27 +01:00
AnErrupTion fd81da7cbd
Organise imports
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-02-07 17:01:11 +01:00
AnErrupTion 1a04a608a1
Remove dummy animation
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-01-31 22:51:44 +01:00
AnErrupTion 2e04ea4d79
Add time, severity & category in logs
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-01-31 11:17:36 +01:00
hynak a4076b83da [dur] Add support for alignments and negative offsets + Ly logo (#893)
## What are the changes about?
Add support for letting a user use a negative offset (#880), alignment, and logo. Below is example of the logo file, I hope it is what was request :). It has no padding so a user can move the alignment and offset to get it how they want on screen.

This technically is good to go, except I didn't upload the logo file as I'm not sure where to add the animation file to get it to here: $CONFIG_DIRECTORY/ly/example.dur

![logo-preview](/attachments/5a829dbd-7708-4d0a-9841-d024902ede68)

## What existing issue does this resolve?

#880

## Pre-requisites

- [x] I have tested & confirmed the changes work locally

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/893
Reviewed-by: AnErrupTion <anerruption@disroot.org>
Co-authored-by: hynak <hynak@noreply.codeberg.org>
Co-committed-by: hynak <hynak@noreply.codeberg.org>
2026-01-25 23:08:42 +01:00
Theo Gaige 2e7bb3eb58 Use buf_height and buf_width in Matrix.draw() (#903)
## What are the changes about?

buf_height is declared at the start of the draw() function of the
Matrix animation but both buf_height and self.terminal_buffer.height are
used in the function. replace every occurence of
self.terminal_buffer.height by buf_height for consistency.

The same goes for buf_width and self.terminal_buffer.width.

no functionnal changes

## What existing issue does this resolve?

N/A

## Pre-requisites

- [x] I have tested & confirmed the changes work locally

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/903
Reviewed-by: AnErrupTion <anerruption@disroot.org>
Co-authored-by: Theo Gaige <theo.gaige@free.fr>
Co-committed-by: Theo Gaige <theo.gaige@free.fr>
2025-12-29 23:39:10 +01:00
AnErrupTion e0692885c5
Make delay floating point in dur format
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-12-06 14:34:47 +01:00
AnErrupTion a9ff0a6d07
Only support dur format v7, set -1 color to black
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-12-06 10:05:41 +01:00
hynak 7e18d906c4 [Feature] Add support for .dur file format and animations (closes #719) (#833)
Adds support for durdraw's .dur file format. Supports ascii, animations, and 16/256 color display.

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/833
Reviewed-by: AnErrupTion <anerruption@disroot.org>
Co-authored-by: hynak <hynak@noreply.codeberg.org>
Co-committed-by: hynak <hynak@noreply.codeberg.org>
2025-12-05 19:46:42 +01:00
Matthew Rothlisberger a7ff18aa16 Add option for eight-color terminal output (#802)
Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/802
Reviewed-by: AnErrupTion <anerruption@disroot.org>
Co-authored-by: Matthew Rothlisberger <mattjrothlis@gmail.com>
Co-committed-by: Matthew Rothlisberger <mattjrothlis@gmail.com>
2025-08-03 23:37:53 +02:00
Matthew Rothlisberger 99f3ab96ba changes fire parameters 2025-07-07 21:02:58 -04:00
Matthew Rothlisberger 2a8e221e80 improves fire gradient in true color mode 2025-07-07 21:02:58 -04:00
Matthew Rothlisberger 1c5686ea54 further improves fire behavior 2025-07-07 21:02:58 -04:00
Matthew Rothlisberger ab23631e66 reimplements PSX Doom fire animation; adds flame height control 2025-07-07 21:02:58 -04:00
thoxy a5e38e2ce5 Remove color randomization from Game of Life animation 2025-06-17 12:35:22 +02:00
thoxy 5e8e0af59c Remove redundant comments and type annotations 2025-05-31 17:56:16 +02:00
thoxy 78ed67b35f Merge branch 'master' into master 2025-05-30 20:07:32 +02:00
thoxy fa46155f72 make gameoflife more configurable and fix pull reviews 2025-05-30 20:04:52 +02:00
AnErrupTion 67a4dd8f9d
Rewrite DOOM animation (fixes #692)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-05-30 16:11:14 +02:00
thoxy 98af3a98c8 Add GameOfLife Animation 2025-05-27 07:07:37 +02:00
AnErrupTion 13ba52319c
Clean termbox2 usage + fix animation bug
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-16 11:40:27 +01:00
AnErrupTion 1672d4a9ec
Make main code less directly dependent on termbox2
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-16 11:17:38 +01:00
AnErrupTion e0ed1b4eb1
Add animation framework
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-16 10:54:06 +01:00
AnErrupTion 4e859e56cb
Allow modifying DOOM animation fire colors (closes #239)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-06 20:40:53 +01:00
AnErrupTion d80ec8fd1f
Allow changing matrix animation min/max codepoints (closes #615)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-06 19:48:11 +01:00
AnErrupTion 593a775148
Use unsigned integers only in Matrix animation
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-06 19:36:42 +01:00
AnErrupTion 6cb102257c
Fix Doom & Matrix animation + bug in migrator
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-06 15:27:38 +01:00
AnErrupTion f013af0dde
Fix segmentation fault when using color mix after auth
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-06 14:31:11 +01:00
AnErrupTion d0ccaa4d69
Enable true color output (closes #705)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-06 12:47:28 +01:00
AnErrupTion 24599368df
Minor changes in color mix animation
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-05 22:06:56 +01:00
AnErrupTion c9a416b8a2 Merge branch 'master' into winlith/colormix 2025-03-05 20:53:53 +00:00
AnErrupTion bebccf4d5a
Support Zig 0.14.0 only (with 1 downstream dependency fork)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2025-03-05 19:42:00 +01:00
winlith f5f7422d82 color mix animation 2025-01-17 22:37:48 +01:00
AnErrupTion 2c428f5537
Reduce dependence on tb_cell and tb_cell_buffer()
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2024-08-05 11:08:51 +02:00
AnErrupTion c1f1c8f5c1
Use usize instead of u64 in most places for better 32-bit compatibility
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2024-07-29 13:46:14 +02:00