1 | //************************************ bs::framework - Copyright 2018 Marko Pintera **************************************// |
2 | //*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********// |
3 | #pragma once |
4 | |
5 | #include "BsCorePrerequisites.h" |
6 | #include "Scene/BsGameObject.h" |
7 | |
8 | namespace bs |
9 | { |
10 | /** @addtogroup Scene |
11 | * @{ |
12 | */ |
13 | |
14 | /** Performs various prefab specific operations. */ |
15 | class BS_CORE_EXPORT PrefabUtility |
16 | { |
17 | public: |
18 | /** |
19 | * Remove any instance specific changes to the object or its hierarchy from the provided prefab instance and |
20 | * restore it to the exact copy of the linked prefab. |
21 | * |
22 | * @param[in] so Object to revert. |
23 | */ |
24 | static void revertToPrefab(const HSceneObject& so); |
25 | |
26 | /** |
27 | * Updates all of the objects belonging to the same prefab instance as the provided object (if any). The update |
28 | * will apply any changes from the linked prefab to the hierarchy (if any). |
29 | * |
30 | * @param[in] so Object to update. |
31 | */ |
32 | static void updateFromPrefab(const HSceneObject& so); |
33 | |
34 | /** |
35 | * Generates prefab "link" ID that can be used for tracking which game object in a prefab instance corresponds to |
36 | * an object in the prefab. |
37 | * |
38 | * @note If any children of the provided object belong to another prefab they will not have IDs generated. |
39 | */ |
40 | static void generatePrefabIds(const HSceneObject& sceneObject); |
41 | |
42 | /** |
43 | * Clears all prefab "link" IDs in the provided object and its children. |
44 | * |
45 | * @param[in] sceneObject Prefab instance to clear the link IDs from. |
46 | * @param[in] recursive If true, all children of the provided scene object will be cleared as well. |
47 | * @param[in] clearRoot If true, the root provided object will have its link ID cleared. If false the root |
48 | * object's components will have their IDs cleared but not the scene object itself. |
49 | * (Child scene objects will have their link IDs cleared in case @p recursive is true.) |
50 | * |
51 | * @note If any of its children belong to another prefab they will not be cleared. |
52 | */ |
53 | static void clearPrefabIds(const HSceneObject& sceneObject, bool recursive = true, bool clearRoot = true); |
54 | |
55 | /** |
56 | * Updates the internal prefab diff data by recording the difference between the current values in the provided |
57 | * prefab instance and its prefab. |
58 | * |
59 | * @note |
60 | * If the provided object contains any child prefab instances, this will be done recursively for them as well. |
61 | */ |
62 | static void recordPrefabDiff(const HSceneObject& sceneObject); |
63 | }; |
64 | |
65 | /** @} */ |
66 | } |