Skip to content

Commit

Permalink
Merge pull request #54 from bryanedds/development
Browse files Browse the repository at this point in the history
Fixed 'NuEdit Undo / Redo Destabilized in V1.0 #53'.

Former-commit-id: b0b410f
  • Loading branch information
bryanedds committed Sep 7, 2015
2 parents f162569 + 699dbf3 commit 8d5ad35
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Nu/Nu/Nu/SimulationTypes.fs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ and Subsystem =
/// Enqueue a message for the subsystem.
abstract EnqueueMessage : SubsystemMessage -> Subsystem
/// Processed the queued messages with the subsystem.
abstract ProcessMessages : World -> SubsystemResult * Subsystem
abstract ProcessMessages : World -> SubsystemResult * Subsystem * World
/// Apply the result of the message processing to the world.
abstract ApplyResult : SubsystemResult -> World -> World
/// Clean up any resources used by the subsystem.
Expand Down
2 changes: 1 addition & 1 deletion Nu/Nu/Nu/World.fs
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ module WorldModule =
List.filter (fun (_, subsystem) -> subsystem.SubsystemType = subsystemType) |>
List.sortBy (fun (_, subsystem) -> subsystem.SubsystemOrder) |>
List.fold (fun world (subsystemName, subsystem) ->
let (subsystemResult, subsystem) = subsystem.ProcessMessages world
let (subsystemResult, subsystem, world) = subsystem.ProcessMessages world
let world = subsystem.ApplyResult subsystemResult world
World.setSubsystem subsystem subsystemName world)
world
Expand Down
2 changes: 1 addition & 1 deletion Nu/Nu/Nu/WorldAudio.fs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type [<ReferenceEquality>] AudioPlayerSubsystem =
member this.SubsystemOrder = this.SubsystemOrder
member this.ClearMessages () = { this with AudioPlayer = this.AudioPlayer.ClearMessages () } :> Subsystem
member this.EnqueueMessage message = { this with AudioPlayer = this.AudioPlayer.EnqueueMessage (message :?> AudioMessage) } :> Subsystem
member this.ProcessMessages _ = (() :> obj, { this with AudioPlayer = this.AudioPlayer.Play () } :> Subsystem)
member this.ProcessMessages world = (() :> obj, { this with AudioPlayer = this.AudioPlayer.Play () } :> Subsystem, world)
member this.ApplyResult _ world = world
member this.CleanUp world = (this :> Subsystem, world)

Expand Down
2 changes: 1 addition & 1 deletion Nu/Nu/Nu/WorldPhysics.fs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ type [<ReferenceEquality>] PhysicsEngineSubsystem =
member this.ProcessMessages world =
let tickRate = World.getTickRate world
let (integrationMessages, physicsEngine) = this.PhysicsEngine.Integrate tickRate
(integrationMessages :> obj, { this with PhysicsEngine = physicsEngine } :> Subsystem)
(integrationMessages :> obj, { this with PhysicsEngine = physicsEngine } :> Subsystem, world)

member this.ApplyResult integrationMessages world =
let integrationMessages = integrationMessages :?> IntegrationMessage list
Expand Down
25 changes: 15 additions & 10 deletions Nu/Nu/Nu/WorldRender.fs
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,23 @@ type [<ReferenceEquality>] RendererSubsystem =
| Some selectedScreen ->
if World.containsScreen selectedScreen world then
let viewBounds = World.getCameraBy Camera.getViewBoundsRelative world
let (world, entityTree) = MutantCache.getMutant (fun () -> World.rebuildEntityTree selectedScreen world) world (selectedScreen.GetEntityTree world)
let entities = QuadTree.getElementsNearBounds viewBounds entityTree
let (world, quadTree, entityTree) = MutantCache.getMutant (fun () -> World.rebuildEntityTree selectedScreen world) world (selectedScreen.GetEntityTree world)
let screenState = World.getScreenState selectedScreen world
let screenState = { screenState with EntityTree = entityTree }
let world = World.setScreenState screenState selectedScreen world
let entities = QuadTree.getElementsNearBounds viewBounds quadTree
let descriptors =
entities |>
List.choose (fun entity -> if entity.GetVisible world then Some ^ World.getEntityRenderDescriptors entity world else None) |>
List.concat
match selectedScreen.GetTransitionStateNp world with
| IncomingState -> descriptors @ RendererSubsystem.getScreenTransitionRenderDescriptors (World.getCamera world) selectedScreen (selectedScreen.GetIncoming world) world
| OutgoingState -> descriptors @ RendererSubsystem.getScreenTransitionRenderDescriptors (World.getCamera world) selectedScreen (selectedScreen.GetOutgoing world) world
| IdlingState -> descriptors
else []
| None -> []
let descriptors =
match selectedScreen.GetTransitionStateNp world with
| IncomingState -> descriptors @ RendererSubsystem.getScreenTransitionRenderDescriptors (World.getCamera world) selectedScreen (selectedScreen.GetIncoming world) world
| OutgoingState -> descriptors @ RendererSubsystem.getScreenTransitionRenderDescriptors (World.getCamera world) selectedScreen (selectedScreen.GetOutgoing world) world
| IdlingState -> descriptors
(descriptors, world)
else ([], world)
| None -> ([], world)

interface Subsystem with
member this.SubsystemType = RenderType
Expand All @@ -58,8 +63,8 @@ type [<ReferenceEquality>] RendererSubsystem =

member this.ProcessMessages world =
let camera = World.getCamera world
let renderDescriptors = RendererSubsystem.getRenderDescriptors world
(() :> obj, { this with Renderer = this.Renderer.Render camera renderDescriptors } :> Subsystem)
let (renderDescriptors, world) = RendererSubsystem.getRenderDescriptors world
(() :> obj, { this with Renderer = this.Renderer.Render camera renderDescriptors } :> Subsystem, world)

member this.ApplyResult _ world = world
member this.CleanUp world = (this :> Subsystem, world)
Expand Down
2 changes: 1 addition & 1 deletion Prime/Prime/Prime/MutantCache.fs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ module MutantCache =
let getMutant rebuildMutant (context : 'c) (mutantCache : 'm MutantCache) =
let (context, mutantUncloned, mutantCache) = getMutantUncloned rebuildMutant context mutantCache
let mutantCloned = mutantCache.CloneMutant mutantUncloned
(context, mutantCloned)
(context, mutantCloned, mutantCache)

let mutateMutant rebuildMutant mutateMutant (context : 'c) (mutantCache : 'm MutantCache) : 'c * 'm MutantCache =
let (context, mutant, mutantCache) = getMutantUncloned rebuildMutant context mutantCache
Expand Down

0 comments on commit 8d5ad35

Please sign in to comment.