Add loading and playing to PlayGameDevLevelView

This commit is contained in:
Scott Erickson 2016-07-13 11:43:25 -07:00
parent 3a0695f59c
commit 1b7ac76b9f
4 changed files with 58 additions and 33 deletions

View file

@ -1,4 +1,5 @@
CocoModel = require './CocoModel'
{createAetherOptions} = require 'lib/aether_utils'
module.exports = class LevelSession extends CocoModel
@className: 'LevelSession'
@ -93,3 +94,15 @@ module.exports = class LevelSession extends CocoModel
newTopScores.push oldTopScore
state.topScores = newTopScores
@set 'state', state
generateSpellsObject: ->
aetherOptions = createAetherOptions functionName: 'plan', codeLanguage: @get('codeLanguage')
spellThang = aether: new Aether aetherOptions
spells = "hero-placeholder/plan": thangs: {'Hero Placeholder': spellThang}, name: 'plan'
source = @get('code')['hero-placeholder'].plan
try
spellThang.aether.transpile source
catch e
console.log "Couldn't transpile!\n#{source}\n", e
spellThang.aether.transpile ''
spells

View file

@ -6,13 +6,24 @@
canvas(width=924, height=589)#normal-surface
.col-xs-3#info-col.style-flat
h1 Info
ul
li
b Level Name:
| #{view.level.get('name')}
li
b Creator:
| #{view.session.get('creatorName')}
if view.state.get('loading')
h1.m-y-1 Loading...
else
h1.m-y-1 Info
ul
li
b Level Name:
| #{view.level.get('name')}
li
b Creator:
| #{view.session.get('creatorName')}
- var playing = view.state.get('playing')
.m-y-3
if playing
button#play-btn.btn.btn-lg.btn-burgandy RESTART
else
button#play-btn.btn.btn-lg.btn-navy PLAY

View file

@ -78,7 +78,7 @@ module.exports = class VerifierTest extends CocoClass
@listenToOnce @god, 'infinite-loop', @fail
@listenToOnce @god, 'user-code-problem', @onUserCodeProblem
@listenToOnce @god, 'goals-calculated', @processSingleGameResults
@god.createWorld @generateSpellsObject()
@god.createWorld @session.generateSpellsObject()
@updateCallback? state: 'running'
processSingleGameResults: (e) ->
@ -118,18 +118,6 @@ module.exports = class VerifierTest extends CocoClass
@updateCallback? state: @state
@scheduleCleanup()
generateSpellsObject: ->
aetherOptions = createAetherOptions functionName: 'plan', codeLanguage: @session.get('codeLanguage')
spellThang = aether: new Aether aetherOptions
spells = "hero-placeholder/plan": thangs: {'Hero Placeholder': spellThang}, name: 'plan'
source = @session.get('code')['hero-placeholder'].plan
try
spellThang.aether.transpile source
catch e
console.log "Couldn't transpile!\n#{source}\n", e
spellThang.aether.transpile ''
spells
scheduleCleanup: ->
setTimeout @cleanup, 100

View file

@ -8,30 +8,40 @@ Surface = require 'lib/surface/Surface'
ThangType = require 'models/ThangType'
Level = require 'models/Level'
LevelSession = require 'models/LevelSession'
{createAetherOptions} = require 'lib/aether_utils'
State = require 'models/State'
TEAM = 'humans'
module.exports = class PlayGameDevLevelView extends RootView
id: 'play-game-dev-level-view'
template: require 'templates/play/level/play-game-dev-level-view'
subscriptions:
'level:started': 'onLevelStarted'
events:
'click #play-btn': 'onClickPlayButton'
initialize: (@options, @levelID, @sessionID) ->
@state = new State({
loading: true
})
@level = new Level()
@session = new LevelSession()
@gameUIState = new GameUIState()
@god = new God({ @gameUIState })
@levelLoader = new LevelLoader({ @supermodel, @levelID, @sessionID, observing: true })
@levelLoader = new LevelLoader({ @supermodel, @levelID, @sessionID, observing: true, team: TEAM })
@listenToOnce @levelLoader, 'world-necessities-loaded', @onWorldNecessitiesLoaded
@listenTo @levelLoader, 'world-necessity-load-failed', @onWorldNecessityLoadFailed
@listenTo @state, 'change', _.debounce(-> @renderSelectors('#info-col'))
onWorldNecessitiesLoaded: ->
{ @level, @session, @world, @classMap } = @levelLoader
levelObject = @level.serialize(@supermodel, @session)
@god.setLevel(levelObject)
@god.setWorldClassMap(@classMap)
@god.setWorldClassMap(@world.classMap)
@goalManager = new GoalManager(@world, @level.get('goals'), @team)
@god.setGoalManager(@goalManager)
me.team = TEAM
@session.set 'team', TEAM
onWorldNecessityLoadFailed: ->
# TODO: handle these and other failures with Promises
@ -43,9 +53,6 @@ module.exports = class PlayGameDevLevelView extends RootView
return unless @levelLoader.progress() is 1 # double check, since closing the guide may trigger this early
@levelLoader.destroy()
@levelLoader = null
@initSurface()
initSurface: ->
webGLSurface = @$('canvas#webgl-surface')
normalSurface = @$('canvas#normal-surface')
@surface = new Surface(@world, normalSurface, webGLSurface, {
@ -58,6 +65,12 @@ module.exports = class PlayGameDevLevelView extends RootView
@surface.camera.setBounds(bounds)
@surface.camera.zoomTo({x: 0, y: 0}, 0.1, 0)
@surface.setWorld(@world)
onLevelStarted: ->
@renderSelectors '#info-col'
@spells = @session.generateSpellsObject()
@state.set('loading', false)
onClickPlayButton: ->
@god.createWorld(@spells, false, true)
Backbone.Mediator.publish('playback:real-time-playback-started', {})
Backbone.Mediator.publish('level:set-playing', {playing: true})
@state.set('playing', true)