Merged.
This commit is contained in:
commit
b973b749c0
9 changed files with 22 additions and 12 deletions
app
assets/javascripts/workers
lib
views/play
headless_client
|
@ -268,6 +268,7 @@ self.setupDebugWorldToRunUntilFrame = function (args) {
|
||||||
if (!self.debugWorld || userCodeMapHasChanged || args.frame < self.currentDebugWorldFrame) {
|
if (!self.debugWorld || userCodeMapHasChanged || args.frame < self.currentDebugWorldFrame) {
|
||||||
try {
|
try {
|
||||||
self.debugWorld = new World(args.userCodeMap);
|
self.debugWorld = new World(args.userCodeMap);
|
||||||
|
self.debugWorld.levelSessionIDs = args.levelSessionIDs;
|
||||||
if (args.level)
|
if (args.level)
|
||||||
self.debugWorld.loadFromLevel(args.level, true);
|
self.debugWorld.loadFromLevel(args.level, true);
|
||||||
self.debugWorld.debugging = true;
|
self.debugWorld.debugging = true;
|
||||||
|
@ -320,6 +321,7 @@ self.runWorld = function runWorld(args) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
self.world = new World(args.userCodeMap);
|
self.world = new World(args.userCodeMap);
|
||||||
|
self.world.levelSessionIDs = args.levelSessionIDs;
|
||||||
if(args.level)
|
if(args.level)
|
||||||
self.world.loadFromLevel(args.level, true);
|
self.world.loadFromLevel(args.level, true);
|
||||||
self.world.preloading = args.preload;
|
self.world.preloading = args.preload;
|
||||||
|
|
|
@ -46,6 +46,7 @@ module.exports = class God extends CocoClass
|
||||||
super()
|
super()
|
||||||
|
|
||||||
setLevel: (@level) ->
|
setLevel: (@level) ->
|
||||||
|
setLevelSessionIDs: (@levelSessionIDs) ->
|
||||||
setGoalManager: (goalManager) -> @angelsShare.goalManager = goalManager
|
setGoalManager: (goalManager) -> @angelsShare.goalManager = goalManager
|
||||||
setWorldClassMap: (worldClassMap) -> @angelsShare.worldClassMap = worldClassMap
|
setWorldClassMap: (worldClassMap) -> @angelsShare.worldClassMap = worldClassMap
|
||||||
|
|
||||||
|
@ -73,6 +74,7 @@ module.exports = class God extends CocoClass
|
||||||
@angelsShare.workQueue.push
|
@angelsShare.workQueue.push
|
||||||
userCodeMap: userCodeMap
|
userCodeMap: userCodeMap
|
||||||
level: @level
|
level: @level
|
||||||
|
levelSessionIDs: @levelSessionIDs
|
||||||
goals: @angelsShare.goalManager?.getGoals()
|
goals: @angelsShare.goalManager?.getGoals()
|
||||||
headless: @angelsShare.headless
|
headless: @angelsShare.headless
|
||||||
preload: preload
|
preload: preload
|
||||||
|
@ -99,6 +101,7 @@ module.exports = class God extends CocoClass
|
||||||
args:
|
args:
|
||||||
userCodeMap: @currentUserCodeMap
|
userCodeMap: @currentUserCodeMap
|
||||||
level: @level
|
level: @level
|
||||||
|
levelSessionIDs: @levelSessionIDs
|
||||||
goals: @goalManager?.getGoals()
|
goals: @goalManager?.getGoals()
|
||||||
frame: args.frame
|
frame: args.frame
|
||||||
currentThangID: args.thangID
|
currentThangID: args.thangID
|
||||||
|
|
|
@ -239,6 +239,7 @@ module.exports = class LevelLoader extends CocoClass
|
||||||
return if @initialized
|
return if @initialized
|
||||||
@initialized = true
|
@initialized = true
|
||||||
@world = new World()
|
@world = new World()
|
||||||
|
@world.levelSessionIDs = if @opponentSessionID then [@sessionID, @opponentSessionID] else [@sessionID]
|
||||||
serializedLevel = @level.serialize(@supermodel)
|
serializedLevel = @level.serialize(@supermodel)
|
||||||
@world.loadFromLevel serializedLevel, false
|
@world.loadFromLevel serializedLevel, false
|
||||||
console.log "World has been initialized from level loader."
|
console.log "World has been initialized from level loader."
|
||||||
|
|
|
@ -103,6 +103,7 @@ module.exports = class Simulator extends CocoClass
|
||||||
|
|
||||||
setupGod: ->
|
setupGod: ->
|
||||||
@god.setLevel @level.serialize @supermodel
|
@god.setLevel @level.serialize @supermodel
|
||||||
|
@god.setLevelSessionIDs (session.id for session in @task.getSessions())
|
||||||
@god.setWorldClassMap @world.classMap
|
@god.setWorldClassMap @world.classMap
|
||||||
@god.setGoalManager new GoalManager(@world, @level.get 'goals')
|
@god.setGoalManager new GoalManager(@world, @level.get 'goals')
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
# If we ever need a seedable PRNG, we can use this.
|
|
||||||
# http://coffeescriptcookbook.com/chapters/math/generating-predictable-random-numbers
|
# http://coffeescriptcookbook.com/chapters/math/generating-predictable-random-numbers
|
||||||
class Rand
|
class Rand
|
||||||
@className: "Rand"
|
@className: "Rand"
|
||||||
# if created without a seed, uses current time as seed
|
# If created without a seed, uses current time as seed.
|
||||||
constructor: (@seed) ->
|
constructor: (@seed) ->
|
||||||
# Knuth and Lewis' improvements to Park and Miller's LCPRNG
|
# Knuth and Lewis' improvements to Park and Miller's LCPRNG
|
||||||
@multiplier = 1664525
|
@multiplier = 1664525
|
||||||
|
@ -11,9 +10,9 @@ class Rand
|
||||||
unless @seed? and 0 <= seed < @modulo
|
unless @seed? and 0 <= seed < @modulo
|
||||||
@seed = (new Date().valueOf() * new Date().getMilliseconds()) % @modulo
|
@seed = (new Date().valueOf() * new Date().getMilliseconds()) % @modulo
|
||||||
|
|
||||||
# sets new seed value
|
# sets new seed value, even handling negative numbers
|
||||||
seed: (seed) ->
|
setSeed: (seed) ->
|
||||||
@seed = seed
|
@seed = ((seed % @modulo) + @modulo) % @modulo
|
||||||
|
|
||||||
# return a random integer 0 <= n < @modulo
|
# return a random integer 0 <= n < @modulo
|
||||||
randn: =>
|
randn: =>
|
||||||
|
@ -32,4 +31,4 @@ class Rand
|
||||||
rand2: (min, max) =>
|
rand2: (min, max) =>
|
||||||
min + @rand max - min
|
min + @rand max - min
|
||||||
|
|
||||||
module.exports = Rand
|
module.exports = Rand
|
||||||
|
|
|
@ -30,7 +30,7 @@ module.exports = class World
|
||||||
@systems = []
|
@systems = []
|
||||||
@systemMap = {}
|
@systemMap = {}
|
||||||
@scriptNotes = []
|
@scriptNotes = []
|
||||||
@rand = new Rand 0
|
@rand = new Rand 0 # Existence System may change this seed
|
||||||
@frames = [new WorldFrame(@, 0)]
|
@frames = [new WorldFrame(@, 0)]
|
||||||
|
|
||||||
getFrame: (frameIndex) ->
|
getFrame: (frameIndex) ->
|
||||||
|
@ -405,7 +405,7 @@ module.exports = class World
|
||||||
return
|
return
|
||||||
@finishDeserializing w, finishedWorldCallback, perf
|
@finishDeserializing w, finishedWorldCallback, perf
|
||||||
|
|
||||||
@finishDeserializing: (w, finishedWorldCallback, perf) =>
|
@finishDeserializing: (w, finishedWorldCallback, perf) ->
|
||||||
perf.t4 = now()
|
perf.t4 = now()
|
||||||
w.ended = true
|
w.ended = true
|
||||||
w.getFrame(w.totalFrames - 1).restoreState()
|
w.getFrame(w.totalFrames - 1).restoreState()
|
||||||
|
|
|
@ -100,9 +100,10 @@ module.exports = class PlayLevelView extends View
|
||||||
@supermodel.models = givenSupermodel.models
|
@supermodel.models = givenSupermodel.models
|
||||||
@supermodel.collections = givenSupermodel.collections
|
@supermodel.collections = givenSupermodel.collections
|
||||||
@supermodel.shouldSaveBackups = givenSupermodel.shouldSaveBackups
|
@supermodel.shouldSaveBackups = givenSupermodel.shouldSaveBackups
|
||||||
@god?.level = @level.serialize @supermodel
|
|
||||||
|
serializedLevel = @level.serialize @supermodel
|
||||||
|
@god?.setLevel serializedLevel
|
||||||
if @world
|
if @world
|
||||||
serializedLevel = @level.serialize(@supermodel)
|
|
||||||
@world.loadFromLevel serializedLevel, false
|
@world.loadFromLevel serializedLevel, false
|
||||||
else
|
else
|
||||||
@load()
|
@load()
|
||||||
|
@ -149,6 +150,7 @@ module.exports = class PlayLevelView extends View
|
||||||
team = @getQueryVariable("team") ? @world.teamForPlayer(0)
|
team = @getQueryVariable("team") ? @world.teamForPlayer(0)
|
||||||
@loadOpponentTeam(team)
|
@loadOpponentTeam(team)
|
||||||
@god.setLevel @level.serialize @supermodel
|
@god.setLevel @level.serialize @supermodel
|
||||||
|
@god.setLevelSessionIDs if @otherSession then [@session.id, @otherSession.id] else [@session.id]
|
||||||
@god.setWorldClassMap @world.classMap
|
@god.setWorldClassMap @world.classMap
|
||||||
@setTeam team
|
@setTeam team
|
||||||
@initGoalManager()
|
@initGoalManager()
|
||||||
|
|
|
@ -90,9 +90,9 @@ module.exports = class SpectateLevelView extends View
|
||||||
application.router.navigate "/play?not_found=#{@levelID}", {trigger: true}
|
application.router.navigate "/play?not_found=#{@levelID}", {trigger: true}
|
||||||
|
|
||||||
setLevel: (@level, @supermodel) ->
|
setLevel: (@level, @supermodel) ->
|
||||||
@god?.level = @level.serialize @supermodel
|
serializedLevel = @level.serialize @supermodel
|
||||||
|
@god?.setLevel serializedLevel
|
||||||
if @world
|
if @world
|
||||||
serializedLevel = @level.serialize(@supermodel)
|
|
||||||
@world.loadFromLevel serializedLevel, false
|
@world.loadFromLevel serializedLevel, false
|
||||||
else
|
else
|
||||||
@load()
|
@load()
|
||||||
|
@ -156,6 +156,7 @@ module.exports = class SpectateLevelView extends View
|
||||||
team = @world.teamForPlayer(0)
|
team = @world.teamForPlayer(0)
|
||||||
@loadOpponentTeam(team)
|
@loadOpponentTeam(team)
|
||||||
@god.setLevel @level.serialize @supermodel
|
@god.setLevel @level.serialize @supermodel
|
||||||
|
@god.setLevelSessionIDs if @otherSession then [@session.id, @otherSession.id] else [@session.id]
|
||||||
@god.setWorldClassMap @world.classMap
|
@god.setWorldClassMap @world.classMap
|
||||||
@setTeam team
|
@setTeam team
|
||||||
@initSurface()
|
@initSurface()
|
||||||
|
|
|
@ -78,6 +78,7 @@ work = () ->
|
||||||
|
|
||||||
try
|
try
|
||||||
self.world = new World(args.userCodeMap)
|
self.world = new World(args.userCodeMap)
|
||||||
|
self.world.levelSessionIDs = args.levelSessionIDs
|
||||||
self.world.loadFromLevel args.level, true if args.level
|
self.world.loadFromLevel args.level, true if args.level
|
||||||
self.world.headless = args.headless
|
self.world.headless = args.headless
|
||||||
self.goalManager = new GoalManager(self.world)
|
self.goalManager = new GoalManager(self.world)
|
||||||
|
|
Reference in a new issue