void init(std::shared_ptr<void> event_data) { // Some kind of SDL_Init bug is happening here that shows that SDL_INIT_EVENTS is already set even tough it // isn't Uint32 sdl_inited = SDL_WasInit(SDL_INIT_EVERYTHING); // if(sdl_inited & SDL_INIT_EVENTS == 0) { SDL_InitSubSystem(SDL_INIT_EVENTS); //} if ((sdl_inited & SDL_INIT_GAMECONTROLLER) == 0) { SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER); } if ((sdl_inited & SDL_INIT_JOYSTICK) == 0) { SDL_InitSubSystem(SDL_INIT_JOYSTICK); } // If something else is managing events then lets just listen and translate key presses if (sdl_inited != 0) { std::cout << "BasicSDLInput is controlling SDL Events" << std::endl; Subscriber* translating_subscriber = new Subscriber(this, Function_Cast(&BasicSDLInputStaticInit::translate), false); Dispatcher::GetInstance()->AddEventSubscriber(translating_subscriber, "EVENT_SDL_EVENT"); } // else { std::cout << "BasicSDLInput is translating SDL Events" << std::endl; // Otherwise lets control the PollEvent loop Subscriber* sdl_event_control = new Subscriber(this, Function_Cast(&BasicSDLInputStaticInit::event_loop), false); Dispatcher::GetInstance()->AddEventSubscriber(sdl_event_control, "EVENT_APP_RUN"); //} }
bool GLCamera::initialize() { velocity = 1; up_vector = glm::vec3(0.0, 1.0, 0.0); position = glm::vec3(0, 5, -10); input_subscriber = new Subscriber(this, Function_Cast(&GLCamera::onInput), false); Dispatcher::GetInstance()->AddEventSubscriber(input_subscriber, "EVENT_INPUT"); update_subscriber = new Subscriber(this, Function_Cast(&GLCamera::update)); Dispatcher::GetInstance()->AddEventSubscriber(update_subscriber, "EVENT_COMPONENT_UPDATE"); tracked_keys[SDLK_UP] = false; tracked_keys[SDLK_DOWN] = false; tracked_keys[SDLK_LEFT] = false; tracked_keys[SDLK_RIGHT] = false; return true; }
bool App3D::initialize(std::shared_ptr<Renderer> rend) { std::cout << "App3D::initialize1 " << renderer << std::endl; renderer = std::dynamic_pointer_cast<OpenGLRenderer>(rend); camera = new GLCamera(); camera->initialize(); std::cout << "App3D::initialize2 " << renderer << std::endl; renderer->set_camera(camera); model_store = new GLModelStore(); model_store->loadAssets(); timer = new Timer(); timer->start(); Subscriber* run_subscriber = new Subscriber(this, Function_Cast(&App3D::run), false); Dispatcher::GetInstance()->AddEventSubscriber(run_subscriber, "EVENT_APP_RUN"); return true; }
BaseAppStaticInit() { init_subscriber = new Subscriber(this, Function_Cast(&BaseAppStaticInit::init), false); Dispatcher::GetInstance()->AddEventSubscriber(init_subscriber, "EVENT_RENDER_INIT_SUCCESS"); }
BasicSDLInputStaticInit() { SDL_Init(0); init_subscriber = new Subscriber(this, Function_Cast(&BasicSDLInputStaticInit::init), false); // Lets use the late event to see if something else initialized SDL for us Dispatcher::GetInstance()->AddEventSubscriber(init_subscriber, "EVENT_APP_INIT_SUCCESS_LATE"); }