#ifndef ScreenSelectMaster_H #define ScreenSelectMaster_H #include "ScreenSelect.h" #include "RageSound.h" #include "RandomSample.h" #include "ActorUtil.h" #include "ActorScroller.h" #define MAX_CHOICES 30 class ScreenSelectMaster : public ScreenSelect { public: ScreenSelectMaster( CString sName ); virtual void Init(); virtual void Update( float fDelta ); virtual void MenuLeft( PlayerNumber pn, const InputEventType type ); virtual void MenuRight( PlayerNumber pn, const InputEventType type ); virtual void MenuUp( PlayerNumber pn, const InputEventType type ); virtual void MenuDown( PlayerNumber pn, const InputEventType type ); virtual void MenuStart( PlayerNumber pn ); void TweenOffScreen(); void TweenOnScreen(); virtual void HandleScreenMessage( const ScreenMessage SM ); protected: enum Page { PAGE_1, PAGE_2, NUM_PAGES }; // on PAGE_2, cursors are locked together static PlayerNumber GetSharedPlayer(); Page GetPage( int iChoiceIndex ) const; Page GetCurrentPage() const; ThemeMetric SHOW_ICON; ThemeMetric SHOW_PREVIEW; ThemeMetric SHOW_CURSOR; ThemeMetric SHOW_SCROLLER; ThemeMetric SHARED_PREVIEW_AND_CURSOR; ThemeMetric NUM_CHOICES_ON_PAGE_1; ThemeMetric1D CURSOR_OFFSET_X_FROM_ICON; ThemeMetric1D CURSOR_OFFSET_Y_FROM_ICON; ThemeMetric OVERRIDE_LOCK_INPUT_SECONDS; ThemeMetric LOCK_INPUT_SECONDS; ThemeMetric PRE_SWITCH_PAGE_SECONDS; ThemeMetric POST_SWITCH_PAGE_SECONDS; ThemeMetric OVERRIDE_SLEEP_AFTER_TWEEN_OFF_SECONDS; ThemeMetric SLEEP_AFTER_TWEEN_OFF_SECONDS; ThemeMetric1D OPTION_ORDER; ThemeMetric WRAP_CURSOR; ThemeMetric WRAP_SCROLLER; ThemeMetric SCROLLER_FAST_CATCHUP; ThemeMetric ALLOW_REPEATING_INPUT; ThemeMetric SCROLLER_SECONDS_PER_ITEM; ThemeMetric SCROLLER_NUM_ITEMS_TO_DRAW; ThemeMetric SCROLLER_TRANSFORM; ThemeMetric DEFAULT_CHOICE; int m_Next[NUM_MENU_DIRS][MAX_CHOICES]; virtual int GetSelectionIndex( PlayerNumber pn ); virtual void UpdateSelectableChoices(); bool AnyOptionsArePlayable() const; bool Move( PlayerNumber pn, MenuDir dir ); bool ChangePage( int iNewChoice ); bool ChangeSelection( PlayerNumber pn, MenuDir dir, int iNewChoice ); float DoMenuStart( PlayerNumber pn ); virtual bool ProcessMenuStart( PlayerNumber pn ) { return true; } float GetCursorX( PlayerNumber pn ); float GetCursorY( PlayerNumber pn ); AutoActor m_sprExplanation[NUM_PAGES]; AutoActor m_sprMore[NUM_PAGES]; // icon is the piece shared, per-choice piece AutoActor m_sprIcon[MAX_CHOICES]; // preview is per-choice, per-player piece AutoActor m_sprPreview[MAX_CHOICES][NUM_PLAYERS]; // cursor is the per-player that's shared by all choices AutoActor m_sprCursor[NUM_PLAYERS]; // scroll is the per-player, per-choice piece that's scrolled AutoActor m_sprScroll[MAX_CHOICES][NUM_PLAYERS]; ActorScroller m_Scroller[NUM_PLAYERS]; RageSound m_soundChange; RandomSample m_soundDifficult; RageSound m_soundStart; int m_iChoice[NUM_PLAYERS]; bool m_bChosen[NUM_PLAYERS]; float m_fLockInputSecs; }; #endif /* * (c) 2003-2004 Chris Danford * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, and/or sell copies of the Software, and to permit persons to * whom the Software is furnished to do so, provided that the above * copyright notice(s) and this permission notice appear in all copies of * the Software and that both the above copyright notice(s) and this * permission notice appear in supporting documentation. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */