sscharter 0.2.2 → 0.3.0

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: d910ec574007b1cb1500a42a871e586666a358e736c211e1191414491f0279e7
4
- data.tar.gz: eb7888975a5b9d4fdaad36bc5ccd165b17b9ac750937f69d9086f9c44d473dc1
3
+ metadata.gz: 4e016849d4638b4a228dbefaf3d770a571c52b5d23b8a7a4e19c344f6fd91d9e
4
+ data.tar.gz: 7210246753c60a6f5873ae82ba9d9abdcea3e8301b08ba92ab6231f01060ef9a
5
5
  SHA512:
6
- metadata.gz: 06c443975c5f6d858f052623fa32890e7bc5808c0359d566142fe02e7030c267fcb97a4b4a8159ffcd9192308aac76cf3dc70c1e18be84d989ff2f2c35a39b84
7
- data.tar.gz: f59447ecfc433ae851969f1a2f4ffb76e9d63c9bb9a5598d2d06114c5912fcee4a4486071c9495c0b666b5813442eb7350638d0f52c78745278d157b32d938fa
6
+ metadata.gz: d79d0dd40fa573ea967223a8e5573f48e9e019374cfc294070efff83fe71f6732fdbaa81ce3f249987a9875e41fdeb2424f5ff6eac6fb9a16ca8c8769b30cc61
7
+ data.tar.gz: 87f8f7e56ef2ecc61e07fc09d35baad818b6105e5ea193766c5599c1041fd936b877f8e3f1173f0ec13f39d178bf09911893a43b958d1b21f58bebb7d1810c4a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sscharter (0.2.2)
4
+ sscharter (0.3.0)
5
5
  filewatcher (~> 2.0)
6
6
  launchy (~> 2.5)
7
7
  rubyzip (~> 2.3)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sunniesnow
4
4
  class Charter
5
- VERSION = "0.2.2"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
data/lib/sscharter.rb CHANGED
@@ -312,10 +312,11 @@ class Sunniesnow::Charter
312
312
  @current_offset = nil
313
313
  @current_beat = nil
314
314
  @bpm_changes = nil
315
- @tip_point_mode = :none
316
- @current_tip_point = 0
315
+ @tip_point_mode_stack = [:none]
316
+ @current_tip_point_stack = []
317
+ @tip_point_peak = 0
317
318
  @current_duplicate = 0
318
- @tip_point_start_to_add = nil
319
+ @tip_point_start_to_add_stack = [nil]
319
320
  @groups = [@events]
320
321
  end
321
322
 
@@ -410,7 +411,7 @@ class Sunniesnow::Charter
410
411
  def tip_point_chain *args, preserve_beat: true, **opts, &block
411
412
  tip_point :chain, *args, **opts do
412
413
  group preserve_beat: preserve_beat, &block
413
- end.tap { @current_tip_point += 1 }
414
+ end#.tap { @tip_point_peak += 1 }
414
415
  end
415
416
  alias tp_chain tip_point_chain
416
417
 
@@ -421,6 +422,13 @@ class Sunniesnow::Charter
421
422
  end
422
423
  alias tp_drop tip_point_drop
423
424
 
425
+ def tip_point_none preserve_beat: true, &block
426
+ tip_point :none do
427
+ group preserve_beat: preserve_beat, &block
428
+ end
429
+ end
430
+ alias tp_none tip_point_none
431
+
424
432
  def group preserve_beat: true, &block
425
433
  raise ArgumentError, 'no block given' unless block
426
434
  @groups.push result = []
@@ -439,19 +447,19 @@ class Sunniesnow::Charter
439
447
  result
440
448
  end
441
449
 
442
- def clear_tip_point
443
- TipPointError.ensure @tip_point_mode, :chain, :drop
444
- @tip_point_start_to_add = nil
445
- @tip_point_mode = :none
446
- end
447
-
448
450
  def tip_point mode, *args, **opts, &block
449
- TipPointError.ensure @tip_point_mode, :none
450
- @tip_point_mode = mode
451
- @tip_point_start_to_add = TipPointStart.new *args, **opts
451
+ @tip_point_mode_stack.push mode
452
+ if mode == :none
453
+ @current_tip_point_stack.push nil
454
+ else
455
+ @tip_point_start_to_add_stack.push TipPointStart.new *args, **opts
456
+ @current_tip_point_stack.push @tip_point_peak
457
+ @tip_point_peak += 1
458
+ end
452
459
  result = block.()
453
- @tip_point_start_to_add = nil
454
- @tip_point_mode = :none
460
+ @tip_point_start_to_add_stack.pop
461
+ @tip_point_mode_stack.pop
462
+ @current_tip_point_stack.pop
455
463
  result
456
464
  end
457
465
 
@@ -460,13 +468,14 @@ class Sunniesnow::Charter
460
468
  event = Event.new type, @current_beat, duration_beats, @bpm_changes, **properties
461
469
  @groups.each { _1.push event }
462
470
  return event unless event.tip_pointable?
463
- case @tip_point_mode
471
+ case @tip_point_mode_stack.last
464
472
  when :chain
465
473
  push_tip_point_start event
466
- @tip_point_start_to_add = nil
474
+ @tip_point_start_to_add_stack[-1] = nil
467
475
  when :drop
468
476
  push_tip_point_start event
469
- @current_tip_point += 1
477
+ @current_tip_point_stack[-1] = @tip_point_peak
478
+ @tip_point_peak += 1
470
479
  when :none
471
480
  # pass
472
481
  end
@@ -474,8 +483,8 @@ class Sunniesnow::Charter
474
483
  end
475
484
 
476
485
  def push_tip_point_start start_event
477
- start_event[:tip_point] = @current_tip_point.to_s
478
- tip_point_start = @tip_point_start_to_add&.get_start_placeholder start_event
486
+ start_event[:tip_point] = @current_tip_point_stack.last.to_s
487
+ tip_point_start = @tip_point_start_to_add_stack.last&.get_start_placeholder start_event
479
488
  @groups.each { _1.push tip_point_start } if tip_point_start
480
489
  end
481
490
 
@@ -543,7 +552,7 @@ class Sunniesnow::Charter
543
552
  else
544
553
  raise ArgumentError, 'direction must be a symbol or a number'
545
554
  end
546
- event :flick, x: x, y: y, angle: direction, text: text.to_s
555
+ event :flick, x: x.to_f, y: y.to_f, angle: direction, text: text.to_s
547
556
  end
548
557
  alias f flick
549
558
 
data/tutorial/tutorial.md CHANGED
@@ -701,6 +701,13 @@ end
701
701
  transform(notes) { translate 25, 25 }
702
702
  ```
703
703
 
704
+ > Because argument of `rotate` is in radians,
705
+ > you may want to use the Math constant $\pi$.
706
+ > In Ruby, it is `Math::PI`.
707
+ > If you use this constant a lot, you may want to write `include Math`
708
+ > at the beginning of the source codes file so that you can just write `PI`
709
+ > instead of `Math::PI` every time.
710
+
704
711
  ### Navigate among beats
705
712
 
706
713
  You have already learned how to use `beat` to proceed the current beat
@@ -853,33 +860,46 @@ in the call of `tip_point_chain` or `tip_point_drop`.
853
860
  The beat speed may be specified as a float number,
854
861
  and this is the only case where something related to beats is not preferred to be specified as a rational number.
855
862
 
856
- We can categorize the four ways into a table:
863
+ Besides the two methods `tip_point_chain` and `tip_point_drop`,
864
+ there is another method `tip_point_none` (abbreviated as `tp_none`)
865
+ for you to specify that those events in the code block are not connected by tip points.
866
+ This is useful when you nest those methods inside each other.
867
+ Different from `tip_point_chain` and `tip_point_drop`,
868
+ the method `tip_point_none` does not take any arguments
869
+ (besides `preserve_beat`, which will be mentioned later).
870
+
871
+ We can summarize all of them in the following table:
857
872
 
858
873
  <table>
859
874
  <tr>
860
875
  <th>Method</th>
861
876
  <td><code>tip_point_chain</code></td>
862
877
  <td><code>tip_point_drop</code></td>
878
+ <td><code>tip_point_none</code></td>
863
879
  </tr>
864
880
  <tr>
865
881
  <th><code>relative_time</code></th>
866
882
  <td><code>tip_point_chain x=0, y=0, relative_time=0.0, relative: true</code></td>
867
883
  <td><code>tip_point_drop x=0, y=0, relative_time=0.0, relative: true</code></td>
884
+ <td></td>
868
885
  </tr>
869
886
  <tr>
870
887
  <th><code>speed</code></th>
871
888
  <td><code>tip_point_chain x=0, y=0, relative: true, speed:</code></td>
872
889
  <td><code>tip_point_drop x=0, y=0, relative: true, speed:</code></td>
890
+ <td></td>
873
891
  </tr>
874
892
  <tr>
875
893
  <th><code>relative_beat</code></th>
876
894
  <td><code>tip_point_chain x=0, y=0, relative: true, relative_beat:</code></td>
877
895
  <td><code>tip_point_drop x=0, y=0, relative: true, relative_beat:</code></td>
896
+ <td></td>
878
897
  </tr>
879
898
  <tr>
880
899
  <th><code>beat_speed</code></th>
881
900
  <td><code>tip_point_chain x=0, y=0, relative: true, beat_speed:</code></td>
882
901
  <td><code>tip_point_drop x=0, y=0, relative: true, beat_speed:</code></td>
902
+ <td></td>
883
903
  </tr>
884
904
  </table>
885
905
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sscharter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ulysses Zhan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-08 00:00:00.000000000 Z
11
+ date: 2023-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip