Commit Graph

302 Commits

Author SHA1 Message Date
Glenn Maynard 4bcf9fcbfd Calling SetNewScreen when not the top screen on the stack only replaces the
top screen.  This allows a screen to push a helper screen, which can then
enter an entirely separate set of helper screens before one pops back.
(For example, a screen could push ScreenServiceOptions to enter the options
menu, which then replaces itself with the various options menus, and finally
pops back to the original screen when the player backs out entirely.)  (Some
support is still missing to allow non-special-case use of this; coming soon ...)

However, in rare cases we want to kill all screens on the stack, regardless
of how many there are (operator menu).  Fix that case.
2005-07-26 03:08:03 +00:00
Glenn Maynard 9cf25ad2b1 flush before deleting screens 2005-07-23 06:36:11 +00:00
Glenn Maynard 703c96a53a prefer to call ZeroNextUpdate before we spend the time that we want to zero,
not after
2005-07-23 06:30:22 +00:00
Glenn Maynard 91e367754a pull out ScreenIsPrepped 2005-07-23 03:31:43 +00:00
Glenn Maynard 44dfb60616 run cleanups after deleting a screen via pop
don't expose DeletePreparedScreens (unneeded; simplify the interface)
2005-07-23 03:09:55 +00:00
Glenn Maynard b293a4490f ironing out preloading logic 2005-07-23 01:18:48 +00:00
Glenn Maynard a0577b80db Refactor prepared screens. This can handle:
- preparing and reusing screens used in a loop (eg. attract), a conceptual stack
   (eg. options menu), or a real stack (ScreenPrompt)
 - automatic cleanup once you load a screen that isn't preloaded; this gracefully
   handles unusual or forgotten exit paths (eg. pressing the system menu button)
 - reusing some screens in a group and loading others on demand
2005-07-22 08:39:07 +00:00
Glenn Maynard d38a2e9c33 ctor, comment, cleanup 2005-07-22 07:15:57 +00:00
Glenn Maynard 3f3a782daf not a reference 2005-07-22 07:13:52 +00:00
Glenn Maynard 8e96f9a233 const 2005-07-22 07:11:49 +00:00
Glenn Maynard 67f6e76b3b tabs 2005-07-22 05:45:46 +00:00
Glenn Maynard d41ba9480c more to implementation 2005-07-22 05:44:54 +00:00
Glenn Maynard 4aaf18959d tabs 2005-07-22 05:39:52 +00:00
Glenn Maynard 4b1b3277e8 Singleton classes don't need to store their stuff in the class; put it in
the implementation: it's easier to edit without triggering huge rebuilds
that way.

(Hmm.  There's really no benefit, here, to using an anonymous namespace
instead of statics, but it seems better this way and I'm not sure why.
The normal admonitions against global variables don't apply here, since
static avoids namespace pollution and it's a singleton, but maybe it's
just habit asserting itself and anonymous namespaces circumvent that ...)
2005-07-22 05:38:56 +00:00
Glenn Maynard c617484b13 fix log 2005-07-21 05:44:51 +00:00
Glenn Maynard ea3e2ba6f9 remove Screen.h dep on ScreenManager.h. (this looked more useful before pulling in the higher-level includes, but still seems like the right thing to do) 2005-07-20 09:49:46 +00:00
Glenn Maynard cc827025ea merge MakeNewScreenInternal and MakeNewScreen 2005-07-19 23:49:39 +00:00
Glenn Maynard 509055d9f7 SONGMAN->Cleanup only in the Prepare code path. There's no point to doing it in the AddNewScreenToTop path. 2005-07-19 23:30:24 +00:00
Glenn Maynard de950a3190 We call ZeroNextUpdate when we know we have a frame skip, and we're deliberately masking it by clamping the first update. Reset FPS stats when we do that, not after creating a screen (which might be concurrent). 2005-07-19 23:22:50 +00:00
Glenn Maynard dcc3e1e588 Don't reset HandleSongTimer here; we might still be in the middle of the previous screen. Do this in SM_LoseFocus. 2005-07-19 22:58:31 +00:00
Glenn Maynard 61bf554727 remove IsTransparent. Since we have a separate background layer now, every screen is transparent. 2005-07-19 20:59:15 +00:00
Glenn Maynard a305c072c0 cleanup 2005-07-19 06:20:18 +00:00
Glenn Maynard 5856678140 forgotton commit 2005-07-18 19:30:36 +00:00
Glenn Maynard 5ee52b0db5 The screen that pushes a screen sets the pop message, not the pushed screen.
This pushing screens without them needing to be aware of it.  (This will also allow
a pushed screen to replace itself with another pushed screen without having to
propagate the finalization message across; that'll make more sense if the rest of
this pans out ...)
2005-07-18 02:28:16 +00:00
Glenn Maynard 835b688529 call BeginScreen() on push 2005-07-15 01:17:34 +00:00
Glenn Maynard fcbe7b1bd7 rename SetFromNewScreen -> PushScreen (it doesn't touch existing screens)
allow pushing screens without having them deleted on pop
2005-07-14 21:42:52 +00:00
Glenn Maynard e1dae4bf04 dumb fix 2005-07-13 06:49:30 +00:00
Glenn Maynard a6cb2db9f2 implement ConcurrentlyPrepareScreen and IsConcurrentlyLoading 2005-07-13 06:44:44 +00:00
Glenn Maynard 8256cf3b4c call ProcessMessages 2005-07-12 03:12:18 +00:00
Glenn Maynard 35b0dd09cb add lost DiagnosticOutput 2005-07-07 08:20:18 +00:00
Glenn Maynard 3b54c385a4 remove unused m_vScreensToDelete 2005-07-07 08:18:29 +00:00
Glenn Maynard 28b596efa6 no need to delay deletes in ClearScreenStack; the screen is never on the stack 2005-07-07 08:16:49 +00:00
Glenn Maynard 39dc127095 delay PopTopScreen like SetNewScreen 2005-07-07 08:14:01 +00:00
Glenn Maynard c027ab03d4 EmptyDeleteQueue: deleting a screen should not cause a skip; if it does, please document why 2005-07-07 06:20:22 +00:00
Glenn Maynard 12b81cdaeb EmptyDeleteQueue: deleting a screen should not cause a skip; if it does, please document why 2005-07-07 06:18:17 +00:00
Glenn Maynard 44c62c0ab4 another dupe: LoadDelayedScreen calls MakeNewScreen (and if it doesn't, no need to zero) 2005-07-07 05:02:26 +00:00
Glenn Maynard bad1e4ae90 another dupe: AddNewScreenToTop calls MakeNewScreen 2005-07-07 05:00:12 +00:00
Glenn Maynard 4feeb44f4c another dupe: PrepareScreen calls MakeNewScreen 2005-07-07 04:54:11 +00:00
Glenn Maynard 2e225117c3 both MakeNewScreenInternal and MakeNewScreen call ZeroNextUpdate, and MakeNewScreen calls MakeNewScreenInternal anyway 2005-07-07 04:52:27 +00:00
Glenn Maynard 7f94f08336 call ZeroNextUpdate 2005-07-07 04:50:00 +00:00
Glenn Maynard d1cb4322fc pull out of the header 2005-07-07 04:48:07 +00:00
Glenn Maynard 378295df84 un-revert commit that works just fine for me, and was reverted with no
attempt to explain what broke.

Ben, every remark and commit from you is rude and derisive, and this
project doesn't need that.  You've expended my patience.  If you refuse
to be civil, leave.
2005-07-07 01:32:15 +00:00
Ben Anderson 29d2057e94 Revert: don't break half the codebase and then commit. At least fix it to a relatively usable point before making such a devastating assertion. 2005-07-06 23:55:48 +00:00
Glenn Maynard d6c14eac6f If a screen is already prepared, don't reload it in PrepareScreen.
Prepare backgrounds, too.
Disallow calling SetNewScreen from a screen ctor/Init; it complicates things.
When loading a new screen (through LoadDelayedScreen), load the
screen with PrepareScreen, to reduce code paths.
2005-07-03 06:13:30 +00:00
Glenn Maynard a858910ad1 cleanup 2005-07-03 04:54:37 +00:00
Glenn Maynard 1ae5083fba remove ScreenManager::MiniMenu 2005-07-03 04:52:15 +00:00
Glenn Maynard e7ef5539d0 remove 2005-07-03 04:46:39 +00:00
Glenn Maynard 0e09a3fb3d ScreenPrompt::Prompt, cleaning up ScreenManager 2005-07-03 04:33:22 +00:00
Glenn Maynard b0a079c777 "Send this before making the new screen, since it might set things that will be
re-set in the new screen's ctor."  Don't do that--don't assume that the old
LoseFocus will be called before the ctor or Init.  If you're doing something that
interacts with state changed by focus, do it in the first update, when you're
guaranteed to have focus.  Make no guarantees about who has focus when
a new screen is constructed; only that LoseFocus will be sent before GainFocus,
and GainFocus before the first update.
2005-07-03 04:24:57 +00:00
Glenn Maynard a49aecd774 pull ScreenPrompt init into a separate function, so it's slightly less of a special
case; maybe this class's instances can be made reusable ...
2005-07-03 03:49:19 +00:00