sscharter 0.3.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e016849d4638b4a228dbefaf3d770a571c52b5d23b8a7a4e19c344f6fd91d9e
4
- data.tar.gz: 7210246753c60a6f5873ae82ba9d9abdcea3e8301b08ba92ab6231f01060ef9a
3
+ metadata.gz: 8a943768e6ccb1b3d49ea613906e43cb2f67754163452b40ddca1a2bc79931ed
4
+ data.tar.gz: d2d6e47744b310cf86dca899136d26a7ed36b6322a663354be26b06c81de573e
5
5
  SHA512:
6
- metadata.gz: d79d0dd40fa573ea967223a8e5573f48e9e019374cfc294070efff83fe71f6732fdbaa81ce3f249987a9875e41fdeb2424f5ff6eac6fb9a16ca8c8769b30cc61
7
- data.tar.gz: 87f8f7e56ef2ecc61e07fc09d35baad818b6105e5ea193766c5599c1041fd936b877f8e3f1173f0ec13f39d178bf09911893a43b958d1b21f58bebb7d1810c4a
6
+ metadata.gz: d9895ab04396393eee863bb0cb8af4631e27af7c7c7f1b154dcac4da796a691dcaf35cba80ece174b1cda9332f245c8a7ad4ac23c8159888fb29cd677d52f802
7
+ data.tar.gz: 2104bc67acc80130c885388b495f89fd3ce3c23d75a82d2f82d8829f51f47e669c5ef1541616b82fb987eede8f5a39b52484ef6e12d9764371a1d815f6447fe8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sscharter (0.3.0)
4
+ sscharter (0.4.0)
5
5
  filewatcher (~> 2.0)
6
6
  launchy (~> 2.5)
7
7
  rubyzip (~> 2.3)
@@ -7,7 +7,7 @@ class Sunniesnow::Chart
7
7
  using Sunniesnow::Utils
8
8
 
9
9
  attr_accessor :title, :artist, :charter
10
- attr_accessor :difficulty_name, :difficulty_color, :difficulty
10
+ attr_accessor :difficulty_name, :difficulty_color, :difficulty, :difficulty_sup
11
11
  attr_reader :events
12
12
 
13
13
  def initialize
@@ -17,6 +17,7 @@ class Sunniesnow::Chart
17
17
  @difficulty_name = ''
18
18
  @difficulty_color = '#000000'
19
19
  @difficulty = ''
20
+ @difficulty_sup = ''
20
21
  @events = []
21
22
  end
22
23
 
@@ -28,6 +29,7 @@ class Sunniesnow::Chart
28
29
  difficultyName: @difficulty_name,
29
30
  difficultyColor: @difficulty_color,
30
31
  difficulty: @difficulty,
32
+ difficultySup: @difficulty_sup,
31
33
  events: @events
32
34
  }.to_json
33
35
  end
data/lib/sscharter/cli.rb CHANGED
@@ -176,10 +176,11 @@ module Sunniesnow::Charter::CLI
176
176
  port = port.to_i
177
177
  config = self.config
178
178
  server = WEBrick::HTTPServer.new Port: port, DocumentRoot: config[:build_dir]
179
- server.mount_proc "/#{config[:project_name]}.ssc" do |request, response|
180
- response['Content-Type'] = 'application/zip'
179
+ def server.service request, response
180
+ super
181
181
  response['Access-Control-Allow-Origin'] = '*'
182
- response.body = File.read File.join(config[:build_dir], "#{config[:project_name]}.ssc"), binmode: true
182
+ response['Cache-Control'] = 'no-cache'
183
+ response['Content-Type'] = 'application/zip' if request.path.end_with? '.ssc'
183
184
  end
184
185
  url = CGI.escape "http://localhost:#{port}/#{config[:project_name]}.ssc"
185
186
  filewatcher = Filewatcher.new [config[:files_dir], config[:sources_dir], *config[:include]]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sunniesnow
4
4
  class Charter
5
- VERSION = "0.3.0"
5
+ VERSION = "0.5.0"
6
6
  end
7
7
  end
data/lib/sscharter.rb CHANGED
@@ -363,6 +363,10 @@ class Sunniesnow::Charter
363
363
  @difficulty = difficulty.to_s
364
364
  end
365
365
 
366
+ def difficulty_sup difficulty_sup
367
+ @difficulty_sup = difficulty_sup.to_s
368
+ end
369
+
366
370
  def offset offset
367
371
  raise ArgumentError, 'offset must be a number' unless offset.is_a? Numeric
368
372
  @current_offset = offset.to_f
@@ -496,16 +500,17 @@ class Sunniesnow::Charter
496
500
  events.each { transform.apply _1 }
497
501
  end
498
502
 
499
- def duplicate events
503
+ def duplicate events, new_tip_points: true
500
504
  result = []
501
505
  events.each do |event|
506
+ next if event.type == :placeholder && !new_tip_points
502
507
  result.push event = event.dup
503
- if event[:tip_point]
508
+ if event[:tip_point] && new_tip_points
504
509
  event[:tip_point] = "#@current_duplicate #{event[:tip_point]}"
505
510
  end
506
511
  @groups.each { _1.push event }
507
512
  end
508
- @current_duplicate += 1
513
+ @current_duplicate += 1 if new_tip_points
509
514
  result
510
515
  end
511
516
 
@@ -556,7 +561,15 @@ class Sunniesnow::Charter
556
561
  end
557
562
  alias f flick
558
563
 
559
- def bg_note x, y, duration_beats = 0, text = ''
564
+ def bg_note x, y, duration_beats = 0, text = nil
565
+ if text.nil?
566
+ if duration_beats.is_a? String
567
+ text = duration_beats
568
+ duration_beats = 0
569
+ else
570
+ text = ''
571
+ end
572
+ end
560
573
  if !x.is_a?(Numeric) || !y.is_a?(Numeric) || !duration_beats.is_a?(Numeric)
561
574
  raise ArgumentError, 'x, y, and duration_beats must be numbers'
562
575
  end
@@ -582,7 +595,7 @@ class Sunniesnow::Charter
582
595
  event :big_text, duration_beats.to_r, text: text.to_s
583
596
  end
584
597
 
585
- %i[grid hexagon checkerboard diamond_grid pentagon turntable].each do |method_name|
598
+ %i[grid hexagon checkerboard diamond_grid pentagon turntable hexagram].each do |method_name|
586
599
  define_method method_name do |duration_beats = 0|
587
600
  unless duration_beats.is_a? Numeric
588
601
  raise ArgumentError, 'duration_beats must be a number'
@@ -605,6 +618,7 @@ class Sunniesnow::Charter
605
618
  result.difficulty_name = @difficulty_name
606
619
  result.difficulty_color = @difficulty_color
607
620
  result.difficulty = @difficulty
621
+ result.difficulty_sup = @difficulty_sup
608
622
  @events.each { result.events.push _1.to_sunniesnow }
609
623
  result
610
624
  end
data/tutorial/tutorial.md CHANGED
@@ -563,6 +563,7 @@ There are totally 7 different kinds of background patterns:
563
563
  | diamond grid | `diamond_grid duration_beats=0` |
564
564
  | pentagon | `pentagon duration_beats=0` |
565
565
  | turntable | `turntable duration_beats=0` |
566
+ | hexagram | `hexagram duration_beats=0` |
566
567
 
567
568
  Most of them only has one optional argument, specifying the duration.
568
569
  The big text is different in that it needs an additional required argument,
@@ -669,13 +670,14 @@ The transformation is done like this:
669
670
  > y'=\mathtt{yx}\cdot x+\mathtt{yy}\cdot y.
670
671
  > ```
671
672
 
672
- *Notice*: When doing spatial transformations,
673
- you do not need to worry about the direction of flick notes.
674
- They are taken care of as well.
675
-
676
- *Another notice*: For background patterns,
677
- they are ignored when doing spatial transformations.
678
- They are still affected by temporal transformations, though.
673
+ > [!NOTE]
674
+ > When doing spatial transformations,
675
+ > you do not need to worry about the direction of flick notes.
676
+ > They are taken care of as well.
677
+ >
678
+ > For background patterns,
679
+ > they are ignored when doing spatial transformations.
680
+ > They are still affected by temporal transformations, though.
679
681
 
680
682
  Therefore, you can also apply, say, a horizontal flip on the duplicated notes like this:
681
683
 
@@ -789,9 +791,10 @@ end
789
791
 
790
792
  ### BPM changes
791
793
 
792
- *Notice*: because *Big-D* does not have BPM changes,
793
- this part of the tutorial will not be used in the actual chart of *Big-D*.
794
- You may still try it out, though.
794
+ > [!NOTE]
795
+ > Because *Big-D* does not have BPM changes,
796
+ > this part of the tutorial will not be used in the actual chart of *Big-D*.
797
+ > You may still try it out, though.
795
798
 
796
799
  You can use `bpm` to set the BPM starting at the current beat.
797
800
 
@@ -918,7 +921,7 @@ For example, in the expression
918
921
  > ```
919
922
  >
920
923
  > the argument `speed:` is a keyword argument in the call of `tp_chain`.
921
- The value of the keyword argument is `100`.
924
+ > The value of the keyword argument is `100`.
922
925
 
923
926
  Knowing how to specify the position and time of the spawning of a tip point,
924
927
  then creating tip points is just as easy as filling events in the code block
@@ -958,16 +961,16 @@ transform duplicate notes do
958
961
  end
959
962
  ```
960
963
 
961
- *Tips*:
962
- Just like `group`, `tip_point_chain` and `tip_point_drop`
963
- may also not preserve beat.
964
- You can let them not preserve beat by specifying the keyword argument `preserve_beat: false`:
965
-
966
- ```ruby
967
- tp_chain 0, 100, speed: 100, preserve_beat: false do
968
- # notes...
969
- end
970
- ```
964
+ > [!NOTE]
965
+ > Just like `group`, `tip_point_chain` and `tip_point_drop`
966
+ > may also not preserve beat.
967
+ > You can let them not preserve beat by specifying the keyword argument `preserve_beat: false`:
968
+ >
969
+ > ```ruby
970
+ > tp_chain 0, 100, speed: 100, preserve_beat: false do
971
+ > # notes...
972
+ > end
973
+ > ```
971
974
 
972
975
  Now, the whole source codes file should look like this:
973
976
 
@@ -1009,11 +1012,21 @@ You may build the level file and play it on Sunniesnow to see what you have done
1009
1012
 
1010
1013
  ![Second chart](https://i.imgur.com/ksu5sVW.png)
1011
1014
 
1012
- *Notice*:
1013
1015
  When duplicating tip-pointed events,
1014
1016
  the duplicated events are not connected by the same tip point as the original events.
1015
1017
  However, if two original events are connected by the same tip point,
1016
1018
  their duplicates are also connected by the same tip point, too.
1019
+ If you want the duplicated events to be connected by the same tip point as the original events,
1020
+ you can add set the keyword argument `new_tip_points:` to `false` in the call of `duplicate`:
1021
+
1022
+ ```ruby
1023
+ notes = tp_chain 0, 100, speed: 100 do
1024
+ # notes...
1025
+ end
1026
+ transform duplicate notes, new_tip_points: false do
1027
+ # transforms...
1028
+ end
1029
+ ```
1017
1030
 
1018
1031
  ## Advanced charting techniques
1019
1032
 
@@ -1027,7 +1040,7 @@ TODO.
1027
1040
 
1028
1041
  ### Tip points and placeholders
1029
1042
 
1030
- ### Multiple offsets
1043
+ ### Multiple offsets and timing tweaking
1031
1044
 
1032
1045
  ### JSON post-processing
1033
1046
 
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.3.0
4
+ version: 0.5.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-15 00:00:00.000000000 Z
11
+ date: 2023-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -135,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
137
  requirements: []
138
- rubygems_version: 3.4.13
138
+ rubygems_version: 3.4.22
139
139
  signing_key:
140
140
  specification_version: 4
141
141
  summary: A Ruby DSL for writing Sunniesnow charts