/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #pragma once #include #include #include #include #include namespace Achievements { //////////////////////////////////////////////////////////////////////////////////////// // A system component providing an interface to query and unlock achievements class AchievementsSystemComponent : public AZ::Component , protected AchievementRequestBus::Handler { public: //////////////////////////////////////////////////////////////////////////////////////// // Component setup AZ_COMPONENT(AchievementsSystemComponent, "{07CFF8FE-668E-476A-95D9-A3B0CCCE2414}"); //////////////////////////////////////////////////////////////////////////////////////// // Component overrides static void Reflect(AZ::ReflectContext* context); static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); protected: //////////////////////////////////////////////////////////////////////////////////////// // AZ::Component interface implementation void Activate() override; void Deactivate() override; //////////////////////////////////////////////////////////////////////////////////////// // AchievementsRequestBus interface implementation void UnlockAchievement(const UnlockAchievementParams& params) override; void QueryAchievementDetails(const QueryAchievementParams& params); public: //////////////////////////////////////////////////////////////////////////////////////// // Base class for platform specific implementations class Implementation { public: AZ_CLASS_ALLOCATOR(Implementation, AZ::SystemAllocator, 0); static Implementation* Create(AchievementsSystemComponent& achievementsSystemComponent); Implementation(AchievementsSystemComponent& achievementsSystemComponent); AZ_DISABLE_COPY_MOVE(Implementation); virtual ~Implementation(); virtual void UnlockAchievement(const UnlockAchievementParams& params) = 0; virtual void QueryAchievementDetails(const QueryAchievementParams& params) = 0; static void OnUnlockAchievementComplete(const UnlockAchievementParams& params); static void OnQueryAchievementDetailsComplete(const QueryAchievementParams& params, const AchievementDetails& details); AchievementsSystemComponent& m_achievementsSystemComponent; }; private: //////////////////////////////////////////////////////////////////////////////////////// // Private pointer to the platform specific implementation AZStd::unique_ptr m_pimpl; }; }