CUGL 1.3
Cornell University Game Library
CUApplication.h
1 //
2 // CUApplication.h
3 // Cornell University Game Library (CUGL)
4 //
5 // This class provides the core application class. In initializes both the
6 // SDL and CUGL settings, and creates the core loop. You should inherit from
7 // this class to make your root game class.
8 //
9 // This class is always intended to be used on the stack of the main function.
10 // Thererfore, this class has no allocators.
11 //
12 // CUGL MIT License:
13 // This software is provided 'as-is', without any express or implied
14 // warranty. In no event will the authors be held liable for any damages
15 // arising from the use of this software.
16 //
17 // Permission is granted to anyone to use this software for any purpose,
18 // including commercial applications, and to alter it and redistribute it
19 // freely, subject to the following restrictions:
20 //
21 // 1. The origin of this software must not be misrepresented; you must not
22 // claim that you wrote the original software. If you use this software
23 // in a product, an acknowledgment in the product documentation would be
24 // appreciated but is not required.
25 //
26 // 2. Altered source versions must be plainly marked as such, and must not
27 // be misrepresented as being the original software.
28 //
29 // 3. This notice may not be removed or altered from any source distribution.
30 //
31 // Author: Walker White
32 // Version: 7/1/16
33 //
34 #ifndef __CU_APPLICATION_H__
35 #define __CU_APPLICATION_H__
36 #include <cugl/util/CUTimestamp.h>
37 #include <cugl/math/CUColor4.h>
38 #include <cugl/math/CURect.h>
39 #include <unordered_map>
40 #include <functional>
41 #include <deque>
42 #include <mutex>
43 
44 namespace cugl {
45 
60 typedef struct {
62  std::function<bool()> callback;
64  Uint32 period;
66  Uint32 timer;
67 } scheduable;
68 
83 class Application {
84 #pragma mark Values
85 public:
92  enum class State : unsigned int {
99  NONE = 0,
107  STARTUP = 1,
114  FOREGROUND = 2,
122  BACKGROUND = 3,
130  SHUTDOWN = 4
131  };
132 
133 
134 protected:
136  std::string _name;
138  std::string _org;
139 
141  std::string _assetdir;
143  std::string _savesdir;
144 
147 
155  bool _highdpi;
158 
160  float _fps;
163 
166 
167 
168 private:
170  unsigned int _delay;
171 
173  std::deque<float> _fpswindow;
174 
176  Timestamp _start;
178  Timestamp _finish;
179 
181  Uint32 _funcid;
182 
184  std::unordered_map<Uint32, scheduable> _callbacks;
186  std::mutex _queueMutex;
196  void processCallbacks(Uint32 millis);
197 
198 #pragma mark -
199 #pragma mark Constructors
200 public:
207  Application();
208 
213 
220  virtual void dispose();
221 
237  bool init();
238 
247  static Application* get() { return _theapp; }
248 
249 
250 #pragma mark -
251 #pragma mark Virtual Methods
252 
262  virtual void onStartup();
263 
275  virtual void onShutdown();
276 
287  virtual void onLowMemory() { }
288 
300  virtual void onSuspend() { }
301 
312  virtual void onResume() { }
313 
325  virtual void update(float timestep) { }
326 
336  virtual void draw() { }
337 
338 
339 #pragma mark -
340 #pragma mark Application Loop
341 
350  bool getInput();
351 
360  bool step();
361 
373  void quit();
374 
400  Uint32 schedule(std::function<bool()> callback, Uint32 time=0);
401 
429  Uint32 schedule(std::function<bool()> callback, Uint32 time, Uint32 period);
430 
445  void unschedule(Uint32 id);
446 
447 
448 #pragma mark -
449 #pragma mark Initialization Attributes
450  // TODO: This is naming clash that should be deprecated and refactored
464  void setSize(int width, int height);
465 
476  int getDisplayWidth() const { return (int)_display.size.width; }
477 
488  int getDisplayHeight() const { return (int)_display.size.height; }
489 
500  Size getDisplaySize() const { return _display.size; }
501 
516  Rect getDisplayBounds() const { return _display; }
517 
532  Rect getSafeArea() const { return _safearea; }
533 
547  void setFullscreen(bool value);
548 
559  bool isFullscreen() const { return _fullscreen; }
560 
579  void setHighDPI(bool highDPI);
580 
595  bool isHighDPI() const { return _highdpi; }
596 
609  void setMultiSampled(bool flag);
610 
623  bool isMultiSampled() const { return _multisamp; }
624 
625 #pragma mark -
626 #pragma mark Runtime Attributes
627 
640  void setName(const char* name);
641 
654  void setName(const std::string& name);
655 
665  const std::string& getName() const { return _name; }
666 
679  void setOrganization(const char* name);
680 
693  void setOrganization(const std::string& name);
694 
704  const std::string& getOrganization() const { return _org; }
705 
721  void setFPS(float fps);
722 
735  float getFPS() const { return _fps; }
736 
746  float getAverageFPS() const;
747 
759  void setClearColor(Color4 color) { _clearColor = color; }
760 
769  Color4 getClearColor() const { return (Color4)_clearColor; }
770 
777  State getState() const { return _state; }
778 
784  const std::string getOpenGLDescription() const;
785 
786 #pragma mark -
787 #pragma mark File Directories
788 
810  std::string getAssetDirectory();
811 
832  std::string getSaveDirectory();
833 };
834 
835 }
836 
837 
838 #endif /* __CU_APPLICATION_H__ */
cugl::Application::_fps
float _fps
Definition: CUApplication.h:160
cugl::scheduable::callback
std::function< bool()> callback
Definition: CUApplication.h:62
cugl::Application::init
bool init()
cugl::Application::_safearea
Rect _safearea
Definition: CUApplication.h:151
cugl::Application::getFPS
float getFPS() const
Definition: CUApplication.h:735
cugl::Application::getOpenGLDescription
const std::string getOpenGLDescription() const
cugl::Application::isMultiSampled
bool isMultiSampled() const
Definition: CUApplication.h:623
cugl::Application::_fullscreen
bool _fullscreen
Definition: CUApplication.h:153
cugl::scheduable::period
Uint32 period
Definition: CUApplication.h:64
cugl::Application::update
virtual void update(float timestep)
Definition: CUApplication.h:325
cugl::Application::~Application
~Application()
Definition: CUApplication.h:212
cugl::Application::getInput
bool getInput()
cugl::Application::onShutdown
virtual void onShutdown()
cugl::Application::draw
virtual void draw()
Definition: CUApplication.h:336
cugl::Application::get
static Application * get()
Definition: CUApplication.h:247
cugl::Application::_assetdir
std::string _assetdir
Definition: CUApplication.h:141
cugl::Application::onResume
virtual void onResume()
Definition: CUApplication.h:312
cugl::Application::_name
std::string _name
Definition: CUApplication.h:136
cugl::Application
Definition: CUApplication.h:83
cugl::Application::_state
State _state
Definition: CUApplication.h:146
cugl::Application::_savesdir
std::string _savesdir
Definition: CUApplication.h:143
cugl::Application::getState
State getState() const
Definition: CUApplication.h:777
cugl::Timestamp
Definition: CUTimestamp.h:61
cugl::Size
Definition: CUSize.h:57
cugl::Color4
Definition: CUColor4.h:1084
cugl::Application::Application
Application()
cugl::Application::State::FOREGROUND
cugl::Size::width
float width
Definition: CUSize.h:61
cugl::Application::_org
std::string _org
Definition: CUApplication.h:138
cugl::Application::setMultiSampled
void setMultiSampled(bool flag)
cugl::Application::getClearColor
Color4 getClearColor() const
Definition: CUApplication.h:769
cugl::Application::_clearColor
Color4f _clearColor
Definition: CUApplication.h:162
cugl::Application::State
State
Definition: CUApplication.h:92
cugl::Rect
Definition: CURect.h:45
cugl::Application::getDisplayBounds
Rect getDisplayBounds() const
Definition: CUApplication.h:516
cugl::Application::State::BACKGROUND
cugl::Application::dispose
virtual void dispose()
cugl::Application::setHighDPI
void setHighDPI(bool highDPI)
cugl::Application::setOrganization
void setOrganization(const char *name)
cugl::Application::setName
void setName(const char *name)
cugl::Application::_multisamp
bool _multisamp
Definition: CUApplication.h:157
cugl::scheduable
Definition: CUApplication.h:60
cugl::Color4f
Definition: CUColor4.h:73
cugl::Application::State::STARTUP
cugl::Application::unschedule
void unschedule(Uint32 id)
cugl::Application::schedule
Uint32 schedule(std::function< bool()> callback, Uint32 time=0)
cugl::Application::getDisplaySize
Size getDisplaySize() const
Definition: CUApplication.h:500
cugl::Application::_display
Rect _display
Definition: CUApplication.h:149
cugl::Application::getAverageFPS
float getAverageFPS() const
cugl::Application::onLowMemory
virtual void onLowMemory()
Definition: CUApplication.h:287
cugl::Application::onStartup
virtual void onStartup()
cugl::Application::setFPS
void setFPS(float fps)
cugl::Application::getDisplayWidth
int getDisplayWidth() const
Definition: CUApplication.h:476
cugl::Application::getDisplayHeight
int getDisplayHeight() const
Definition: CUApplication.h:488
cugl::Application::getOrganization
const std::string & getOrganization() const
Definition: CUApplication.h:704
cugl::Application::State::SHUTDOWN
cugl::Application::getName
const std::string & getName() const
Definition: CUApplication.h:665
cugl::Application::quit
void quit()
cugl::Application::State::NONE
cugl::Application::setSize
void setSize(int width, int height)
cugl::Application::setFullscreen
void setFullscreen(bool value)
cugl::Application::getSafeArea
Rect getSafeArea() const
Definition: CUApplication.h:532
cugl::scheduable::timer
Uint32 timer
Definition: CUApplication.h:66
cugl::Application::getSaveDirectory
std::string getSaveDirectory()
cugl::Rect::size
Size size
Definition: CURect.h:51
cugl::Application::onSuspend
virtual void onSuspend()
Definition: CUApplication.h:300
cugl::Application::isHighDPI
bool isHighDPI() const
Definition: CUApplication.h:595
cugl::Size::height
float height
Definition: CUSize.h:63
cugl::Application::_highdpi
bool _highdpi
Definition: CUApplication.h:155
cugl::Application::step
bool step()
cugl::Application::_theapp
static Application * _theapp
Definition: CUApplication.h:165
cugl::Application::getAssetDirectory
std::string getAssetDirectory()
cugl::Application::setClearColor
void setClearColor(Color4 color)
Definition: CUApplication.h:759
cugl::Application::isFullscreen
bool isFullscreen() const
Definition: CUApplication.h:559