This commit is contained in:
Nick Winter 2014-05-15 14:57:24 -07:00
commit b973b749c0
9 changed files with 22 additions and 12 deletions

View file

@ -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;

View file

@ -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

View file

@ -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."

View file

@ -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')

View file

@ -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

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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)