bestguigui_lab 0.14.1 → 0.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef2f3f88c26af654bbcc041f8bd7fc933a63c5609d747d97a7a293ddf76675ec
4
- data.tar.gz: 788af1255f57430851b9c540cece24285f318ea815ec509b3a846ce314e0180b
3
+ metadata.gz: ccc420dcc4710f176292b2cec9b80a01ceed0cc297073dfddf847c2ca12ac65f
4
+ data.tar.gz: 940b1c9e78ecdb11bb51ed75371ba38f72c4960730decf85eb231b5c2db62002
5
5
  SHA512:
6
- metadata.gz: 54e63a9a9e6e8db8553290ee3b00dae55b774a8f935b164574af1504e5577683886bcea05f8c1a7c39b53436e479afbc5d1d7d3fe32fde3b287630027176b0fb
7
- data.tar.gz: 941c362b66dc200c264f13fa6694a9c359f183a0de09784e4fcc1bdf438e99c11413b64d83678adc05de87c8ad3be51454c68fd3fa246d70873beb48dbc9e803
6
+ metadata.gz: d21defb2e306380d7fbb4d6a26dd7679dabdd97e89405c34217f4021a1c5f06148a8d8fe39f3618f180e846eca0398f66ed14c76872439504adddb3292e06460
7
+ data.tar.gz: bdfee9d22037dd9c3b37e857e67665cb8b7b4f9e617d25a491c181a029de19ef7fc99b06c32f01da79a34f3543b390f3878e4b3ddc8f4051eec41233234247b2
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bestguigui
4
- # Lit le temps d'une ou deux GLTFAnimation (pendant une transition) et
5
- # renvoie la pose locale resultante — fondu enchaine entre les deux le
6
- # temps de la transition, jamais de coupure nette d'une animation a
7
- # l'autre. GLTFModel#play/#update s'en servent directement.
4
+ # Lit le temps d'une GLTFAnimation et renvoie sa pose locale — fondu
5
+ # enchaine (en temps reel, quel que soit speed) depuis la pose FIGEE de
6
+ # l'animation precedente au moment du #play, jamais depuis une pose
7
+ # qu'on continuerait a faire avancer/boucler pendant le fondu (ca
8
+ # blend deux cibles mouvantes, incoherent des que speed est eleve).
8
9
  class GLTFAnimator
9
10
  attr_accessor :speed
10
11
 
@@ -12,22 +13,15 @@ module Bestguigui
12
13
  @current = nil
13
14
  @time = 0.0
14
15
  @loop = true
15
- @previous = nil
16
- @previous_time = 0.0
17
- @previous_loop = true
16
+ @previous_pose = nil
18
17
  @transition_duration = 0.0
19
18
  @transition_elapsed = 0.0
20
19
  @speed = speed
21
20
  end
22
21
 
23
- # loop: rejoue en boucle une fois la fin atteinte. transition: duree
24
- # (secondes) du fondu enchaine depuis l'animation en cours ; 0 = coupe
25
- # net (par defaut pour la toute premiere animation, rien avant elle).
22
+ # transition: duree reelle (secondes) du fondu, independante de speed.
26
23
  def play(animation, loop: true, transition: 0.0)
27
- transitioning = transition.positive? && @current
28
- @previous = transitioning ? @current : nil
29
- @previous_time = @time
30
- @previous_loop = @loop
24
+ @previous_pose = transition.positive? && @current ? pose : nil
31
25
  @current = animation
32
26
  @loop = loop
33
27
  @time = 0.0
@@ -39,24 +33,20 @@ module Bestguigui
39
33
  return unless @current
40
34
 
41
35
  @time = advance_time(@time, dt * @speed, @current, @loop)
42
- return unless @previous
36
+ return unless @previous_pose
43
37
 
44
- @previous_time = advance_time(@previous_time, dt * @speed, @previous, @previous_loop)
45
38
  @transition_elapsed += dt
46
- @previous = nil if @transition_elapsed >= @transition_duration
39
+ @previous_pose = nil if @transition_elapsed >= @transition_duration
47
40
  end
48
41
 
49
- # Pose locale courante, fondue enchainee si une transition est en
50
- # cours — Hash node => {translation:/rotation:/scale: => [...]},
51
- # partiel (seuls les noeuds/proprietes reellement animes ici).
52
42
  def pose
53
43
  return {} unless @current
54
44
 
55
45
  current_pose = @current.local_pose_at(@time)
56
- return current_pose unless @previous
46
+ return current_pose unless @previous_pose
57
47
 
58
48
  blend_t = @transition_duration.zero? ? 1.0 : (@transition_elapsed / @transition_duration).clamp(0.0, 1.0)
59
- blend_poses(@previous.local_pose_at(@previous_time), current_pose, blend_t)
49
+ blend_poses(@previous_pose, current_pose, blend_t)
60
50
  end
61
51
 
62
52
  private
@@ -79,9 +69,6 @@ module Bestguigui
79
69
  (from.keys | dest.keys).to_h { |path| [path, blend_property(path, from[path], dest[path], progress)] }
80
70
  end
81
71
 
82
- # Si une seule des deux animations definit cette propriete pour ce
83
- # noeud, pas de vraie valeur "avant" a interpoler — on la garde telle
84
- # quelle plutot que d'inventer une pose de depart arbitraire.
85
72
  def blend_property(path, from, dest, progress)
86
73
  return dest unless from
87
74
  return from unless dest
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bestguigui
4
- VERSION = '0.14.1'
4
+ VERSION = '0.14.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bestguigui_lab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1
4
+ version: 0.14.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bestguigui