#!/bin/bash

# reinhard@finalmedia.de
# So 28. Jun 21:30:21 CEST 2026

# gibt steuerbefehle auf stdout aus.
# mittels named pipe in descriptor 4
# von fsplat einbringen.

# Startwerte der Kamera
x=0.0; y=0.0; h=0.0
drehung=0; pitch=0; zoom=100

# Schrittweiten
step=0.1
angle_step=2

# Setzt das Terminal in den Rohdaten-Modus, um Tasten sofort abzufangen
stty -icanon -echo
trap "stty cooked echo; exit" EXIT

# Initiale Position senden
echo "P $x $y $h $drehung $pitch $zoom"

while true; do
    # Lese 1 bis 3 Zeichen (für Escape-Sequenzen der Pfeiltasten)
    read -r -n 1 key
    if [[ "$key" == $'\e' ]]; then
        read -r -n 2 -t 0.01 key
    fi

    case "$key" in
        "[A") h=$(bc -l <<< "$h + $step") ;; 				# Pfeiltaste Hoch -> Vorwärts
        "[B") h=$(bc -l <<< "$h - $step") ;; 				# Pfeiltaste Runter -> Rückwärts
        "[D") x=$(bc -l <<< "$x - $step") ;; 				# Pfeiltaste Links -> Links
        "[C") x=$(bc -l <<< "$x + $step") ;; 				# Pfeiltaste Rechts -> Rechts
        "a"|"A") drehung=$(( (drehung - angle_step + 360) % 360 )) ;; 	# A Links drehen
        "d"|"D") drehung=$(( (drehung + angle_step) % 360 )) ;;       	# D Rechts drehen
        "w"|"W") pitch=$(( pitch + angle_step )) ;;                  	# W Nach oben schauen
        "s"|"S") pitch=$(( pitch - angle_step )) ;;                  	# S Nach unten schauen
        "+") zoom=$(( zoom+1 )) ;;					# + Reinzoomen
        "-") zoom=$(( zoom-1 )) ;;					# - Rauszoomen
        "q"|"Q") stty cooked echo; exit ;;                           	# Q Beenden
    esac

    # Befehl an den Renderer ausgeben
    echo "P $x $y $h $drehung $pitch $zoom"
done
