From cd5643494543b613de016a06419338c4999baba5 Mon Sep 17 00:00:00 2001 From: bryanedds Date: Tue, 15 Mar 2016 16:33:25 -0400 Subject: [PATCH] Slight code re-org. Updated Prime. Former-commit-id: ba0bda077c4d6fca22d197485d3e6ecfb19fb9f5 --- Nu/Nu/Nu/Nu.fsproj | 1 - Nu/Nu/Nu/WorldDispatchers.fs | 14 +++++++------- Nu/Nu/Nu/WorldEvents.fs | 14 +++++--------- Nu/Nu/Nu/WorldGame.fs | 28 ++++++++++++++++++++++++++++ Nu/Nu/Nu/WorldObservation.fs | 10 ++++++---- Nu/Nu/Nu/WorldSimulant.fs | 27 --------------------------- Nu/Prime/Debug/Prime.exe | Bin 544768 -> 544768 bytes Nu/Prime/Debug/Prime.pdb | Bin 597504 -> 597504 bytes Nu/Prime/Release/Prime.exe | Bin 572416 -> 572416 bytes Nu/Prime/Release/Prime.pdb | Bin 558592 -> 558592 bytes 10 files changed, 46 insertions(+), 48 deletions(-) delete mode 100644 Nu/Nu/Nu/WorldSimulant.fs diff --git a/Nu/Nu/Nu/Nu.fsproj b/Nu/Nu/Nu/Nu.fsproj index d27abe0774..ab674a4382 100644 --- a/Nu/Nu/Nu/Nu.fsproj +++ b/Nu/Nu/Nu/Nu.fsproj @@ -89,7 +89,6 @@ - diff --git a/Nu/Nu/Nu/WorldDispatchers.fs b/Nu/Nu/Nu/WorldDispatchers.fs index 026ec85d32..b230ea9457 100644 --- a/Nu/Nu/Nu/WorldDispatchers.fs +++ b/Nu/Nu/Nu/WorldDispatchers.fs @@ -366,7 +366,7 @@ module GuiDispatcherModule = let gui = evt.Subscriber : Entity let data = evt.Data : MouseButtonData let handling = - if World.isSimulantSelected gui world && gui.GetVisible world then + if World.isEntitySelected gui world && gui.GetVisible world then let mousePositionWorld = World.getCameraBy (Camera.mouseToWorld (gui.GetViewType world) data.Position) world if data.Down && gui.GetSwallowMouseLeft world && @@ -407,7 +407,7 @@ module ButtonDispatcherModule = let handleMouseLeftDown evt world = let button = evt.Subscriber : Entity let data = evt.Data : MouseButtonData - if World.isSimulantSelected button world then + if World.isEntitySelected button world then let mousePositionWorld = World.getCameraBy (Camera.mouseToWorld (button.GetViewType world) data.Position) world if button.GetVisible world && Math.isPointInBounds mousePositionWorld (button.GetBounds world) then @@ -423,7 +423,7 @@ module ButtonDispatcherModule = let handleMouseLeftUp evt world = let button = evt.Subscriber : Entity let data = evt.Data : MouseButtonData - if World.isSimulantSelected button world then + if World.isEntitySelected button world then let wasDown = button.GetDown world let world = button.SetDown false world let mousePositionWorld = World.getCameraBy (Camera.mouseToWorld (button.GetViewType world) data.Position) world @@ -595,7 +595,7 @@ module ToggleDispatcherModule = let handleMouseLeftDown evt world = let toggle = evt.Subscriber : Entity let data = evt.Data : MouseButtonData - if World.isSimulantSelected toggle world then + if World.isEntitySelected toggle world then let mousePositionWorld = World.getCameraBy (Camera.mouseToWorld (toggle.GetViewType world) data.Position) world if toggle.GetVisible world && Math.isPointInBounds mousePositionWorld (toggle.GetBounds world) then @@ -609,7 +609,7 @@ module ToggleDispatcherModule = let handleMouseLeftUp evt world = let toggle = evt.Subscriber : Entity let data = evt.Data : MouseButtonData - if World.isSimulantSelected toggle world then + if World.isEntitySelected toggle world then let wasPressed = toggle.GetPressed world let world = toggle.SetPressed false world let mousePositionWorld = World.getCameraBy (Camera.mouseToWorld (toggle.GetViewType world) data.Position) world @@ -678,7 +678,7 @@ module FeelerDispatcherModule = let handleMouseLeftDown evt world = let feeler = evt.Subscriber : Entity let data = evt.Data : MouseButtonData - if World.isSimulantSelected feeler world then + if World.isEntitySelected feeler world then let mousePositionWorld = World.getCameraBy (Camera.mouseToWorld (feeler.GetViewType world) data.Position) world if feeler.GetVisible world && Math.isPointInBounds mousePositionWorld (feeler.GetBounds world) then @@ -694,7 +694,7 @@ module FeelerDispatcherModule = let handleMouseLeftUp evt world = let feeler = evt.Subscriber : Entity let data = evt.Data : MouseButtonData - if World.isSimulantSelected feeler world && feeler.GetVisible world then + if World.isEntitySelected feeler world && feeler.GetVisible world then if feeler.GetEnabled world then let world = feeler.SetTouched false world let eventTrace = EventTrace.record "FeelerDispatcher" "handleMouseLeftDown" EventTrace.empty diff --git a/Nu/Nu/Nu/WorldEvents.fs b/Nu/Nu/Nu/WorldEvents.fs index f962c8cc50..ee1d5da628 100644 --- a/Nu/Nu/Nu/WorldEvents.fs +++ b/Nu/Nu/Nu/WorldEvents.fs @@ -23,10 +23,6 @@ type [] KeyboardKeyData = Repeated : bool Down : bool } -/// The data for a change in a simulant. -type SimulantChangeData<'s, 'w when 's :> Simulant and 'w :> 'w Eventable> = - ParticipantChangeData<'s, 'w> - /// The data for a collision event. type [] CollisionData = { Normal : Vector2 @@ -35,7 +31,7 @@ type [] CollisionData = /// The data for a change in the world's ambient state. /// NOTE: I couldn't give its field the more normal name of 'OldWorld' due to field name conflicts with the more -/// pervasive SimulantChangeData type below. +/// pervasive ParticipantChangeData type. type [] AmbientStateChangeData = { OldWorldWithOldState : World } @@ -90,16 +86,16 @@ module Events = let AmbientState = ntoa !!"AmbientState" let AmbientStateChange = AmbientState -<- ntoa !!"Change" let Game = ntoa !!"Game" - let GameChange = Game -<- ntoa> !!"Change" + let GameChange = Game -<- ntoa> !!"Change" let Screen = ntoa !!"Screen" let ScreenAdd = Screen -<- ntoa !!"Add" let ScreenRemoving = Screen -<- ntoa !!"Removing" - let ScreenChange = Screen -<- ntoa> !!"Change" + let ScreenChange = Screen -<- ntoa> !!"Change" let Group = ntoa !!"Group" let GroupAdd = Group -<- ntoa !!"Add" let GroupRemoving = Group -<- ntoa !!"Removing" - let GroupChange = Group -<- ntoa> !!"Change" + let GroupChange = Group -<- ntoa> !!"Change" let Entity = ntoa !!"Entity" let EntityAdd = Entity -<- ntoa !!"Add" let EntityRemoving = Entity -<- ntoa !!"Removing" - let EntityChange = Entity -<- ntoa> !!"Change" \ No newline at end of file + let EntityChange = Entity -<- ntoa> !!"Change" \ No newline at end of file diff --git a/Nu/Nu/Nu/WorldGame.fs b/Nu/Nu/Nu/WorldGame.fs index 10887494f2..12d95fb8df 100644 --- a/Nu/Nu/Nu/WorldGame.fs +++ b/Nu/Nu/Nu/WorldGame.fs @@ -88,6 +88,34 @@ module WorldGameModule = static member setSelectedScreen screen world = World.setOptSelectedScreen (Some screen) world + /// Determine if an entity is selected by being in a group of the currently selected screeen. + static member isEntitySelected entity world = + let screenName = Address.head entity.EntityAddress + match World.getOptSelectedScreen world with + | Some selectedScreen -> screenName = selectedScreen.ScreenName + | None -> false + + /// Determine if a group is selected by being in the currently selected screeen. + static member isGroupSelected group world = + let screenName = Address.head group.GroupAddress + match World.getOptSelectedScreen world with + | Some selectedScreen -> screenName = selectedScreen.ScreenName + | None -> false + + /// Determine if a screen is the currently selected screeen. + static member isScreenSelected screen world = + World.getOptSelectedScreen world = Some screen + + /// Determine if a simulant is contained by, or is the same as, the currently selected screen. + /// Game is always considered 'selected' as well. + static member isSimulantSelected (simulant : Simulant) world = + match Address.getNames simulant.SimulantAddress with + | [] -> true + | screenName :: _ -> + match World.getOptSelectedScreen world with + | Some screen -> screen.ScreenName = screenName + | None -> false + /// Write a game to an xml writer. static member writeGame (writer : XmlWriter) world = let gameState = World.getGameState world diff --git a/Nu/Nu/Nu/WorldObservation.fs b/Nu/Nu/Nu/WorldObservation.fs index 63b5317b7e..b20f28e2f4 100644 --- a/Nu/Nu/Nu/WorldObservation.fs +++ b/Nu/Nu/Nu/WorldObservation.fs @@ -18,11 +18,13 @@ module Observation = observation |> organize (fun _ world -> World.getUpdateCount world) |> toFst |> choose /// Take events from an observation only while World.isTicking evaluates to true. - let [] isTicking _ world = World.isTicking world + let [] isTicking _ world = + World.isTicking world - /// Take events from an observation only when the observer is selected in the world (see - /// documentation for World.isAddressSelected for what this means (it's very useful!)). - let [] isObserverSelected evt world = World.isSimulantSelected evt.Subscriber world + /// Take events from an observation only when the observer is contained by, or is the same as, + /// the currently selected screen. Game is always considered 'selected' as well. + let [] isObserverSelected evt world = + World.isSimulantSelected evt.Subscriber world /// Take events from an observation only when the currently selected screen is idling (that /// is, there is no screen transition in progress). diff --git a/Nu/Nu/Nu/WorldSimulant.fs b/Nu/Nu/Nu/WorldSimulant.fs deleted file mode 100644 index 3464557c64..0000000000 --- a/Nu/Nu/Nu/WorldSimulant.fs +++ /dev/null @@ -1,27 +0,0 @@ -// Nu Game Engine. -// Copyright (C) Bryan Edds, 2012-2016. - -namespace Nu -open System -open Prime -open Nu - -[] -module WorldSimulantModule = - - type World with - - /// Query that the world contains a simulant. - static member containsSimulant<'a when 'a :> Simulant> (simulant : 'a) world = - (world :> World Eventable).ContainsParticipant simulant - - /// Query that a simulant is the either currently selected screen or contained by it. - static member isSimulantSelected<'s when 's :> Simulant> (simulant : 's) world = - let optScreen = World.getOptSelectedScreen world - let optScreenNames = Option.map (fun (screen : Screen) -> Address.getNames screen.ScreenAddress) optScreen - let simulantNames = Address.getNames simulant.SimulantAddress - match (simulantNames, optScreenNames) with - | ([], _) -> true - | (_, None) -> false - | (_, Some []) -> false - | (addressHead :: _, Some (screenAddressHead :: _)) -> addressHead = screenAddressHead \ No newline at end of file diff --git a/Nu/Prime/Debug/Prime.exe b/Nu/Prime/Debug/Prime.exe index ca2c3a604825f5ba8aadb1a2a320fe75d945a0bb..55863f95549005ea36d4bd63095d99704c500b3d 100644 GIT binary patch delta 329 zcmZozpxCfLaY6_4`2)`zyIZ>%w{|n_UC#J;yXOj~^;|&u=O(6nKE}t>GY>M&mwc?l z#K6FClWnUBkYc#a)}zA+rXNpNJj5gpmA(s=z7LhY&-QqFAVT^fRQfSg`Z3$%?Tv?+ zoLBGzoe(x7BG7cXD|0iD-F`WX8Hic7U(RCX*uvC9W%+<;uKt!!*; zKyKh}woD+kdpBDnkh0ywmIkDj>|rYfQc`=_5`a|oUa;KXy=<{SUi3b&+{Jxhl@|NK zymkA*ay$pvk{BJ@^AE6X&p*KK*$N7m>APJyBt?Xql3&bza>sLZ`gMjWK`L88KA&z_ N#-hHR-;LuVCjjoGb|(M; delta 329 zcmZozpxCfLaY6^PvD>r8?$&O`t=&v}moxs{?zw_#Jr|Jvxrr&CkMZa9%!5qxC4cHL zF)%RPWZP;2q!@0q_2@8y>7UaT4>5^DrSC$e??a{Uv;CYNh>(5=m3|DBe$4iBd*dM{ z=N0@wCxp$22sB;p%G?ZOw_na;24a@&m$O(owlF4czaz({HjOcHI`dXGHz3z*D;pad zkQ=z0EfYxX-p$qsq-^)Fr2(lWd)P{Wl+<3f1Rzzt7cBR8FIy~-7rhTGcX1zBrNw?Q zZ{2>d9M1u^B*w({`~z&;^AE6lwt~WC`fgVaNs+e?g&vtbKkU1>{CDDv6B7GDKA&z_ N#-hHR-;LuVCjgw#b`byo diff --git a/Nu/Prime/Debug/Prime.pdb b/Nu/Prime/Debug/Prime.pdb index b8fe1dd7e0c8feff814856f333520cade3e37f34..4051b203142675c439f54084edd8ac306c336f92 100644 GIT binary patch delta 15258 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 JDsj2<{{s@oe-r=! delta 15691 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 U2cP8EJNo^9PQFfn~=WGvb4-olj61*Et4 zF)im~ESVlZmuWtb`ahRRT(U%)325k7Hg{u?UEkScwHd*5$#ngBOyWRQ?(>+`fmA-2 zx4nHHQ|eNFpgY56L?~Qcx?O14{Ti~tkyk@4D#D8RM|gBFn-*wX~&*f!Z>aF z%YcSSKoqaC0*70J%?q;xf|% zH*x4pj$~A4+%dV4v7T}JWJV@s=H2})APLRp0H*c;CdTanOibSz8N0T-w=m^%0qO01 zOw0KgyQas_WttD9{?BC+m+aDJ0vh_2&D|Je*LOBqZALKNHC=xmlQ>Y7`#dIfAe9g1 zZEv5)l)983=+3Yi5rL-5U74GK?DpTz%s|Yt{kJnK-%Q5D?Ob}$a) zm(_xKGIe0NsyenLpxJlp*iIKRp5MOm16!8~t4j|fgT{6XRrU`OjK8*P+OcPrFwWmT zc@uk{08_)p=}d>&w*l$xI}fw_FoFcwjjT~~0P^tf_3YU3tVJcvL@cbeMYAe^Qk$Tu7kpV`a^vd_3iqbILZ TifJ!pv>}NlFzx%!I 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 EKfoE;<^TWy delta 9807 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