/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #pragma once #include #include #include #include #include #include #include #include namespace AtomSampleViewer { class AtomSampleViewerApplication final : public AzFramework::Application , public AzFramework::AssetSystemStatusBus::Handler , public AZ::Debug::TraceMessageBus::Handler , public AtomSampleViewerRequestsBus::Handler , public SampleComponentManagerNotificationBus::Handler { public: AZ_CLASS_ALLOCATOR(AtomSampleViewerApplication, AZ::SystemAllocator) AtomSampleViewerApplication(); AtomSampleViewerApplication(int* argc, char*** argv); ~AtomSampleViewerApplication() override; void Destroy() override; int GetExitCode() const { return m_exitCode; } ////////////////////////////////////////////////////////////////////////// // AZ::ComponentApplication AZ::ComponentTypeList GetRequiredSystemComponents() const override; ////////////////////////////////////////////////////////////////////////// private: ////////////////////////////////////////////////////////////////////////// // AzFramework::AssetSystemStatusBus::Handler void AssetSystemAvailable() override; bool ConnectAssetProcessor(AZStd::chrono::duration timeout); void DisconnectAssetProcessor(); void CompileCriticalAssets(); void StartCommon(AZ::Entity* systemEntity) override; void Tick() override; ////////////////////////////////////////////////////////////////////////// // AzFramework::ApplicationRequests::Bus void QueryApplicationType(AZ::ApplicationTypeQuery& appType) const override; ////////////////////////////////////////////////////////////////////////// static const bool s_connectToAssetProcessor; void ReadTimeoutShutdown(); void TickTimeoutShutdown(); float m_secondsBeforeShutdown = 0.0f; // >0.0f If timeout shutdown is enabled, this will count down the time until quit() is called. //////////////////////////// Logging section ///////////////////////////// // TraceMessageBus ... bool OnOutput(const char* window, const char* message) override; // AtomSampleViewerRequestBus ... void SetExitCode(int exitCode) override { m_exitCode = exitCode; } // SampleComponentManagerNotificationBus ... void OnSampleManagerActivated() override; // AzFramework::Application ... void CreateStaticModules(AZStd::vector& outModules) override; void WriteStartupLog(); void ReadAutomatedTestOptions(); struct LogMessage { AZStd::string window; AZStd::string message; }; AZStd::unique_ptr> m_startupLogSink; AZStd::unique_ptr m_logFile; static constexpr const char* s_logFileBaseName = "AtomSampleViewer.log"; int m_exitCode = 0; void SetupConsoleHandlerRoutine(); bool m_isTestMode = false; }; int RunGameCommon(int argc, char** argv, AZStd::function customRunCode = nullptr); } // namespace AtomSampleViewer