//
// DemoContext.h
// MacOSX-Framework
//
// Created by John Ryland on 1/10/17.
// Copyright © 2017 John Ryland. All rights reserved.
//
#ifndef DemoContext_h
#define DemoContext_h
#include "Common.h"
class DemoContext
{
public:
virtual ~DemoContext() {}
virtual void prepare() {}
virtual void update(float a_seconds) {}
virtual void draw() {}
virtual void onClose() {}
virtual void onResize(const vec2f& a_shape) {}
virtual void onMouseUp(const MouseEvent& a_event) {}
virtual void onMouseDown(const MouseEvent& a_event) {}
virtual void onMouseMove(const MouseEvent& a_event) {}
bool m_needsPrepare = false;
};
// TODO: return shared_ptr instead of raw pointer
typedef DemoContext* (*DemoContextFactory)();
using DemoContextFactoryItem = GenericFactoryItem<DemoContextFactory>;
// This can go in the header or cpp file, doesn't matter
#define REGISTER_DEMO_CONTEXT(demoName, demoClass) \
namespace details { \
static DemoContext* createDemo_##demoClass() { return new demoClass; } \
DemoContextFactoryItem g_register_##demoClass(demoName, createDemo_##demoClass); \
}
#endif /* DemoContext_h */