@@ -59,6 +59,7 @@ class CelesteSplitter {
59
59
}
60
60
}
61
61
62
+ private var time : Double = 0.0
62
63
private var gameTimeRunning = false
63
64
private( set) var nextEventIndex = 0
64
65
@@ -73,12 +74,13 @@ class CelesteSplitter {
73
74
return [ ]
74
75
}
75
76
let events = getEvents ( from: autoSplitterInfo, to: info)
76
- // logStateChange(from: autoSplitterInfo, to: info)
77
+ logStateChange ( from: autoSplitterInfo, to: info)
77
78
autoSplitterInfo = info
78
79
79
- let time = routeConfig. useFileTime ? autoSplitterInfo. fileTime : autoSplitterInfo. chapterTime
80
+ if autoSplitterInfo. mode != . Menu { // save and quit resets the chapter timer to zero, but we don't want to reset it for QTM strats
81
+ time = routeConfig. useFileTime ? autoSplitterInfo. fileTime : autoSplitterInfo. chapterTime
82
+ }
80
83
server. setGameTime ( seconds: time)
81
-
82
84
processEvents ( events)
83
85
84
86
// when using the chapter time, `timerActive` will be true before the chapter time starts ticking.
@@ -94,15 +96,29 @@ class CelesteSplitter {
94
96
var lastStateTime = DispatchTime . now ( )
95
97
96
98
func logStateChange( from old: AutoSplitterInfo , to new: AutoSplitterInfo ) {
97
- if !old. stableStateEquals ( other: new) {
99
+ let comparisons = [
100
+ ( name: " chapter " , old: " \( old. chapter) " , new: " \( new. chapter) " ) ,
101
+ ( name: " mode " , old: " \( old. mode) " , new: " \( new. mode) " ) ,
102
+ ( name: " level " , old: " \( old. level) " , new: " \( new. level) " ) ,
103
+ ( name: " timerActive " , old: " \( old. timerActive) " , new: " \( new. timerActive) " ) ,
104
+ ( name: " chapterStarted " , old: " \( old. chapterStarted) " , new: " \( new. chapterStarted) " ) ,
105
+ ( name: " chapterComplete " , old: " \( old. chapterComplete) " , new: " \( new. chapterComplete) " ) ,
106
+ // (name: "chapterTime", old: "\(old.chapterTime)", new: "\(new.chapterTime)"),
107
+ ( name: " chapterStrawberries " , old: " \( old. chapterStrawberries) " , new: " \( new. chapterStrawberries) " ) ,
108
+ ( name: " chapterCassette " , old: " \( old. chapterCassette) " , new: " \( new. chapterCassette) " ) ,
109
+ ( name: " chapterHeart " , old: " \( old. chapterHeart) " , new: " \( new. chapterHeart) " ) ,
110
+ // (name: "fileTime", old: "\(old.fileTime)", new: "\(new.fileTime)"),
111
+ ( name: " fileStrawberries " , old: " \( old. fileStrawberries) " , new: " \( new. fileStrawberries) " ) ,
112
+ ( name: " fileCassettes " , old: " \( old. fileCassettes) " , new: " \( new. fileCassettes) " ) ,
113
+ ( name: " fileHearts " , old: " \( old. fileHearts) " , new: " \( new. fileHearts) " ) ,
114
+ ]
115
+ let changes = comparisons. filter { $0. old != $0. new }
116
+
117
+ if !changes. isEmpty {
98
118
let currentTime = DispatchTime . now ( )
99
119
let delta = Double ( currentTime. uptimeNanoseconds - lastStateTime. uptimeNanoseconds) / 1_000_000_000
100
120
print (
101
- " [ \( delta) ] " +
102
- " chapter: \( new. chapter) , mode: \( new. mode) , level: \( new. level) , timerActive: \( new. timerActive) , " +
103
- " chapterStarted: \( new. chapterStarted) , chapterComplete: \( new. chapterComplete) , chapterTime: \( new. chapterTime) , " +
104
- " chapterStrawberries: \( new. chapterStrawberries) , chapterCassette: \( new. chapterCassette) , chapterHeart: \( new. chapterHeart) , fileTime: \( new. fileTime) , " +
105
- " fileStrawberries: \( new. fileStrawberries) , fileCassettes: \( new. fileCassettes) , fileHearts: \( new. fileHearts) "
121
+ " [real delta: \( delta) , chapter: \( new. chapterTime) , file: \( new. fileTime) ] " + changes. map { " \( $0. name) : \( $0. old) -> \( $0. new) " } . joined ( separator: " , " )
106
122
)
107
123
lastStateTime = currentTime
108
124
}
@@ -154,13 +170,37 @@ class CelesteSplitter {
154
170
events. append ( [ " \( old. level) > \( new. level) " ] )
155
171
}
156
172
if new. chapterCassette && !old. chapterCassette {
157
- events. append ( [ " cassette " , " chapter \( new. chapter) cassette " , " \( new. fileCassettes) total cassettes " ] )
173
+ events. append ( [
174
+ " collect cassette " ,
175
+ " collect chapter \( new. chapter) cassette " ,
176
+ " collect \( new. fileCassettes) total cassettes " ,
177
+ // compat:
178
+ " cassette " ,
179
+ " chapter \( new. chapter) cassette " ,
180
+ " \( new. fileCassettes) total cassettes "
181
+ ] )
158
182
}
159
183
if new. chapterHeart && !old. chapterHeart {
160
- events. append ( [ " heart " , " chapter \( new. chapter) heart " , " \( new. fileHearts) total hearts " ] )
184
+ events. append ( [
185
+ " collect heart " ,
186
+ " collect chapter \( new. chapter) heart " ,
187
+ " collect \( new. fileHearts) total hearts " ,
188
+ // compat:
189
+ " heart " ,
190
+ " chapter \( new. chapter) heart " ,
191
+ " \( new. fileHearts) total hearts "
192
+ ] )
161
193
}
162
194
if new. chapterStrawberries > old. chapterStrawberries {
163
- events. append ( [ " strawberry " , " \( new. chapterStrawberries) chapter strawberries " , " \( new. fileStrawberries) file strawberries " ] )
195
+ events. append ( [
196
+ " collect strawberry " ,
197
+ " collect \( new. chapterStrawberries) chapter strawberries " ,
198
+ " collect \( new. fileStrawberries) file strawberries " ,
199
+ // compat:
200
+ " strawberry " ,
201
+ " \( new. chapterStrawberries) chapter strawberries " ,
202
+ " \( new. fileStrawberries) file strawberries "
203
+ ] )
164
204
}
165
205
return events
166
206
}
0 commit comments