summaryrefslogtreecommitdiffhomepage
path: root/MagicEx/include/MagicLoad.inl.h
blob: e32ba60927326b8527a0a29148607b6256d58bbb (plain)
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
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.
*/

#include <memory>

#include <Solid.h>


template <typename ModelLoader>
bool
ImportInto(const char* pathname, Solid* target)
{
	ModelLoader loader {pathname};
	if (auto* original = target->GetModel()) {
		auto solid = std::make_unique<Solid>();
		if (!solid->Load(&loader))
			return false;
		auto* imported = solid->GetModel();
		original->GetMaterials().append(imported->GetMaterials());
		original->GetSurfaces().append(imported->GetSurfaces());
		original->OptimizeMaterials();
		imported->GetMaterials().clear();
		imported->GetSurfaces().clear();
		return true;
	}
	return target->Load(&loader);
}