aboutsummaryrefslogtreecommitdiff
path: root/sdk/toolkit/include/NvBlastTkFamily.h
blob: be6edd6feeea7d32c592920773d93ba7474db987 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* Copyright (c) 2016-2017, 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 NVBLASTTKFAMILY_H
#define NVBLASTTKFAMILY_H

#include "NvBlastTkSerializable.h"


// Forward declarations
struct NvBlastFamily;


namespace Nv
{
namespace Blast
{

// Forward declarations
class TkActor;
class TkAsset;
class TkEventListener;


/**
The TkFamily is associated with the TkActor that is instanced from a TkAsset, as well as all descendent TkActors generated
by spliting TkActors within the family.  It encapsulates an NvBlastFamily, and also holds a material which will be used
by default on all TkActors during damage functions.
*/
class TkFamily : public TkSerializable
{
public:
	/**
	Access to underlying low-level family.

	\return a pointer to the (const) low-level NvBlastFamily object.
	*/
	virtual const NvBlastFamily*	getFamilyLL() const = 0;

	/**
	Every family has an associated asset (the TkAsset which was instanced to create the first member of the family).

	\return a pointer to the (const) TkAsset object.
	*/
	virtual const TkAsset*			getAsset() const = 0;

	/**
	The number of actors currently in this family.

	\return the number of TkActors that currently exist in this family.
	*/
	virtual uint32_t				getActorCount() const = 0;

	/**
	Retrieve an array of pointers (into the user-supplied buffer) to actors.

	\param[out]	buffer		A user-supplied array of TkActor pointers.
	\param[in]	bufferSize	The number of elements available to write into buffer.
	\param[in]	indexStart	The starting index of the actor.

	\return the number of TkActor pointers written to the buffer.
	*/
	virtual uint32_t				getActors(TkActor** buffer, uint32_t bufferSize, uint32_t indexStart = 0) const = 0;

	/**
	Add a user implementation of TkEventListener to this family's list of listeners.  These listeners will receive
	all split and fracture events generated by TkActor objects in this family.  They will also receive joint update events
	when TkJoint objects are updated that are (or were) associated with a TkActor in this family.

	\param[in]	l			The event listener to add.
	*/
	virtual void					addListener(TkEventListener& l) = 0;

	/**
	Remove a TkEventReciever from this family's list of listeners.

	\param[in]	l			The event listener to remove.
	*/
	virtual void					removeListener(TkEventListener& l) = 0;

	/**
	This function applies fracture buffers on relevant actors (actor which contains corresponding bond/chunk) in family.

	\param[in]	commands	The fracture commands to process.
	*/
	virtual void					applyFracture(const NvBlastFractureBuffers* commands) = 0;

	/**
	A function to reinitialize this family with new family. The Family must be created from the same low-level asset, but can be 
	in any other state.  As a result split events (TkEvent::Split) will be dispatched reflecting the resulting changes (created and removed actors)
	Afterwards the family will contain a copy of the new family and all actors' low-level actor pointers will be updated.

	\param[in] newFamily		The NvBlastFamily to use to reinitialize this family.
	\param[in] group			The group for new actors to be placed in.
	*/
	virtual void					reinitialize(const NvBlastFamily* newFamily, TkGroup* group = nullptr) = 0;

	/**
	The default material to be passed into NvBlastDamageProgram when a TkActor in this family is damaged.

	\return a pointer to the default material.
	*/
	virtual const void*				getMaterial() const = 0;

	/**
	Set the default material to be passed into NvBlastDamageProgram when a TkActor in this family is damaged.  Must be valid till group sync() call.

	\param[in] material			The material to be the new default.
	*/
	virtual void					setMaterial(const void* material) = 0;
};

} // namespace Blast
} // namespace Nv


#endif // ifndef NVBLASTTKFAMILY_H