aboutsummaryrefslogtreecommitdiff
path: root/libs/bsapacker/src/DummyPluginServiceFactory.cpp
blob: fcd0705e3dbf81f3d8f2c45f42966ad52d19aa2c (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "DummyPluginServiceFactory.h"

#include "NexusId.h"

#include "Fallout3DummyPluginService.h"
#include "Fallout4DummyPluginService.h"
#include "NewVegasDummyPluginService.h"
#include "NullDummyPluginService.h"
#include "OblivionDummyPluginService.h"
#include "SkyrimDummyPluginService.h"
#include "SkyrimSEDummyPluginService.h"
#include "StarfieldDummyPluginService.h"

#include <QMessageBox>

namespace BsaPacker
{
	DummyPluginServiceFactory::DummyPluginServiceFactory(
			const IModContext* modContext,
			const IFileWriterService* fileWriterService,
			const IDummyPluginLogic* dummyPluginLogic)
		: m_ModContext(modContext),
		  m_FileWriterService(fileWriterService),
		  m_DummyPluginLogic(dummyPluginLogic)
	{
	}

	std::unique_ptr<IDummyPluginService> DummyPluginServiceFactory::Create() const
	{
		// violates SRP! Must seperate choosing logic from construction. This class is not a factory, but a strategy!
		switch (this->m_ModContext->GetNexusId()) {
			case NexusId::Oblivion:
				return std::make_unique<OblivionDummyPluginService>(m_FileWriterService, m_DummyPluginLogic);
			case NexusId::Fallout3:
				return std::make_unique<Fallout3DummyPluginService>(m_FileWriterService, m_DummyPluginLogic);
			case NexusId::NewVegas:
				return std::make_unique<NewVegasDummyPluginService>(m_FileWriterService, m_DummyPluginLogic);
			case NexusId::Skyrim:
			case NexusId::Enderal:
				return std::make_unique<SkyrimDummyPluginService>(m_FileWriterService, m_DummyPluginLogic);
			case NexusId::SkyrimSE:
			case NexusId::EnderalSE:
				return std::make_unique<SkyrimSEDummyPluginService>(m_FileWriterService, m_DummyPluginLogic);
			case NexusId::Fallout4:
				return std::make_unique<Fallout4DummyPluginService>(m_FileWriterService, m_DummyPluginLogic);
			case NexusId::Starfield:
				return std::make_unique<StarfieldDummyPluginService>(m_FileWriterService, m_DummyPluginLogic);
			case NexusId::Morrowind:
			default:
				break;
		}
		return std::make_unique<NullDummyPluginService>();
	}
} // namespace BsaPacker