mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Add loading and playing to PlayGameDevLevelView
This commit is contained in:
parent
3a0695f59c
commit
1b7ac76b9f
4 changed files with 58 additions and 33 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue