en-masse revive & reset

Conflicts:
	src/app/index.coffee
This commit is contained in:
Tyler Renelle 2013-01-21 12:06:12 -05:00
parent a9b79440ab
commit f2e47e9e4e

View file

@ -85,6 +85,9 @@ get '/', (page, model, next) ->
# ========== CONTROLLER FUNCTIONS ========== # ========== CONTROLLER FUNCTIONS ==========
ready (model) -> ready (model) ->
user = model.at('_user')
# Load all the jQuery, Growl, Tour, etc
browser.loadJavaScripts(model) browser.loadJavaScripts(model)
browser.setupSortable(model) browser.setupSortable(model)
browser.setupTooltips(model) browser.setupTooltips(model)
@ -96,7 +99,7 @@ ready (model) ->
require('../server/private').app(exports, model) require('../server/private').app(exports, model)
model.on 'set', '_user.tasks.*.completed', (i, completed, previous, isLocal, passed) -> user.on 'set', 'tasks.*.completed', (i, completed, previous, isLocal, passed) ->
return if passed? && passed.cron # Don't do this stuff on cron return if passed? && passed.cron # Don't do this stuff on cron
direction = () -> direction = () ->
return 'up' if completed==true and previous == false return 'up' if completed==true and previous == false
@ -104,21 +107,21 @@ ready (model) ->
throw new Error("Direction neither 'up' nor 'down' on checkbox set.") throw new Error("Direction neither 'up' nor 'down' on checkbox set.")
# Score the user based on todo task # Score the user based on todo task
task = model.at("_user.tasks.#{i}") task = user.at("tasks.#{i}")
scoring.score(i, direction()) scoring.score(i, direction())
# Then move the todos to/from _todoList/_completedList # Then move the todos to/from _todoList/_completedList
if task.get('type') == 'todo' if task.get('type') == 'todo'
[from, to] = if (direction()=='up') then ['todo', 'completed'] else ['completed', 'todo'] [from, to] = if (direction()=='up') then ['todo', 'completed'] else ['completed', 'todo']
[from, to] = ["_user.#{from}Ids", "_user.#{to}Ids"] [from, to] = ["#{from}Ids", "#{to}Ids"]
# Remove from source (just remove the id from id-list) # Remove from source (just remove the id from id-list)
fromIds = model.get(from) fromIds = user.get(from)
fromIds.splice(fromIds.indexOf(i), 1) fromIds.splice(fromIds.indexOf(i), 1)
model.set from, fromIds user.set from, fromIds
# Push to target (just the id to id-list) # Push to target (just the id to id-list)
toIds = model.get(to) toIds = model.get(to)
toIds.push i toIds.push i
model.set to, toIds user.set to, toIds
exports.addTask = (e, el, next) -> exports.addTask = (e, el, next) ->
type = $(el).attr('data-task-type') type = $(el).attr('data-task-type')
@ -173,8 +176,8 @@ ready (model) ->
exports.clearCompleted = (e, el) -> exports.clearCompleted = (e, el) ->
_.each model.get('_completedList'), (task) -> _.each model.get('_completedList'), (task) ->
model.del('_user.tasks.'+task.id) user.del('tasks.'+task.id)
model.set('_user.completedIds', []) user.set('completedIds', [])
exports.toggleDay = (e, el) -> exports.toggleDay = (e, el) ->
task = model.at(e.target) task = model.at(e.target)
@ -224,10 +227,10 @@ ready (model) ->
user.set 'stats.money', money - value user.set 'stats.money', money - value
if type == 'armor' if type == 'armor'
user.set 'items.armor', index user.set 'items.armor', index
model.set '_view.items.armor', content.items.armor[parseInt(index) + 1] model.set '_items.armor', content.items.armor[parseInt(index) + 1]
else if type == 'weapon' else if type == 'weapon'
user.set 'items.weapon', index user.set 'items.weapon', index
model.set '_view.items.weapon', content.items.weapon[parseInt(index) + 1] model.set '_items.weapon', content.items.weapon[parseInt(index) + 1]
else if type == 'potion' else if type == 'potion'
hp = user.get 'stats.hp' hp = user.get 'stats.hp'
hp += 15 hp += 15
@ -239,42 +242,47 @@ ready (model) ->
direction = 'up' if direction == 'true/' direction = 'up' if direction == 'true/'
direction = 'down' if direction == 'false/' direction = 'down' if direction == 'false/'
task = model.at $(el).parents('li')[0] task = model.at $(el).parents('li')[0]
scoring.score(task.get('id'), direction) scoring.score(task.get('id'), direction)
exports.revive = (e, el) ->
user = model.at('_user'); userObj = user.get()
revive = (userObj) ->
# Reset stats # Reset stats
userObj.stats.lvl = 1; userObj.stats.money = 0; userObj.stats.exp = 0 userObj.stats.lvl = 1; userObj.stats.money = 0; userObj.stats.exp = 0
user.set 'stats', userObj.stats
# Reset items # Reset items
userObj.items.armor = 0; userObj.items.weapon = 0 userObj.items.armor = 0; userObj.items.weapon = 0
user.set 'items', userObj.items
# Reset item store # Reset item store
model.set '_view.items.armor', content.items.armor[1] model.set '_view.items.armor', content.items.armor[1]
model.set '_view.items.weapon', content.items.weapon[1] model.set '_view.items.weapon', content.items.weapon[1]
exports.revive = (e, el) ->
userObj = user.get()
revive(userObj)
user.set 'stats', userObj.stats
user.set 'items', userObj.items
# Re-render (since we replaced objects en-masse, see https://github.com/lefnire/habitrpg/issues/80) # Re-render (since we replaced objects en-masse, see https://github.com/lefnire/habitrpg/issues/80)
view.render(model) view.render(model)
setTimeout (-> user.set('stats.hp', 50)), 0 # we want this animated setTimeout (-> user.set('stats.hp', 50)), 0 # we want this animated
exports.reset = (e, el) -> exports.reset = (e, el) ->
model.set '_user.tasks', {} userObj = user.get()
_.each ['habit', 'daily', 'todo', 'completed', 'reward'], (type) -> taskTypes = ['habit', 'daily', 'todo', 'completed', 'reward']
model.set "_user.#{type}Ids", [] userObj.tasks = {}
model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" _.each taskTypes, (type) -> userObj["#{type}Ids"] = []
model.set('_user.stats.hp', 50) userObj.balance = 2 if userObj.balance < 2 #only if they haven't manually bought tokens
model.set('_user.stats.money', 0) revive(userObj)
model.set('_user.stats.exp', 0)
model.set('_user.stats.lvl', 1) # Set new user
model.set('_user.items.armor',0) model.set "users.#{userObj.id}", userObj
model.set('_user.items.weapon',0)
model.set('_user.balance', 2) if model.get('_user.balance') < 2 #only if they haven't manually bought tokens # Re-render (since we replaced objects en-masse, see https://github.com/lefnire/habitrpg/issues/80)
_.each taskTypes, (type) -> model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids"
view.render(model)
setTimeout (-> user.set('stats.hp', 50)), 0 # we want this animated
exports.closeKickstarterNofitication = (e, el) -> exports.closeKickstarterNofitication = (e, el) ->
model.set('_user.notifications.kickstarter', 'hide') user.set('notifications.kickstarter', 'hide')
# ========== CRON ========== # ========== CRON ==========