aboutsummaryrefslogtreecommitdiff
path: root/NvBlast/samples/SampleBase/ui/DamageToolController.h
diff options
context:
space:
mode:
Diffstat (limited to 'NvBlast/samples/SampleBase/ui/DamageToolController.h')
-rw-r--r--NvBlast/samples/SampleBase/ui/DamageToolController.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/NvBlast/samples/SampleBase/ui/DamageToolController.h b/NvBlast/samples/SampleBase/ui/DamageToolController.h
new file mode 100644
index 0000000..9dcea39
--- /dev/null
+++ b/NvBlast/samples/SampleBase/ui/DamageToolController.h
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
+*
+* NVIDIA CORPORATION and its licensors retain all intellectual property
+* and proprietary rights in and to this software, related documentation
+* and any modifications thereto. Any use, reproduction, disclosure or
+* distribution of this software and related documentation without an express
+* license agreement from NVIDIA CORPORATION is strictly prohibited.
+*/
+
+#ifndef DAMAGE_TOOL_CONTROLLER_H
+#define DAMAGE_TOOL_CONTROLLER_H
+
+#include "SampleManager.h"
+#include "NvBlastTypes.h"
+#include <DirectXMath.h>
+#include <functional>
+#include "PxVec3.h"
+
+
+class Renderable;
+class RenderMaterial;
+
+namespace Nv
+{
+namespace Blast
+{
+class ExtPxActor;
+}
+}
+
+
+
+class DamageToolController : public ISampleController
+{
+public:
+ DamageToolController();
+ virtual ~DamageToolController();
+
+ virtual LRESULT MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ virtual void Animate(double dt);
+ void drawUI();
+
+
+ virtual void onInitialize();
+ virtual void onSampleStart();
+ virtual void onSampleStop();
+
+ bool isDamageMode() const
+ {
+ return m_damageMode;
+ }
+
+private:
+ DamageToolController& operator= (DamageToolController&);
+
+
+ //////// private methods ////////
+
+ void damage(physx::PxVec3 position, physx::PxVec3 normal);
+
+ void setDamageProfile(uint32_t profile);
+ uint32_t getDamageProfile() const
+ {
+ return m_damageProfile;
+ }
+
+ void changeDamageRadius(float dr);
+
+ void setDamageMode(bool enabled);
+
+
+ //////// used controllers ////////
+
+ Renderer& getRenderer() const
+ {
+ return getManager()->getRenderer();
+ }
+
+ PhysXController& getPhysXController() const
+ {
+ return getManager()->getPhysXController();
+ }
+
+ BlastController& getBlastController() const
+ {
+ return getManager()->getBlastController();
+ }
+
+
+ //////// internal data ////////
+
+ Renderable* m_pickPointerRenderable;
+ RenderMaterial* m_pickPointerRenderMaterial;
+ DirectX::XMFLOAT4 m_pickPointerColor;
+
+ float m_damageRadius;
+ float m_compressiveDamage;
+ float m_explosiveImpulse;
+ float m_stressForceFactor;
+ uint32_t m_damageProfile;
+
+ struct Damager
+ {
+ const char* uiName;
+ NvBlastDamageProgram program;
+ DirectX::XMFLOAT4 pointerColor;
+ std::function<void(const Damager* damager, Nv::Blast::ExtPxActor* actor, physx::PxVec3 position, physx::PxVec3 normal)> executeFunction;
+
+ void execute(Nv::Blast::ExtPxActor* actor, physx::PxVec3 position, physx::PxVec3 normal)
+ {
+ executeFunction(this, actor, position, normal);
+ }
+ };
+
+ std::vector<Damager> m_armory;
+ std::vector<const char*> m_armoryNames;
+
+ bool m_damageMode;
+};
+
+#endif \ No newline at end of file