emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/pacmacs 95cce606fd 024/472: Support for Aseprite animation


From: ELPA Syncer
Subject: [nongnu] elpa/pacmacs 95cce606fd 024/472: Support for Aseprite animation format. Close #16
Date: Thu, 6 Jan 2022 21:59:02 -0500 (EST)

branch: elpa/pacmacs
commit 95cce606fd2661e762abfe45fc58a577862aa8ef
Author: rexim <reximkut@gmail.com>
Commit: rexim <reximkut@gmail.com>

    Support for Aseprite animation format. Close #16
---
 pacman-anim.el | 32 ++++++++++++++++++++++++++++++++
 pacman.el      |  8 ++------
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/pacman-anim.el b/pacman-anim.el
index 82418f7204..6d348936dc 100644
--- a/pacman-anim.el
+++ b/pacman-anim.el
@@ -1,3 +1,35 @@
+
+(defun pacman-make-anim (frames)
+  (list :frames frames
+        :current-frame 0))
+
+(defun pacman-load-anim (aseprite-json-file)
+  (let* ((aseprite-json (json-read-file aseprite-json-file))
+         (aseprite-frames (cdr (assoc 'frames aseprite-json))))
+    (pacman-make-anim
+     (mapcar 'pacman-convert-aseprite-frame
+             (pacman-aseprite-sort-frame-hack aseprite-frames)))))
+
+(defun pacman-aseprite-frame-get-order (aseprite-frame)
+  (let ((frame-name (symbol-name (car aseprite-frame))))
+    (string-match "\\([0-9]+\\)\\.ase$" frame-name)
+    (string-to-number (match-string 1 frame-name))))
+
+(defun pacman-aseprite-sort-frame-hack (aseprite-frames)
+  (sort aseprite-frames
+        '(lambda (f1 f2)
+           (let ((o1 (pacman-aseprite-frame-get-order f1))
+                 (o2 (pacman-aseprite-frame-get-order f2)))
+             (< o1 o2)))))
+
+(defun pacman-convert-aseprite-frame (aseprite-frame)
+  (let* ((frame (cdr (assoc 'frame (cdr aseprite-frame))))
+         (x (cdr (assoc 'x frame)))
+         (y (cdr (assoc 'y frame)))
+         (w (cdr (assoc 'w frame)))
+         (h (cdr (assoc 'h frame))))
+    (list x y w h)))
+
 (defun pacman-anim-get-frame (anim)
   (let ((frames (plist-get anim :frames))
         (current-frame (plist-get anim :current-frame)))
diff --git a/pacman.el b/pacman.el
index fd57777c72..f7b0325bbd 100644
--- a/pacman.el
+++ b/pacman.el
@@ -42,15 +42,11 @@
       (list :row 0
             :column 0
             :direction 'right
-            :animation (list :frames (list '(0   0 40 40)
-                                           '(40  0 40 40)
-                                           '(80  0 40 40)
-                                           '(120 0 40 40))
-                             :current-frame 0)))
+            :animation (pacman-load-anim "sprites/Red-Ghost-Down.json")))
 
 (defvar pacman-resource nil)
 (setq pacman-resource
-      (pacman-load-resource "sprites/Pacman-Chomping-Right.png"))
+      (pacman-load-resource "sprites/Red-Ghost-Down.png"))
 
 (define-derived-mode pacman-mode special-mode "pacman-mode"
   (define-key pacman-mode-map (kbd "<up>") 'pacman-up)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]