summaryrefslogtreecommitdiff
path: root/src/wasp-obs.el
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2024-03-26 23:34:28 -0400
committerLLLL Colonq <llll@colonq>2024-03-26 23:34:28 -0400
commit782c667e824d426b5443591afeefc37d0ae17785 (patch)
treeae5d232d598e2008bc2cadf32157a4d937b01951 /src/wasp-obs.el
parent8e9db9303fc5d72ddfdc9ab4a9adaa8299e6e21a (diff)
We streamed for 9 hours and (mostly) fixed everything.
Diffstat (limited to 'src/wasp-obs.el')
-rw-r--r--src/wasp-obs.el116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/wasp-obs.el b/src/wasp-obs.el
new file mode 100644
index 00000000..3c960f12
--- /dev/null
+++ b/src/wasp-obs.el
@@ -0,0 +1,116 @@
+;;; wasp-obs --- OBS controls -*- lexical-binding: t; -*-
+;;; Commentary:
+;;; Code:
+
+(require 'dash)
+(require 's)
+(require 'f)
+(require 'wasp-utils)
+(require 'wasp-bus)
+
+(defun w/obs-toggle-modclonk ()
+ "Toggle the MODCLONK panel."
+ (w/pub '(monitor obs toggle) (list "MODCLONK" "MODCLONK Chibi")))
+
+(defun w/obs-toggle-live-reaction ()
+ "Toggle the Live LCOLONQ Reaction panel."
+ (w/pub '(monitor obs toggle) (list "Live LCOLONQ Reaction" "Live Reaction")))
+
+(defun w/obs-toggle-live-friend-reaction ()
+ "Toggle the Live Friend Reaction panel."
+ (w/pub '(monitor obs toggle) (list "Live Friend Reaction" "Live Friend Reaction Group")))
+
+(defun w/obs-toggle-thug-life ()
+ "Toggle the Thug Life overlay."
+ (w/pub '(monitor obs toggle) (list "Thug Life" "Thug Life Video")))
+
+(defun w/obs-toggle-intj-stare ()
+ "Toggle the INTJ Stare overlay."
+ (w/pub '(monitor obs toggle) (list "INTJ" "INTJ Image")))
+
+(defun w/obs-toggle-critical-hit ()
+ "Toggle the Critical Hit overlay."
+ (w/pub '(monitor obs toggle) (list "Critical Hit Wrapper" "Critical Hit")))
+
+(defun w/obs-toggle-vhs ()
+ "Toggle the VHS overlay."
+ (w/pub '(monitor obs toggle) (list "VHS" "VHS Group")))
+
+(defun w/obs-toggle-saiyan ()
+ "Toggle the Super Saiyan overlay."
+ (w/pub '(monitor obs toggle) (list "Saiyan" "Saiyan Video")))
+
+(defun w/obs-toggle-persona4 ()
+ "Toggle the Persona 4 dialogue box."
+ (w/pub '(monitor obs toggle) (list "Persona 4" "Persona 4 Background")))
+
+(defun w/obs-toggle-explosion ()
+ "Toggle the explosion effect."
+ (w/pub '(monitor obs toggle) (list "Explosion" "Explosion Video")))
+
+(defun w/obs-set-clickbait-text (msg)
+ "Change the clickbait text to MSG."
+ (w/pub '(monitor obs set-text) (list "Red Arrow Text" (w/encode-string (s-trim msg)))))
+
+(defun w/obs-toggle-clickbait (&optional msg)
+ "Toggle the clickbait arrow.
+Optionally, change text to MSG."
+ (when msg
+ (w/obs-set-clickbait-text msg))
+ (w/pub '(monitor obs toggle) (list "Red Arrow" "Red Arrow Group")))
+
+(defun w/obs-toggle-chase-dreams ()
+ "Toggle the Chasing Dreams effect."
+ (w/pub '(monitor obs toggle) (list "Chasing Dreams" "Dreams")))
+
+(w/defstruct
+ w/obs-toggle
+ toggle
+ reset
+ (timer 0))
+
+(defun w/obs-activate-toggle-helper (toggle &rest args)
+ "Pass ARGS to the callback for TOGGLE and start its timer."
+ (unless (w/obs-toggle-timer toggle)
+ (apply (w/obs-toggle-toggle toggle) args))
+ (setf (w/obs-toggle-timer toggle) (w/obs-toggle-reset toggle)))
+
+(defvar w/obs-toggles
+ (list
+ (cons 'modclonk (w/make-obs-toggle :toggle #'w/obs-toggle-modclonk :reset 11))
+ (cons 'live-reaction (w/make-obs-toggle :toggle #'w/obs-toggle-live-reaction :reset 17))
+ (cons 'live-friend-reaction (w/make-obs-toggle :toggle #'w/obs-toggle-live-friend-reaction :reset 17))
+ (cons 'thug-life (w/make-obs-toggle :toggle #'w/obs-toggle-thug-life :reset 17))
+ (cons 'intj-stare (w/make-obs-toggle :toggle #'w/obs-toggle-intj-stare :reset 17))
+ (cons 'critical-hit (w/make-obs-toggle :toggle #'w/obs-toggle-critical-hit :reset 3))
+ (cons 'clickbait (w/make-obs-toggle :toggle #'w/obs-toggle-clickbait :reset 31))
+ (cons 'chase-dreams (w/make-obs-toggle :toggle #'w/obs-toggle-chase-dreams :reset 31))
+ ))
+
+(defun w/obs-activate-toggle (tnm &rest args)
+ "Pass ARGS to the callback for toggle symbol TNM and start its timer."
+ (when-let ((toggle (alist-get tnm w/obs-toggles)))
+ (apply #'w/obs-activate-toggle-helper toggle args)))
+
+(defun w/obs-handle-toggles ()
+ "Process all OBS toggle timers."
+ (--each w/obs-toggles
+ (when (w/obs-toggle-timer (cdr it))
+ (cl-decf (w/obs-toggle-timer (cdr it)))
+ (when (<= (w/obs-toggle-timer (cdr it)) 0)
+ (setf (w/obs-toggle-timer (cdr it)) nil)
+ (funcall (w/obs-toggle-toggle (cdr it)))))
+ ))
+
+(defvar w/obs-timer nil)
+(defun w/run-obs-timer ()
+ "Run the obs timer."
+ (when w/obs-timer
+ (cancel-timer w/obs-timer))
+ (w/obs-handle-toggles)
+ (setq
+ w/obs-timer
+ (run-with-timer 1 nil #'w/run-obs-timer)))
+
+(provide 'wasp-obs)
+;;; wasp-obs.el ends here