diff --git a/src/app/index.coffee b/src/app/index.coffee index 2a9bc898c9..137aa8cc6b 100644 --- a/src/app/index.coffee +++ b/src/app/index.coffee @@ -94,34 +94,14 @@ resetDom = (model) -> window.DERBY.app.dom.clear() view.render(model) -cron = (model) -> - user = model.at('_user') - - # This is an expensive function, only call it on cron - lastCron = user.get('lastCron') - return unless helpers.daysBetween(+new Date, lastCron) > 0 - - userObj = user.get() - - # hp-shimmy so we can animate the hp-loss - before = {hp:userObj.stats.hp, lastCron:userObj.lastCron} - scoring.cron(userObj) - after = {hp:userObj.stats.hp, lastCron:userObj.lastCron} - userObj.stats.hp = before.hp - - model.set "users.#{userObj.id}", userObj - resetDom(model) - setTimeout (-> user.set 'stats.hp', after.hp), 1000 # animate hp loss ready (model) -> user = model.at('_user') - user.setNull 'lastCron', +new Date #set cron immediately + user.set('lastCron', +new Date) if user.get('lastCron')=='new' #set cron immediately # Setup model in scoring functions scoring.setModel(model) - - # First things first. Preen the user object, check if dailies, etc - cron(model) + scoring.cron() # Load all the jQuery, Growl, Tour, etc browser.loadJavaScripts(model) diff --git a/src/app/schema.coffee b/src/app/schema.coffee index 245bba9438..3b0d2c1cb7 100644 --- a/src/app/schema.coffee +++ b/src/app/schema.coffee @@ -5,6 +5,7 @@ _ = require 'underscore' module.exports.userSchema = -> # deep clone, else further new users get duplicate objects newUser = require('lodash').cloneDeep + lastCron: 'new' #this will be replaced with a date on first run balance: 2 stats: { money: 0, exp: 0, lvl: 1, hp: 50 } items: { itemsEnabled: false, armor: 0, weapon: 0 } diff --git a/src/app/scoring.coffee b/src/app/scoring.coffee index 9d46f7238f..27d99fbcfd 100644 --- a/src/app/scoring.coffee +++ b/src/app/scoring.coffee @@ -179,10 +179,13 @@ score = (taskId, direction, times, update) -> At end of day, add value to all incomplete Daily & Todo tasks (further incentive) For incomplete Dailys, deduct experience ### -cron = (userObj) -> +cron = -> today = +new Date - daysPassed = helpers.daysBetween(today, userObj.lastCron) + daysPassed = helpers.daysBetween(today, user.get('lastCron')) if daysPassed > 0 + user.set 'lastCron', today + userObj = user.get() + hpBefore = userObj.stats.hp #we'll use this later so we can animate hp loss # Tally each task todoTally = 0 _.each userObj.tasks, (taskObj) -> @@ -205,14 +208,15 @@ cron = (userObj) -> daysFailed++ score id, 'down', daysFailed, userObj - value = userObj.tasks[taskObj.id].value #get updated value + value = taskObj.value #get updated value if type == 'daily' - userObj.tasks[taskObj.id].history ?= [] - userObj.tasks[taskObj.id].history.push { date: today, value: value } - userObj.tasks[taskObj.id].completed = false + taskObj.history ?= [] + taskObj.history.push { date: today, value: value } + taskObj.completed = false else absVal = if (completed) then Math.abs(value) else value todoTally += absVal + user.set 'tasks.' + taskObj.id, taskObj # Finished tallying userObj.history ?= {}; userObj.history.todos ?= []; userObj.history.exp ?= [] @@ -224,7 +228,15 @@ cron = (userObj) -> lvl++ expTally += (lvl*100)/5 userObj.history.exp.push { date: today, value: expTally } - userObj.lastCron = today # reset cron + + # Set the new user specs, and animate HP loss + [hpAfter, userObj.stats.hp] = [userObj.stats.hp, hpBefore] + user.set 'stats', userObj.stats + user.set 'history', userObj.history + window.DERBY.app.dom.clear() + window.DERBY.app.view.render(model) + setTimeout (-> user.set 'stats.hp', hpAfter), 1000 # animate hp loss + module.exports = { setModel: setModel