From 54af58baeeaa3d6ef22255fe08a00d0620b46533 Mon Sep 17 00:00:00 2001
From: Scott Erickson <sderickson@gmail.com>
Date: Wed, 14 May 2014 09:24:52 -0700
Subject: [PATCH] SuperModel no longer emits progress going backward ever, and
 added a way to prevent it from getting to high in the middle of a chain of
 loading.

---
 app/lib/LevelLoader.coffee   |  2 ++
 app/models/SuperModel.coffee | 11 +++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/app/lib/LevelLoader.coffee b/app/lib/LevelLoader.coffee
index 911ea698c..61e0a7918 100644
--- a/app/lib/LevelLoader.coffee
+++ b/app/lib/LevelLoader.coffee
@@ -25,6 +25,7 @@ module.exports = class LevelLoader extends CocoClass
     @t0 = new Date().getTime()
     super()
     @supermodel = options.supermodel
+    @supermodel.setMaxProgress 0.2
     @levelID = options.levelID
     @sessionID = options.sessionID
     @opponentSessionID = options.opponentSessionID
@@ -133,6 +134,7 @@ module.exports = class LevelLoader extends CocoClass
 
   onWorldNecessitiesLoaded: =>
     @initWorld()
+    @supermodel.clearMaxProgress()
     return if @headless and not @editorMode
     thangsToLoad = _.uniq( (t.spriteName for t in @world.thangs) )
     nameModelTuples = ([thangType.get('name'), thangType] for thangType in @thangNames.models)
diff --git a/app/models/SuperModel.coffee b/app/models/SuperModel.coffee
index 9545d2a4e..ef68d39c9 100644
--- a/app/models/SuperModel.coffee
+++ b/app/models/SuperModel.coffee
@@ -5,6 +5,7 @@ module.exports = class SuperModel extends Backbone.Model
     @progress = 0
     @resources = {}
     @rid = 0
+    @maxProgress = 1
 
     @models = {}
     @collections = {}
@@ -154,11 +155,17 @@ module.exports = class SuperModel extends Backbone.Model
     # a bunch of things load all at once.
     # So make sure we only emit events if @progress has changed.
     newProg = if @denom then @num / @denom else 1
-    return if @progress is newProg
+    newProg = Math.min @maxProgress, newProg
+    return if @progress >= newProg
     @progress = newProg
     @trigger('update-progress', @progress)
     @trigger('loaded-all') if @finished()
-
+    
+  setMaxProgress: (@maxProgress) ->
+  clearMaxProgress: ->
+    @maxProgress = 1
+    _.defer @updateProgress
+    
   getProgress: -> return @progress
 
   getResource: (rid) ->