| 913 | } |
| 914 | |
| 915 | void FindObjectsForSpawn(SpawnGroup& group, ChunkedArray<SpawnItem, 256>& spawnItems, ScriptingObject* obj) |
| 916 | { |
| 917 | // Add any registered network objects |
| 918 | auto it = Objects.Find(obj->GetID()); |
| 919 | if (it != Objects.End()) |
| 920 | { |
| 921 | auto& item = it->Item; |
| 922 | if (!item.Spawned) |
| 923 | { |
| 924 | // One of the parents of this object is being spawned so spawn it too |
| 925 | item.Spawned = true; |
| 926 | auto& spawnItem = spawnItems.AddOne(); |
| 927 | spawnItem.Object = obj; |
| 928 | spawnItem.Targets.Link(item.TargetClientIds); |
| 929 | spawnItem.OwnerClientId = item.OwnerClientId; |
| 930 | spawnItem.Role = item.Role; |
| 931 | group.Items.Add(&spawnItem); |
| 932 | } |
| 933 | } |
| 934 | |
| 935 | // Iterate over children |
| 936 | if (auto* actor = ScriptingObject::Cast<Actor>(obj)) |
| 937 | { |
| 938 | for (auto* script : actor->Scripts) |
| 939 | FindObjectsForSpawn(group, spawnItems, script); |
| 940 | for (auto* child : actor->Children) |
| 941 | FindObjectsForSpawn(group, spawnItems, child); |
| 942 | } |
| 943 | } |
| 944 | |
| 945 | FORCE_INLINE void DirtyObjectImpl(NetworkReplicatedObject& item, ScriptingObject* obj) |
| 946 | { |