rubysketch-solitaire 0.1.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +3 -0
- data/.gitignore +2 -0
- data/.hooks/post-commit +37 -0
- data/.hooks/pre-commit +69 -0
- data/ChangeLog.md +27 -0
- data/Gemfile.lock +10 -10
- data/Podfile.lock +33 -33
- data/README.md +8 -0
- data/Rakefile +107 -10
- data/RubySolitaire/Ad.swift +88 -0
- data/RubySolitaire/Assets.xcassets/AppIcon.appiconset/AppIcon.png +0 -0
- data/RubySolitaire/Assets.xcassets/AppIcon.appiconset/Contents.json +3 -87
- data/RubySolitaire/Base.lproj/Localizable.strings +6 -0
- data/RubySolitaire/Extensions.swift +5 -0
- data/RubySolitaire/GameView.swift +75 -13
- data/RubySolitaire/Helper.swift +70 -0
- data/RubySolitaire/MenuScreen.swift +141 -0
- data/RubySolitaire/RubySolitaireApp.swift +188 -1
- data/RubySolitaire/SafariView.swift +16 -0
- data/RubySolitaire/Strings.swift +48 -0
- data/RubySolitaire/ja.lproj/InfoPlist.strings +4 -0
- data/RubySolitaire/ja.lproj/Localizable.strings +6 -0
- data/VERSION +1 -1
- data/data/card.png +0 -0
- data/data/classicPSPWave.glsl +94 -0
- data/data/colorfulUnderwaterBubbles2.glsl +113 -0
- data/data/cosmic2.glsl +121 -0
- data/data/reflectiveHexes.glsl +219 -0
- data/fastlane/Fastfile +76 -0
- data/fastlane/metadata/copyright.txt +1 -0
- data/fastlane/metadata/en-US/apple_tv_privacy_policy.txt +1 -0
- data/fastlane/metadata/en-US/description.txt +5 -0
- data/fastlane/metadata/en-US/keywords.txt +1 -0
- data/fastlane/metadata/en-US/marketing_url.txt +1 -0
- data/fastlane/metadata/en-US/name.txt +1 -0
- data/fastlane/metadata/en-US/privacy_url.txt +1 -0
- data/fastlane/metadata/en-US/promotional_text.txt +1 -0
- data/fastlane/metadata/en-US/release_notes.txt +1 -0
- data/fastlane/metadata/en-US/subtitle.txt +1 -0
- data/fastlane/metadata/en-US/support_url.txt +1 -0
- data/fastlane/metadata/ja/apple_tv_privacy_policy.txt +1 -0
- data/fastlane/metadata/ja/description.txt +5 -0
- data/fastlane/metadata/ja/keywords.txt +1 -0
- data/fastlane/metadata/ja/marketing_url.txt +1 -0
- data/fastlane/metadata/ja/name.txt +1 -0
- data/fastlane/metadata/ja/privacy_url.txt +1 -0
- data/fastlane/metadata/ja/promotional_text.txt +1 -0
- data/fastlane/metadata/ja/release_notes.txt +1 -0
- data/fastlane/metadata/ja/subtitle.txt +1 -0
- data/fastlane/metadata/ja/support_url.txt +1 -0
- data/fastlane/metadata/primary_category.txt +1 -0
- data/fastlane/metadata/primary_first_sub_category.txt +1 -0
- data/fastlane/metadata/primary_second_sub_category.txt +1 -0
- data/fastlane/metadata/review_information/demo_password.txt +1 -0
- data/fastlane/metadata/review_information/demo_user.txt +1 -0
- data/fastlane/metadata/review_information/email_address.txt +1 -0
- data/fastlane/metadata/review_information/first_name.txt +0 -0
- data/fastlane/metadata/review_information/last_name.txt +0 -0
- data/fastlane/metadata/review_information/notes.txt +1 -0
- data/fastlane/metadata/review_information/phone_number.txt +0 -0
- data/fastlane/metadata/secondary_category.txt +1 -0
- data/fastlane/metadata/secondary_first_sub_category.txt +1 -0
- data/fastlane/metadata/secondary_second_sub_category.txt +1 -0
- data/lib/rubysketch/solitaire/background.rb +115 -12
- data/lib/rubysketch/solitaire/card.rb +10 -87
- data/lib/rubysketch/solitaire/common/animation.rb +34 -34
- data/lib/rubysketch/solitaire/common/button.rb +49 -19
- data/lib/rubysketch/solitaire/common/dialog.rb +78 -21
- data/lib/rubysketch/solitaire/common/scene.rb +15 -4
- data/lib/rubysketch/solitaire/common/settings.rb +15 -3
- data/lib/rubysketch/solitaire/common/timer.rb +2 -2
- data/lib/rubysketch/solitaire/common/transitions.rb +12 -6
- data/lib/rubysketch/solitaire/common/utils.rb +15 -0
- data/lib/rubysketch/solitaire/klondike.rb +382 -81
- data/lib/rubysketch/solitaire/places.rb +12 -102
- data/lib/rubysketch/solitaire/skin.rb +151 -0
- data/lib/rubysketch/solitaire.rb +33 -9
- data/main.rb +1 -0
- data/project.yml +85 -4
- 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, *
|
68
|
+
@sprite ||= Sprite.new(0, 0, *skin.cardSpriteSize).tap do |sp|
|
61
69
|
sp.draw do
|
62
70
|
noStroke
|
63
|
-
fill
|
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
|
data/lib/rubysketch/solitaire.rb
CHANGED
@@ -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
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
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 {
|
76
|
+
push {$root.draw}
|
56
77
|
end
|
57
78
|
|
58
79
|
def windowPos()
|
59
|
-
settings['windowPos'] ||
|
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
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:
|
21
|
-
CURRENT_PROJECT_VERSION:
|
22
|
-
DEVELOPMENT_TEAM:
|
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.
|
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-
|
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
|