@@ -12,6 +12,7 @@ internal class FunctionCall : Expression
1212 public bool isRandom { get { return name == "RANDOM" ; } }
1313 public bool isSeedRandom { get { return name == "SEED_RANDOM" ; } }
1414 public bool isListRange { get { return name == "LIST_RANGE" ; } }
15+ public bool isReadCount { get { return name == "READ_COUNT" ; } }
1516
1617 public bool shouldPopReturnedValue ;
1718
@@ -33,34 +34,37 @@ public override void GenerateIntoContainer (Runtime.Container container)
3334
3435 container . AddContent ( Runtime . ControlCommand . ChoiceCount ( ) ) ;
3536
36- } else if ( isTurnsSince ) {
37+ } else if ( isTurnsSince || isReadCount ) {
3738
3839 var divertTarget = arguments [ 0 ] as DivertTarget ;
3940 var variableDivertTarget = arguments [ 0 ] as VariableReference ;
4041
4142 if ( arguments . Count != 1 || ( divertTarget == null && variableDivertTarget == null ) ) {
42- Error ( "The TURNS_SINCE () function should take one argument: a divert target to the target knot, stitch, gather or choice you want to check. e.g. TURNS_SINCE(-> myKnot)" ) ;
43+ Error ( "The " + name + " () function should take one argument: a divert target to the target knot, stitch, gather or choice you want to check. e.g. TURNS_SINCE(-> myKnot)") ;
4344 return ;
4445 }
4546
4647 if ( divertTarget ) {
47- _turnCountDivertTarget = divertTarget ;
48- AddContent ( _turnCountDivertTarget ) ;
48+ _divertTargetToCount = divertTarget ;
49+ AddContent ( _divertTargetToCount ) ;
4950
50- _turnCountDivertTarget . GenerateIntoContainer ( container ) ;
51+ _divertTargetToCount . GenerateIntoContainer ( container ) ;
5152 } else {
52- _turnCountVariableReference = variableDivertTarget ;
53- AddContent ( _turnCountVariableReference ) ;
53+ _variableReferenceToCount = variableDivertTarget ;
54+ AddContent ( _variableReferenceToCount ) ;
5455
55- _turnCountVariableReference . GenerateIntoContainer ( container ) ;
56+ _variableReferenceToCount . GenerateIntoContainer ( container ) ;
5657
5758 if ( ! story . countAllVisits ) {
5859 Error ( "Attempting to get TURNS_SINCE for a variable target without -c compiler option. You need the compiler switch turned on so that it can track turn counts for everything, not just those you directly reference." ) ;
5960 }
6061 }
6162
62-
63- container . AddContent ( Runtime . ControlCommand . TurnsSince ( ) ) ;
63+ if ( isTurnsSince )
64+ container . AddContent ( Runtime . ControlCommand . TurnsSince ( ) ) ;
65+ else
66+ container . AddContent ( Runtime . ControlCommand . ReadCount ( ) ) ;
67+
6468 } else if ( isRandom ) {
6569 if ( arguments . Count != 2 )
6670 Error ( "RANDOM should take 2 parameters: a minimum and a maximum integer" ) ;
@@ -103,7 +107,7 @@ public override void GenerateIntoContainer (Runtime.Container container)
103107 // Don't attempt to resolve as a divert
104108 content . Remove ( _proxyDivert ) ;
105109
106- } else if ( Runtime . NativeFunctionCall . CallExistsWithName ( name ) ) {
110+ } else if ( Runtime . NativeFunctionCall . CallExistsWithName ( name ) ) {
107111
108112 var nativeCall = Runtime . NativeFunctionCall . CallWithName ( name ) ;
109113
@@ -121,8 +125,7 @@ public override void GenerateIntoContainer (Runtime.Container container)
121125
122126 // Don't attempt to resolve as a divert
123127 content . Remove ( _proxyDivert ) ;
124- }
125- else if ( foundList != null ) {
128+ } else if ( foundList != null ) {
126129 if ( arguments . Count > 1 )
127130 Error ( "Can currently only construct a list from one integer (or an empty list from a given list definition)" ) ;
128131
@@ -131,7 +134,7 @@ public override void GenerateIntoContainer (Runtime.Container container)
131134 container . AddContent ( new Runtime . StringValue ( name ) ) ;
132135 arguments [ 0 ] . GenerateIntoContainer ( container ) ;
133136 container . AddContent ( Runtime . ControlCommand . ListFromInt ( ) ) ;
134- }
137+ }
135138
136139 // Empty list with given origin.
137140 else {
@@ -144,8 +147,8 @@ public override void GenerateIntoContainer (Runtime.Container container)
144147 content . Remove ( _proxyDivert ) ;
145148 }
146149
147- // Normal function call
148- else {
150+ // Normal function call
151+ else {
149152 container . AddContent ( _proxyDivert . runtimeObject ) ;
150153 }
151154
@@ -170,8 +173,8 @@ public override void ResolveReferences (Story context)
170173 arg . ResolveReferences ( context ) ;
171174 }
172175
173- if ( _turnCountDivertTarget ) {
174- var divert = _turnCountDivertTarget . divert ;
176+ if ( _divertTargetToCount ) {
177+ var divert = _divertTargetToCount . divert ;
175178 var attemptingTurnCountOfVariableTarget = divert . runtimeDivert . variableDivertName != null ;
176179
177180 if ( attemptingTurnCountOfVariableTarget ) {
@@ -189,10 +192,10 @@ public override void ResolveReferences (Story context)
189192 }
190193 }
191194
192- else if ( _turnCountVariableReference ) {
193- var runtimeVarRef = _turnCountVariableReference . runtimeVarRef ;
195+ else if ( _variableReferenceToCount ) {
196+ var runtimeVarRef = _variableReferenceToCount . runtimeVarRef ;
194197 if ( runtimeVarRef . pathForCount != null ) {
195- Error ( "Should be TURNS_SINCE (-> " + _turnCountVariableReference . name + "). Without the '->' it expects a variable target " ) ;
198+ Error ( "Should be " + name + " (-> "+ _variableReferenceToCount . name + "). Usage without the '->' only makes sense for variable targets. " ) ;
196199 }
197200 }
198201 }
@@ -202,7 +205,12 @@ public static bool IsBuiltIn(string name)
202205 if ( Runtime . NativeFunctionCall . CallExistsWithName ( name ) )
203206 return true ;
204207
205- return name == "CHOICE_COUNT" || name == "TURNS_SINCE" || name == "RANDOM" || name == "SEED_RANDOM" || name == "LIST_VALUE" ;
208+ return name == "CHOICE_COUNT"
209+ || name == "TURNS_SINCE"
210+ || name == "RANDOM"
211+ || name == "SEED_RANDOM"
212+ || name == "LIST_VALUE"
213+ || name == "READ_COUNT" ;
206214 }
207215
208216 public override string ToString ( )
@@ -212,8 +220,8 @@ public override string ToString ()
212220 }
213221
214222 Parsed . Divert _proxyDivert ;
215- Parsed . DivertTarget _turnCountDivertTarget ;
216- Parsed . VariableReference _turnCountVariableReference ;
223+ Parsed . DivertTarget _divertTargetToCount ;
224+ Parsed . VariableReference _variableReferenceToCount ;
217225 }
218226}
219227
0 commit comments