!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / BaseEnv / Components / BaseEnv_EntityDetectionVolumeComponent.h
blob2a026cb0e79ee8f747f1ea460fd832559da90d82
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include "BaseEnv/BaseEnv_Prerequisites.h"
7 #include "BaseEnv/Components/BaseEnv_EntityTransformComponentBase.h"
8 #include "BaseEnv/Utils/BaseEnv_EntitySignals.h"
9 #include "BaseEnv/Utils/BaseEnv_EntityUpdateFilters.h"
10 #include "BaseEnv/Utils/BaseEnv_SpatialIndex.h"
12 namespace SchematycBaseEnv
14 extern const Schematyc2::SGUID s_detectionVolumeComponentGUID;
16 class CEntityDetectionVolumeComponent : public CEntityTransformComponentBase
18 private:
20 struct SVolumeProperties
22 SVolumeProperties();
24 void Serialize(Serialization::IArchive& archive);
26 SpatialVolumeTagNames tags;
27 SpatialVolumeTagNames monitorTags;
28 Vec3 size;
29 float radius;
30 ESpatialVolumeShape shape;
33 struct SProperties
35 SProperties();
37 void Serialize(Serialization::IArchive& archive);
39 // PropertyGraphs
40 Schematyc2::SEnvFunctionResult SetTransform(const Schematyc2::SEnvFunctionContext& context, const STransform& _transform);
41 // ~PropertyGraphs
43 STransform transform;
44 SVolumeProperties volume;
45 bool bEnabled;
48 struct SVolume
50 SVolume();
52 Matrix33 rot;
53 Vec3 pos;
54 Vec3 size;
55 float radius;
56 SpatialVolumeId volumeId;
57 ESpatialVolumeShape shape;
60 typedef std::vector<EntityId> EntityIds;
62 public:
64 CEntityDetectionVolumeComponent();
66 // Schematyc2::IComponent
67 virtual bool Init(const Schematyc2::SComponentParams& params) override;
68 virtual void Run(Schematyc2::ESimulationMode simulationMode) override;
69 virtual Schematyc2::IComponentPreviewPropertiesPtr GetPreviewProperties() const override;
70 virtual void Preview(const SRendParams& params, const SRenderingPassInfo& passInfo, const Schematyc2::IComponentPreviewProperties& previewProperties) const override;
71 virtual void Shutdown() override;
72 virtual Schematyc2::INetworkSpawnParamsPtr GetNetworkSpawnParams() const override;
73 // ~Schematyc2::IComponent
75 bool SetEnabled(bool bEnabled);
77 static void Register();
79 private:
81 void SetVolumeSize(float sizeX, float sizeY, float sizeZ);
82 void GetVolumeSize(float& sizeX, float& sizeY, float& sizeZ) const;
84 void SetVolumeRadius(float radius);
85 float GetVolumeRadius() const;
87 const char* GetVolumeName(SpatialVolumeId volumeId) const;
89 void VolumeEventCallback(const SSpatialIndexEvent& event);
90 void OnEvent(const SEntityEvent& event);
92 void Update(const Schematyc2::SUpdateContext& updateContext);
94 void Enable();
95 void Disable();
97 public:
99 static const Schematyc2::SGUID s_componentGUID;
100 static const Schematyc2::SGUID s_enterSignalGUID;
101 static const Schematyc2::SGUID s_leaveSignalGUID;
103 private:
105 const SProperties* m_pProperties;
106 SVolume m_volume;
107 EntityIds m_entityIds;
108 bool m_bEnabled;
109 EntityNotHiddenUpdateFilter m_updateFilter;
110 Schematyc2::CUpdateScope m_updateScope;
111 TemplateUtils::CConnectionScope m_connectionScope;