Ha it's a really cool mechanic indeed. Let me tell you what I think, I've never done it, but how I would process trying to do (don't take everything as the right answer I've never done it, I could be wrong on some things).
So first, seeing the demo, the fireball doesn't have any gravity physics (it doesn't fall), so it maybe more simple to do it with straight motions : it means rigidbody2d would be a nightmare to handle in this case (the physic engine somehow have randomness, so it will difficult to get a rectiligne motion).
How I would try to do it is by using a simple sprite2D (or animated sprite, whatever) with an area2d (and his collision shape) for both the fireball and the mirror.
The fireball sprite keep a vector motion, telling in which direction it is emmitted :
extends Sprite
const SPEED = 16
var direction = Vector2.ZERO
func _physics_process(delta):
position += direction * SPEED
Each mirror should emit a signal to the fireball ("area_entered"), telling in which normalized vector it should move. For example going down would be :
Vector2.DOWN = Vector2(0,1) # remember Y is reversed
Somehow each mirror should check in wich direction the fireball should enter, and in which new direction it should change. There are 4 possibilities keep those in a dictionary if needed :
extends Sprite
var check = {}
func register(enter:Vector2,leave:Vector2):
var queue = {}
queue.enter = enter
queue.leave = leave
return queue
func _ready():
check.A = register(Vector2.LEFT ,Vector2.DOWN)
check.B = register(Vector2.RIGHT ,Vector2.UP)
check.C = register(Vector2.UP ,Vector2.LEFT)
check.C = register(Vector2.DOWN ,Vector2.RIGHT)
prints("check=",check)
For the rest the difficult part is to understand how signals works, also having a class_name for the fireball and the mirror would be another possibility to avoid other things interacting but colliding layer is more simplier (because only the fireball could enter on it)
Hope this will help you in the right direction, ask me anything if needed.
Don't forget those youtube goods tutorials on godot :
https://www.youtube.com/results?search_query=area2d+godot
https://www.youtube.com/results?search_query=signal+godot