Created
December 4, 2012 01:46
-
-
Save greeness/4199796 to your computer and use it in GitHub Desktop.
iap purchase update
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public UserIapModel Calculate(double? currentTotalIap, | |
| double? currentElapsedHours, | |
| double? currentPlayedTurns, | |
| double newIap, | |
| double newElapsedHours, | |
| double newPlayedTurns) | |
| { | |
| // default setting for new users: spending $0.01 in every 24 hours or 10 turns | |
| double totalIap = currentTotalIap ?? 0.01; | |
| double totalElapsedHours = currentElapsedHours ?? 24; | |
| double totalPlayedTurns = currentPlayedTurns ?? 10; | |
| // normalized hours should be between 1 hour and 2160 hours (90 days) | |
| var normalizedHours = Math.Max(1., Math.Min(2160, newElapsedHours)); | |
| // normalized turns should be between 3 turns and 5000 turns) | |
| var normalizedTurns = Math.Max(3., Math.Min(5000, newPlayedTurns)); | |
| // this is the database data access object | |
| var userIapModel = new UserIapModel(); | |
| userIapModel.totalIap = totalIap + newIap; | |
| userIapModel.totalElaspedHours = totalElaspedHours + normalizedHours; | |
| userIapModel.totalPlayedTurns = totalPlayedTurns + normalizedTurns; | |
| // metric 1: daily iap | |
| var meanHourlyIap = userIapModel.totalIap/userIapModel.totalElapsedHours; | |
| var stdHourlyIap = Math.Sqrt(userIapModel.totalIap/(userIapModel.totalElaspedHours*userIapModel.totalElaspedHours)); | |
| var stdDailyIap = stdHourlyIap*24.0; | |
| userIapModel.meanDailyIap = userIapModel.meanHourlyIap*24.0; | |
| userIapModel.upperBoundDailyIap = userIapModel.meanDailyIap + 2*stdDailyIap; | |
| userIapModel.lowerBoundDailyIap = Math.Max(0.0, userIapModel.meanDailyIap - 2*stdDailyIap); | |
| // metric 2: iap per 100 turns | |
| var meanIapPerTurn = userIapModel.totalIap/userIapModel.totalPlayedTurns; | |
| var stdIapPerTurn = Math.Sqrt(userIapModel.totalIap/(userIapModel.totalPlayedTurns*userIapModel.totalPlayedTurns)); | |
| var stdIapPerHundredTurns = stdIapPerTurn*100.0; | |
| userIapModel.meanIapPerHundredTurns = meanIapPerTurn*100.0; | |
| userIapModel.upperBoundIapPerHundredTurns = userIapModel.meanIapPerHundredTurns + 2*stdIapPerHundredTurns; | |
| userIapModel.lowerBoundIapPerHundredTurns = Math.Max(0.0, userIapModel.meanIapPerHundredTurns - 2*stdIapPerHundredTurns); | |
| return userIapModel; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment