/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Data/Samples/RTS/CppSource/RTSPlugin/Components/UnitComponent.h
82 строки
2 KB
Jan Krassnigg
C++ Project Generation now also builds stand-alone game exe (#1465)
30 дек 2024, 12:59
Не верифицирован
30 дек 2024, 12:59
d369e9b
Код
Авторство
О чём код?
#pragma once #include <RTSPlugin/AI/AiUtilitySystem.h> #include <RTSPlugin/Components/ComponentMessages.h> class RtsUnitComponentManager : public ezComponentManager<class RtsUnitComponent, ezBlockStorageType::FreeList> { public: RtsUnitComponentManager(ezWorld* pWorld); virtual void Initialize() override; void UnitUpdate(const ezWorldModule::UpdateContext& context); }; enum class RtsUnitMode { GuardLocation, MoveToPosition, AttackUnit, }; class RtsUnitComponent : public ezComponent { EZ_DECLARE_COMPONENT_TYPE(RtsUnitComponent, ezComponent, RtsUnitComponentManager); public: RtsUnitComponent(); ~RtsUnitComponent(); ////////////////////////////////////////////////////////////////////////// // ezComponent interface virtual void SerializeComponent(ezWorldWriter& inout_stream) const override; virtual void DeserializeComponent(ezWorldReader& inout_stream) override; virtual void OnSimulationStarted() override; ////////////////////////////////////////////////////////////////////////// // Properties public: ezUInt16 m_uiMaxHealth = 100; ezUInt16 m_uiCurHealth = 0; private: ezPrefabResourceHandle m_hOnDestroyedPrefab; ////////////////////////////////////////////////////////////////////////// // Message Handlers void OnMsgAssignPosition(RtsMsgAssignPosition& msg); void OnMsgSetTarget(RtsMsgSetTarget& msg); void OnMsgApplyDamage(RtsMsgApplyDamage& msg); void OnMsgGatherUnitStats(RtsMsgGatherUnitStats& msg); void OnMsgArrivedAtLocation(RtsMsgArrivedAtLocation& msg); public: ////////////////////////////////////////////////////////////////////////// // ezGameObject* FindClosestEnemy(float fMaxRadius) const; void FireAt(ezGameObjectHandle hUnit); ezGameObject* AttackClosestEnemey(float fSearchRadius, float fIgnoreRadius); protected: virtual void OnUnitDestroyed(); friend class RtsAttackUnitAiUtility; friend class RtsGuardLocationAiUtility; friend class RtsMoveToPositionAiUtility; bool m_bModeChanged = true; RtsUnitMode m_UnitMode; ezVec2 m_vAssignedPosition; ezGameObjectHandle m_hAssignedUnitToAttack; ezGameObjectHandle m_hCurrentUnitToAttack; ezTime m_TimeLastShot; ezUniquePtr<RtsAiUtilitySystem> m_pAiSystem; // has to be a pointer because RtsAiUtilitySystem isn't copyable void UpdateUnit(); };