rubysketch-solitaire 0.1.0 → 0.9.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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +3 -0
  3. data/.gitignore +2 -0
  4. data/.hooks/post-commit +37 -0
  5. data/.hooks/pre-commit +69 -0
  6. data/ChangeLog.md +27 -0
  7. data/Gemfile.lock +10 -10
  8. data/Podfile.lock +33 -33
  9. data/README.md +8 -0
  10. data/Rakefile +107 -10
  11. data/RubySolitaire/Ad.swift +88 -0
  12. data/RubySolitaire/Assets.xcassets/AppIcon.appiconset/AppIcon.png +0 -0
  13. data/RubySolitaire/Assets.xcassets/AppIcon.appiconset/Contents.json +3 -87
  14. data/RubySolitaire/Base.lproj/Localizable.strings +6 -0
  15. data/RubySolitaire/Extensions.swift +5 -0
  16. data/RubySolitaire/GameView.swift +75 -13
  17. data/RubySolitaire/Helper.swift +70 -0
  18. data/RubySolitaire/MenuScreen.swift +141 -0
  19. data/RubySolitaire/RubySolitaireApp.swift +188 -1
  20. data/RubySolitaire/SafariView.swift +16 -0
  21. data/RubySolitaire/Strings.swift +48 -0
  22. data/RubySolitaire/ja.lproj/InfoPlist.strings +4 -0
  23. data/RubySolitaire/ja.lproj/Localizable.strings +6 -0
  24. data/VERSION +1 -1
  25. data/data/card.png +0 -0
  26. data/data/classicPSPWave.glsl +94 -0
  27. data/data/colorfulUnderwaterBubbles2.glsl +113 -0
  28. data/data/cosmic2.glsl +121 -0
  29. data/data/reflectiveHexes.glsl +219 -0
  30. data/fastlane/Fastfile +76 -0
  31. data/fastlane/metadata/copyright.txt +1 -0
  32. data/fastlane/metadata/en-US/apple_tv_privacy_policy.txt +1 -0
  33. data/fastlane/metadata/en-US/description.txt +5 -0
  34. data/fastlane/metadata/en-US/keywords.txt +1 -0
  35. data/fastlane/metadata/en-US/marketing_url.txt +1 -0
  36. data/fastlane/metadata/en-US/name.txt +1 -0
  37. data/fastlane/metadata/en-US/privacy_url.txt +1 -0
  38. data/fastlane/metadata/en-US/promotional_text.txt +1 -0
  39. data/fastlane/metadata/en-US/release_notes.txt +1 -0
  40. data/fastlane/metadata/en-US/subtitle.txt +1 -0
  41. data/fastlane/metadata/en-US/support_url.txt +1 -0
  42. data/fastlane/metadata/ja/apple_tv_privacy_policy.txt +1 -0
  43. data/fastlane/metadata/ja/description.txt +5 -0
  44. data/fastlane/metadata/ja/keywords.txt +1 -0
  45. data/fastlane/metadata/ja/marketing_url.txt +1 -0
  46. data/fastlane/metadata/ja/name.txt +1 -0
  47. data/fastlane/metadata/ja/privacy_url.txt +1 -0
  48. data/fastlane/metadata/ja/promotional_text.txt +1 -0
  49. data/fastlane/metadata/ja/release_notes.txt +1 -0
  50. data/fastlane/metadata/ja/subtitle.txt +1 -0
  51. data/fastlane/metadata/ja/support_url.txt +1 -0
  52. data/fastlane/metadata/primary_category.txt +1 -0
  53. data/fastlane/metadata/primary_first_sub_category.txt +1 -0
  54. data/fastlane/metadata/primary_second_sub_category.txt +1 -0
  55. data/fastlane/metadata/review_information/demo_password.txt +1 -0
  56. data/fastlane/metadata/review_information/demo_user.txt +1 -0
  57. data/fastlane/metadata/review_information/email_address.txt +1 -0
  58. data/fastlane/metadata/review_information/first_name.txt +0 -0
  59. data/fastlane/metadata/review_information/last_name.txt +0 -0
  60. data/fastlane/metadata/review_information/notes.txt +1 -0
  61. data/fastlane/metadata/review_information/phone_number.txt +0 -0
  62. data/fastlane/metadata/secondary_category.txt +1 -0
  63. data/fastlane/metadata/secondary_first_sub_category.txt +1 -0
  64. data/fastlane/metadata/secondary_second_sub_category.txt +1 -0
  65. data/lib/rubysketch/solitaire/background.rb +115 -12
  66. data/lib/rubysketch/solitaire/card.rb +10 -87
  67. data/lib/rubysketch/solitaire/common/animation.rb +34 -34
  68. data/lib/rubysketch/solitaire/common/button.rb +49 -19
  69. data/lib/rubysketch/solitaire/common/dialog.rb +78 -21
  70. data/lib/rubysketch/solitaire/common/scene.rb +15 -4
  71. data/lib/rubysketch/solitaire/common/settings.rb +15 -3
  72. data/lib/rubysketch/solitaire/common/timer.rb +2 -2
  73. data/lib/rubysketch/solitaire/common/transitions.rb +12 -6
  74. data/lib/rubysketch/solitaire/common/utils.rb +15 -0
  75. data/lib/rubysketch/solitaire/klondike.rb +382 -81
  76. data/lib/rubysketch/solitaire/places.rb +12 -102
  77. data/lib/rubysketch/solitaire/skin.rb +151 -0
  78. data/lib/rubysketch/solitaire.rb +33 -9
  79. data/main.rb +1 -0
  80. data/project.yml +85 -4
  81. metadata +55 -2
@@ -8,8 +8,8 @@ class CardPlace
8
8
 
9
9
  extend Forwardable
10
10
 
11
- def initialize(name, linkCards: false)
12
- @name, @linkCards = name.intern, linkCards
11
+ def initialize(game, name, linkCards: false)
12
+ @game, @name, @linkCards = game, name.intern, linkCards
13
13
  @cards = []
14
14
  end
15
15
 
@@ -56,11 +56,19 @@ class CardPlace
56
56
  createVector *pos.to_a(2), self.z + index + 1
57
57
  end
58
58
 
59
+ def updateCards(seconds = 0.2, excludes: [])
60
+ cards.each.with_index do |card, index|
61
+ next if excludes.include? card
62
+ pos = posFor card, index
63
+ move card, pos, seconds if pos != card.pos
64
+ end
65
+ end
66
+
59
67
  def sprite()
60
- @sprite ||= Sprite.new(0, 0, *Card.spriteSize).tap do |sp|
68
+ @sprite ||= Sprite.new(0, 0, *skin.cardSpriteSize).tap do |sp|
61
69
  sp.draw do
62
70
  noStroke
63
- fill 0, 20
71
+ fill *skin.translucentBackgroundColor
64
72
  rect 0, 0, sp.w, sp.h, 4
65
73
  end
66
74
  end
@@ -77,101 +85,3 @@ class CardPlace
77
85
  end
78
86
 
79
87
  end# CardPlace
80
-
81
-
82
- class NextsPlace < CardPlace
83
-
84
- def initialize(*args, **kwargs, &block)
85
- super
86
- @drawCount = 1
87
- end
88
-
89
- attr_reader :drawCount
90
-
91
- def add(*cards, **kwargs)
92
- super
93
- updateCards excludes: cards
94
- end
95
-
96
- def pop(*args)
97
- super
98
- updateCards
99
- end
100
-
101
- def updateCards(excludes: [])
102
- cards.each.with_index do |card, index|
103
- next if excludes.include? card
104
- pos = posFor card, index
105
- move card, pos, 0.2 if pos != card.pos
106
- end
107
- end
108
-
109
- def drawCount=(count)
110
- raise 'invalid drawCount' unless count
111
-
112
- @drawCount = count
113
-
114
- w = Card.spriteSize[0] + overlap * (count - 1)
115
- self.x -= w - self.w
116
- self.w = w
117
- end
118
-
119
- def posFor(card, index = nil)
120
- index ||= indexFor card
121
- super.tap do |pos|
122
- rindex = cards.size - index
123
- pos.x += overlap * (drawCount - rindex).clamp(0, drawCount - 1)
124
- end
125
- end
126
-
127
- def overlap()
128
- Card.spriteSize[0] * 0.4
129
- end
130
-
131
- end# NextsPlace
132
-
133
-
134
- class MarkPlace < CardPlace
135
-
136
- def mark()
137
- last&.mark
138
- end
139
-
140
- def accept?(x, y, card)
141
- return false if !card || card.closed? || !card.canDrop?
142
- hit?(x, y) &&
143
- card.last? &&
144
- card.opened? &&
145
- (!mark || mark == card.mark) &&
146
- card.number == last&.number.then {|n| n ? n + 1 : 1}
147
- end
148
-
149
- end# MarkPlace
150
-
151
-
152
- class ColumnPlace < CardPlace
153
-
154
- def initialize(*args, **kwargs, &block)
155
- super(*args, linkCards: true, **kwargs, &block)
156
- end
157
-
158
- def accept?(x, y, card)
159
- return false if !card || card.closed? || !card.canDrop?
160
- if empty?
161
- hit?(x, y) &&
162
- card.number == 13
163
- else
164
- any? {|card| card.hit?(x, y)} &&
165
- card.number == last.number - 1 &&
166
- card.color != last.color
167
- end
168
- end
169
-
170
- def posFor(card, index = nil)
171
- index ||= indexFor card
172
- super.tap do |pos|
173
- pos.y += self.h * 0.3 * index
174
- end
175
- end
176
-
177
- end# ColumnPlace
@@ -0,0 +1,151 @@
1
+ using RubySketch
2
+
3
+
4
+ class Skin
5
+
6
+ def self.setup()
7
+ ncolumns = 7
8
+ size = [width, height].min
9
+ @margin = size * 0.02
10
+ @cardSpriteWidth = (size - @margin * (ncolumns + 1)) / ncolumns
11
+ end
12
+
13
+ def initialize(index = 0)
14
+ @index = index % self.class.offsets.size
15
+ end
16
+
17
+ attr_reader :index
18
+
19
+ def pauseIcon()
20
+ @pauseIcon ||= self.class.getAssetImage 0, 192, 64, 64
21
+ end
22
+
23
+ def menuIcon()
24
+ @menuIcon ||= self.class.getAssetImage 64, 192, 64, 64
25
+ end
26
+
27
+ def settingsIcon()
28
+ @settingsIcon ||= self.class.getAssetImage 128, 192, 64, 64
29
+ end
30
+
31
+ def closedImage()
32
+ @closedImage ||= self.class.closedImages[index]
33
+ end
34
+
35
+ def openedImage(mark, number)
36
+ (@openedImages ||= {})[[mark, number]] ||= createOpenedImage mark, number
37
+ end
38
+
39
+ def cardSpriteSize()
40
+ @cardSpriteSize ||= self.class.cardSpriteSize
41
+ end
42
+
43
+ def backgroundCheckerColors()
44
+ @backgroundColors ||= self.class.colors[index][0, 2]
45
+ end
46
+
47
+ def redColor()
48
+ @redColor ||= self.class.colors[index][2]
49
+ end
50
+
51
+ def blackColor()
52
+ @blackColor ||= self.class.colors[index][3]
53
+ end
54
+
55
+ def buttonColor()
56
+ @buttonColor ||= self.class.colors[index][4]
57
+ end
58
+
59
+ def translucentBackgroundColor()
60
+ [0, 0, 0, 64]
61
+ end
62
+
63
+ def margin()
64
+ self.class.margin
65
+ end
66
+
67
+ def markColor(mark)
68
+ Card::MARKS[0, 2].include?(mark) ? redColor : blackColor
69
+ end
70
+
71
+ private
72
+
73
+ def createOpenedImage(mark, number)
74
+ c = self.class
75
+ createGraphics(*c.cardImageSize).tap do |g|
76
+ w, h, m = g.width, g.height, 16# margin
77
+ image = c.assetImage
78
+ nx, ny, nw, nh = c.numberRect number
79
+ mx, my, mw, mh = c.markRect mark
80
+ mnh = m + nh
81
+ mxx, myy = (w - mw) / 2, mnh + ((h - mnh) - mh) / 2
82
+ g.beginDraw do
83
+ g.angleMode DEGREES
84
+ g.translate w / 2, h / 2
85
+ g.rotate 180
86
+ g.translate -w / 2, -h / 2
87
+ g.copy image, 896, 0, w, h, 0, 0, w, h
88
+ g.tint *markColor(mark)
89
+ g.copy image, nx, ny, nw, nh, m, m, nw, nh
90
+ g.copy image, mx, my, mw, mh, mxx, myy, mw, mh
91
+ end
92
+ end
93
+ end
94
+
95
+ def self.assetImage()
96
+ @assetImage ||= loadImage dataPath 'card.png'
97
+ end
98
+
99
+ def self.margin()
100
+ @margin
101
+ end
102
+
103
+ def self.markRect(mark)
104
+ w = h = 128
105
+ [Card::MARKS.index(mark) * w, 0, w, h]
106
+ end
107
+
108
+ def self.numberRect(number)
109
+ w = h = 64
110
+ [(number - 1) * w, 128, w, h]
111
+ end
112
+
113
+ def self.closedImages()
114
+ @closedImages ||= offsets.map do |x|
115
+ getAssetImage x, 256, *cardImageSize
116
+ end
117
+ end
118
+
119
+ def self.getAssetImage(x, y, w, h)
120
+ createGraphics(w, h).tap do |g|
121
+ g.beginDraw do
122
+ w, h = g.width, g.height
123
+ g.copy assetImage, x, y, w, h, 0, 0, w, h
124
+ end
125
+ end
126
+ end
127
+
128
+ def self.colors()
129
+ @colors ||= offsets.map do |x|
130
+ 5.times
131
+ .map {|n| [x + n * 48 + 10, 512 + 10]}
132
+ .map {|xx, yy| assetImage.get xx, yy}
133
+ .map {|c| [red(c), green(c), blue(c), alpha(c)]}
134
+ end
135
+ end
136
+
137
+ def self.offsets()
138
+ (0..3).map {|n| n * 256}
139
+ end
140
+
141
+ def self.cardImageSize()
142
+ [164, 252]
143
+ end
144
+
145
+ def self.cardSpriteSize()
146
+ cardImageSize.then do |cw, ch|
147
+ [@cardSpriteWidth, @cardSpriteWidth * (ch.to_f / cw.to_f)]
148
+ end
149
+ end
150
+
151
+ end# Skin
@@ -1,4 +1,6 @@
1
1
  require 'forwardable'
2
+ require 'rbconfig'
3
+ require 'uri'
2
4
  require 'json'
3
5
  require 'rubysketch'
4
6
 
@@ -16,6 +18,7 @@ require 'rubysketch/solitaire/common/dialog'
16
18
  require 'rubysketch/solitaire/common/transitions'
17
19
  require 'rubysketch/solitaire/common/button'
18
20
 
21
+ require 'rubysketch/solitaire/skin'
19
22
  require 'rubysketch/solitaire/card'
20
23
  require 'rubysketch/solitaire/places'
21
24
 
@@ -27,36 +30,57 @@ require 'rubysketch/solitaire/klondike'
27
30
  using RubySketch
28
31
 
29
32
 
33
+ def debug?()
34
+ $debug || ENV['DEBUG'] || false
35
+ end
36
+
37
+ def sendCommand(type, *args)
38
+ $command = [type, *args].map {|s| URI.encode_www_form_component s}.join ':'
39
+ end
40
+
30
41
  def settings()
31
42
  $settings ||= Settings.new 'solitaire.json'
32
43
  end
33
44
 
34
- def centerPos()
35
- [
36
- (displayWidth - windowWidth) / 2,
37
- (displayHeight - windowHeight) / 2
38
- ]
45
+ def skin(index = nil)
46
+ $skin = nil if index != nil && index != $skin.index
47
+ $skin ||= Skin.new index || settings['skinIndex'] || 0
48
+ end
49
+
50
+ def backgroundScene()
51
+ $backgroundScene ||= Background.new
52
+ end
53
+
54
+ def checkFocus()
55
+ $prevFocused = focused if $prevFocused == nil
56
+ $root.focusChanged focused if focused != $prevFocused
57
+ $prevFocused = focused
39
58
  end
40
59
 
41
60
  setup do
42
61
  setTitle "Solitaire"
43
- size 375, 667
62
+ size 375, 667 unless $nosize
44
63
  windowMove *windowPos
45
64
  windowResizable false
46
65
  angleMode DEGREES
47
66
  noStroke
48
67
 
49
- $root = RootScene.new 'Root', Background.new, Start.new
68
+ Skin.setup
69
+ $root = RootScene.new 'Root', backgroundScene, Start.new
50
70
  end
51
71
 
52
72
  draw do
73
+ checkFocus
53
74
  fireTimers
54
75
  drawShake
55
- push { $root.draw }
76
+ push {$root.draw}
56
77
  end
57
78
 
58
79
  def windowPos()
59
- settings['windowPos'] || centerPos
80
+ settings['windowPos'] || [
81
+ (displayWidth - windowWidth) / 2,
82
+ (displayHeight - windowHeight) / 2
83
+ ]
60
84
  end
61
85
 
62
86
  windowMoved do
data/main.rb CHANGED
@@ -1 +1,2 @@
1
+ $nosize = true
1
2
  require 'rubysketch/solitaire'
data/project.yml CHANGED
@@ -4,7 +4,6 @@ options:
4
4
  bundleIdPrefix: org.xord
5
5
  deploymentTarget:
6
6
  iOS: 14.0
7
- developmentLanguage: ja
8
7
 
9
8
  settingGroups:
10
9
  all:
@@ -17,13 +16,21 @@ settingGroups:
17
16
 
18
17
  settings:
19
18
  base:
20
- MARKETING_VERSION: 1.0.0
21
- CURRENT_PROJECT_VERSION: 1.0.0
22
- DEVELOPMENT_TEAM: XXXXXXXXX
19
+ MARKETING_VERSION: 0.9.0
20
+ CURRENT_PROJECT_VERSION: 0.9.0
21
+ DEVELOPMENT_TEAM: $(TEAM_ID)
23
22
  configs:
24
23
  debug:
25
24
  DEBUG_INFORMATION_FORMAT: dwarf-with-dsym
26
25
 
26
+ packages:
27
+ Firebase:
28
+ url: https://github.com/firebase/firebase-ios-sdk
29
+ majorVersion: 9.0.0
30
+ GoogleMobileAds:
31
+ url: https://github.com/googleads/swift-package-manager-google-mobile-ads.git
32
+ majorVersion: 9.0.0
33
+
27
34
  targets:
28
35
  RubySolitaire:
29
36
  type: application
@@ -31,6 +38,16 @@ targets:
31
38
  dependencies:
32
39
  - framework: CoreMedia.framework
33
40
  embed: false
41
+ - framework: JavaScriptCore.framework
42
+ embed: false
43
+ - package: Firebase
44
+ product: FirebaseAnalyticsSwift
45
+ - package: Firebase
46
+ product: FirebaseCrashlytics
47
+ - package: Firebase
48
+ product: FirebaseRemoteConfigSwift
49
+ - package: GoogleMobileAds
50
+ product: GoogleMobileAds
34
51
  sources:
35
52
  - RubySolitaire
36
53
  - main.rb
@@ -39,12 +56,18 @@ targets:
39
56
  - path: data
40
57
  type: folder
41
58
  settings:
59
+ base:
60
+ TARGETED_DEVICE_FAMILY: 1
61
+ SUPPORTS_MACCATALYST: NO
62
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD: NO
63
+ SUPPORTED_PLATFORMS: "iphoneos iphonesimulator"
42
64
  groups: [all, app]
43
65
  info:
44
66
  path: RubySolitaire/Info.plist
45
67
  properties:
46
68
  CFBundleVersion: $(CURRENT_PROJECT_VERSION)
47
69
  CFBundleShortVersionString: $(MARKETING_VERSION)
70
+ CFBundleDisplayName: Solitaire
48
71
  LSRequiresIPhoneOS: YES
49
72
  UILaunchScreen: ""
50
73
  UIApplicationSupportsIndirectInputEvents: YES
@@ -59,6 +82,64 @@ targets:
59
82
  #- UIInterfaceOrientationPortraitUpsideDown
60
83
  #- UIInterfaceOrientationLandscapeLeft
61
84
  #- UIInterfaceOrientationLandscapeRight
85
+ NSCameraUsageDescription:
86
+ Ruby scripts will be able to retrieve images from the camera.
87
+ NSUserTrackingUsageDescription:
88
+ This identifier will be used to deliver personalized ads to you.
89
+ GADApplicationIdentifier: ca-app-pub-3940256099942544~1458002511
90
+ GADGameScreenBottomBanner: ca-app-pub-3940256099942544/2934735716
91
+ GADGameScreenInterstitial: ca-app-pub-3940256099942544/4411468910
92
+ SKAdNetworkItems:
93
+ - SKAdNetworkIdentifier: cstr6suwn9.skadnetwork
94
+ - SKAdNetworkIdentifier: 4fzdc2evr5.skadnetwork
95
+ - SKAdNetworkIdentifier: 4pfyvq9l8r.skadnetwork
96
+ - SKAdNetworkIdentifier: 2fnua5tdw4.skadnetwork
97
+ - SKAdNetworkIdentifier: ydx93a7ass.skadnetwork
98
+ - SKAdNetworkIdentifier: 5a6flpkh64.skadnetwork
99
+ - SKAdNetworkIdentifier: p78axxw29g.skadnetwork
100
+ - SKAdNetworkIdentifier: v72qych5uu.skadnetwork
101
+ - SKAdNetworkIdentifier: ludvb6z3bs.skadnetwork
102
+ - SKAdNetworkIdentifier: cp8zw746q7.skadnetwork
103
+ - SKAdNetworkIdentifier: c6k4g5qg8m.skadnetwork
104
+ - SKAdNetworkIdentifier: s39g8k73mm.skadnetwork
105
+ - SKAdNetworkIdentifier: 3qy4746246.skadnetwork
106
+ - SKAdNetworkIdentifier: 3sh42y64q3.skadnetwork
107
+ - SKAdNetworkIdentifier: f38h382jlk.skadnetwork
108
+ - SKAdNetworkIdentifier: hs6bdukanm.skadnetwork
109
+ - SKAdNetworkIdentifier: prcb7njmu6.skadnetwork
110
+ - SKAdNetworkIdentifier: v4nxqhlyqp.skadnetwork
111
+ - SKAdNetworkIdentifier: wzmmz9fp6w.skadnetwork
112
+ - SKAdNetworkIdentifier: yclnxrl5pm.skadnetwork
113
+ - SKAdNetworkIdentifier: t38b2kh725.skadnetwork
114
+ - SKAdNetworkIdentifier: 7ug5zh24hu.skadnetwork
115
+ - SKAdNetworkIdentifier: 9rd848q2bz.skadnetwork
116
+ - SKAdNetworkIdentifier: y5ghdn5j9k.skadnetwork
117
+ - SKAdNetworkIdentifier: n6fk4nfna4.skadnetwork
118
+ - SKAdNetworkIdentifier: v9wttpbfk9.skadnetwork
119
+ - SKAdNetworkIdentifier: n38lu8286q.skadnetwork
120
+ - SKAdNetworkIdentifier: 47vhws6wlr.skadnetwork
121
+ - SKAdNetworkIdentifier: kbd757ywx3.skadnetwork
122
+ - SKAdNetworkIdentifier: 9t245vhmpl.skadnetwork
123
+ - SKAdNetworkIdentifier: a2p9lx4jpn.skadnetwork
124
+ - SKAdNetworkIdentifier: 22mmun2rn5.skadnetwork
125
+ - SKAdNetworkIdentifier: 4468km3ulz.skadnetwork
126
+ - SKAdNetworkIdentifier: 2u9pt9hc89.skadnetwork
127
+ - SKAdNetworkIdentifier: 8s468mfl3y.skadnetwork
128
+ - SKAdNetworkIdentifier: av6w8kgt66.skadnetwork
129
+ - SKAdNetworkIdentifier: klf5c3l5u5.skadnetwork
130
+ - SKAdNetworkIdentifier: ppxm28t8ap.skadnetwork
131
+ - SKAdNetworkIdentifier: 424m5254lk.skadnetwork
132
+ - SKAdNetworkIdentifier: ecpz2srf59.skadnetwork
133
+ - SKAdNetworkIdentifier: uw77j35x4d.skadnetwork
134
+ - SKAdNetworkIdentifier: mlmmfzh3r3.skadnetwork
135
+ - SKAdNetworkIdentifier: 578prtvx9j.skadnetwork
136
+ - SKAdNetworkIdentifier: 4dzt52r2t5.skadnetwork
137
+ - SKAdNetworkIdentifier: gta9lk7p23.skadnetwork
138
+ - SKAdNetworkIdentifier: e5fvkxwrpn.skadnetwork
139
+ - SKAdNetworkIdentifier: 8c4e2ghe7u.skadnetwork
140
+ - SKAdNetworkIdentifier: zq492l623r.skadnetwork
141
+ - SKAdNetworkIdentifier: 3rd42ekr43.skadnetwork
142
+ - SKAdNetworkIdentifier: 3qcr597p9d.skadnetwork
62
143
 
63
144
  RubySolitaireTests:
64
145
  type: bundle.unit-test
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysketch-solitaire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-29 00:00:00.000000000 Z
11
+ date: 2023-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -63,6 +63,9 @@ files:
63
63
  - ".github/workflows/test.yml"
64
64
  - ".github/workflows/utils.rb"
65
65
  - ".gitignore"
66
+ - ".hooks/post-commit"
67
+ - ".hooks/pre-commit"
68
+ - ChangeLog.md
66
69
  - Gemfile
67
70
  - Gemfile.lock
68
71
  - LICENSE
@@ -70,24 +73,73 @@ files:
70
73
  - Podfile.lock
71
74
  - README.md
72
75
  - Rakefile
76
+ - RubySolitaire/Ad.swift
73
77
  - RubySolitaire/Assets.xcassets/AccentColor.colorset/Contents.json
78
+ - RubySolitaire/Assets.xcassets/AppIcon.appiconset/AppIcon.png
74
79
  - RubySolitaire/Assets.xcassets/AppIcon.appiconset/Contents.json
75
80
  - RubySolitaire/Assets.xcassets/Contents.json
81
+ - RubySolitaire/Base.lproj/Localizable.strings
76
82
  - RubySolitaire/BridgingHeader.h
83
+ - RubySolitaire/Extensions.swift
77
84
  - RubySolitaire/GameView.swift
85
+ - RubySolitaire/Helper.swift
86
+ - RubySolitaire/MenuScreen.swift
78
87
  - RubySolitaire/Preview Content/Preview Assets.xcassets/Contents.json
79
88
  - RubySolitaire/RubySolitaireApp.swift
89
+ - RubySolitaire/SafariView.swift
90
+ - RubySolitaire/Strings.swift
91
+ - RubySolitaire/ja.lproj/InfoPlist.strings
92
+ - RubySolitaire/ja.lproj/Localizable.strings
80
93
  - RubySolitaireTests/RubySolitaireTests.swift
81
94
  - RubySolitaireUITests/RubySolitaireUITests.swift
82
95
  - RubySolitaireUITests/RubySolitaireUITestsLaunchTests.swift
83
96
  - VERSION
84
97
  - data/button.mp3
85
98
  - data/card.png
99
+ - data/classicPSPWave.glsl
100
+ - data/colorfulUnderwaterBubbles2.glsl
101
+ - data/cosmic2.glsl
86
102
  - data/deal1.mp3
87
103
  - data/deal2.mp3
88
104
  - data/deal3.mp3
89
105
  - data/flip.mp3
90
106
  - data/noop.mp3
107
+ - data/reflectiveHexes.glsl
108
+ - fastlane/Fastfile
109
+ - fastlane/metadata/copyright.txt
110
+ - fastlane/metadata/en-US/apple_tv_privacy_policy.txt
111
+ - fastlane/metadata/en-US/description.txt
112
+ - fastlane/metadata/en-US/keywords.txt
113
+ - fastlane/metadata/en-US/marketing_url.txt
114
+ - fastlane/metadata/en-US/name.txt
115
+ - fastlane/metadata/en-US/privacy_url.txt
116
+ - fastlane/metadata/en-US/promotional_text.txt
117
+ - fastlane/metadata/en-US/release_notes.txt
118
+ - fastlane/metadata/en-US/subtitle.txt
119
+ - fastlane/metadata/en-US/support_url.txt
120
+ - fastlane/metadata/ja/apple_tv_privacy_policy.txt
121
+ - fastlane/metadata/ja/description.txt
122
+ - fastlane/metadata/ja/keywords.txt
123
+ - fastlane/metadata/ja/marketing_url.txt
124
+ - fastlane/metadata/ja/name.txt
125
+ - fastlane/metadata/ja/privacy_url.txt
126
+ - fastlane/metadata/ja/promotional_text.txt
127
+ - fastlane/metadata/ja/release_notes.txt
128
+ - fastlane/metadata/ja/subtitle.txt
129
+ - fastlane/metadata/ja/support_url.txt
130
+ - fastlane/metadata/primary_category.txt
131
+ - fastlane/metadata/primary_first_sub_category.txt
132
+ - fastlane/metadata/primary_second_sub_category.txt
133
+ - fastlane/metadata/review_information/demo_password.txt
134
+ - fastlane/metadata/review_information/demo_user.txt
135
+ - fastlane/metadata/review_information/email_address.txt
136
+ - fastlane/metadata/review_information/first_name.txt
137
+ - fastlane/metadata/review_information/last_name.txt
138
+ - fastlane/metadata/review_information/notes.txt
139
+ - fastlane/metadata/review_information/phone_number.txt
140
+ - fastlane/metadata/secondary_category.txt
141
+ - fastlane/metadata/secondary_first_sub_category.txt
142
+ - fastlane/metadata/secondary_second_sub_category.txt
91
143
  - lib/rubysketch/solitaire.rb
92
144
  - lib/rubysketch/solitaire/background.rb
93
145
  - lib/rubysketch/solitaire/card.rb
@@ -107,6 +159,7 @@ files:
107
159
  - lib/rubysketch/solitaire/extension.rb
108
160
  - lib/rubysketch/solitaire/klondike.rb
109
161
  - lib/rubysketch/solitaire/places.rb
162
+ - lib/rubysketch/solitaire/skin.rb
110
163
  - lib/rubysketch/solitaire/start.rb
111
164
  - main.rb
112
165
  - project.yml