You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Legacy/CryCommon/IGem.h

76 lines
1.9 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include "platform.h"
#include "ISystem.h"
#include "CrySystemBus.h"
#include <AzCore/Module/Module.h>
/**
* CryHooksModule is an AZ::Module with common hooks into CryEngine systems.
* - Sets gEnv once CrySystem has initialized.
* - Registers as a CrySystem event handler.
*/
class CryHooksModule
: public AZ::Module
, protected CrySystemEventBus::Handler
, protected ISystemEventListener
{
public:
AZ_RTTI(CryHooksModule, "{BD896D16-6F7D-4EA6-A532-0A9E6BF3C089}", AZ::Module);
CryHooksModule()
: Module()
{
CrySystemEventBus::Handler::BusConnect();
}
~CryHooksModule() override
{
CrySystemEventBus::Handler::BusDisconnect();
if (gEnv && gEnv->pSystem && gEnv->pSystem->GetISystemEventDispatcher())
{
gEnv->pSystem->GetISystemEventDispatcher()->RemoveListener(this);
}
}
protected:
void OnCrySystemPreInitialize(ISystem& system, const SSystemInitParams& systemInitParams) override
{
(void)systemInitParams;
#if !defined(AZ_MONOLITHIC_BUILD)
// When module is linked dynamically, we must set our gEnv pointer.
// When module is linked statically, we'll share the application's gEnv pointer.
gEnv = system.GetGlobalEnvironment();
#else
(void)system;
#endif
}
void OnCrySystemInitialized(ISystem& system, const SSystemInitParams& systemInitParams) override
{
(void)systemInitParams;
system.GetISystemEventDispatcher()->RegisterListener(this);
}
void OnCrySystemPostShutdown() override
{
#if !defined(AZ_MONOLITHIC_BUILD)
gEnv = nullptr;
#endif
}
void OnSystemEvent(ESystemEvent /*event*/, UINT_PTR /*wparam*/, UINT_PTR /*lparam*/) override {}
};