/**
 * @class kRenderMeshComponent
 * @brief Handles Drawing of RenderMesh actors (Static mesh or Skinned Mesh)
 */
class kRenderMeshComponent
{
public:

	/**
	 * @brief Enables or Disables a Hotpoint on a skinnedmesh
	 * @param hotPointType Can be any value used in a skinned mesh. A value of 1 is used to show the fire particles on enemies by the flamethrower. A value of 6 is used for the Cerebral Bore Head blood gushing effects. Any other values can be used for custom purposes through the skinned mesh.
	 * @param showFx If true will show the hotpoint else will disable it
	 */
	void ToggleHotPoint(const int hotPointType, const bool showFx);
	
	/**
	 * @brief Show/Hide any attached meshes to this Render Mesh Component
	 */
	void SetAttachedMeshVisibility(const uint meshID, const bool visible);
	
	/**
	 * @brief Hides the current mesh and replaces it with the attached mesh specified with \a meshID
	 */
	void SwapOutMesh(const int meshID);
	
	/**
	 * @brief Set the textures to use an alternate texture from the textureSetInfo.txt file. Set to a value of -1 to use no alt textures which will be the primary texture. A value of 0 is the first alt texture, 1 is the second alt texture and so on.
	 */
	int& AltTexture();
	
	EnumRenderMeshComponentFlags& Flags();
	kVec3& HeadTrackPos();
	
	/**
	 * @brief Returns true if can flinch. Flinch is when you hit an enemy and his joints/bones position displace a bit.
	 */
	bool& CanFlinch();
	uint32& FxFlags();
	
	/**
	 * @brief Sets the scale of a node for the skinned mesh
	 * @param nodeID
	 * @param scale
	 */
	void SetScale(const int nodeID, const kVec3& in scale);
	
	/**
	 * @brief Rotates a node by an angle in any direction specified.
	 * @code{.cpp}
	 * self.RenderMeshComponent().SetRotationOffset(1, Math::Deg2Rad(64.0f), 0.0f, 1.0f, 0.0f);
	 * @endcode
	 * @param nodeID The node to rotate
	 * @param angle the angle to rotate the node by
	 * @param xMul the multiplier amount to rotate the node on the x axis
	 * @param yMul the multiplier amount to rotate the node on the y axis
	 * @param zMul the multiplier amount to rotate the node on the z axis
	 */
	void SetRotationOffset(const int nodeID, const float angle, const float xMul, const float yMul, const float zMul);
};
