Files
PDModdingCommunity_PD-Loader/source-code/source/plugins/TLAC/Components/ComponentsManager.cpp
T

155 lines
3.6 KiB
C++

#include "ComponentsManager.h"
#include "../FileSystem/ConfigFile.h"
#include "../framework.h"
#include "Input/InputEmulator.h"
#include "Input/TouchSliderEmulator.h"
#include "Input/TouchPanelEmulator.h"
#include "SysTimer.h"
#include "PlayerDataManager.h"
#include "FrameRateManager.h"
#include "FastLoader.h"
#include "StageManager.h"
#include "CameraController.h"
#include "DebugComponent.h"
#include "ScaleComponent.h"
#include "ScoreSaver.h"
#include "GameTargets/TargetInspector.h"
using ConfigFile = TLAC::FileSystem::ConfigFile;
namespace TLAC::Components
{
typedef void EngineUpdateInput(void*);
ComponentsManager::ComponentsManager()
{
}
ComponentsManager::~ComponentsManager()
{
}
void ComponentsManager::ParseAddComponents()
{
EmulatorComponent* allComponents[]
{
new TargetInspector(),
new InputEmulator(),
new TouchSliderEmulator(),
new TouchPanelEmulator(),
new SysTimer(),
new PlayerDataManager(),
new FrameRateManager(),
new FastLoader(),
new ScaleComponent(),
new ScoreSaver(),
new StageManager(),
new CameraController(),
new DebugComponent(),
};
ConfigFile componentsConfig(framework::GetModuleDirectory(), COMPONENTS_CONFIG_FILE_NAME);
bool success = componentsConfig.OpenRead();
if (!success)
{
printf("ComponentsManager::ParseAddComponents(): Unable to parse %s\n", COMPONENTS_CONFIG_FILE_NAME.c_str());
return;
}
size_t componentCount = sizeof(allComponents) / sizeof(EmulatorComponent*);
components.reserve(componentCount);
std::string trueString = "true", falseString = "false";
for (int i = 0; i < componentCount; i++)
{
std::string* value;
auto name = allComponents[i]->GetDisplayName();
//printf("ComponentsManager::ParseAddComponents(): searching name: %s\n", name);
if (componentsConfig.TryGetValue(name, &value))
{
//printf("ComponentsManager::ParseAddComponents(): %s found\n", name);
if (*value == trueString)
{
//printf("ComponentsManager::ParseAddComponents(): enabling %s...\n", name);
components.push_back(allComponents[i]);
}
else if (*value == falseString)
{
//printf("ComponentsManager::ParseAddComponents(): disabling %s...\n", name);
}
else
{
//printf("ComponentsManager::ParseAddComponents(): invalid value %s for component %s\n", value, name);
}
delete value;
}
else
{
//printf("ParseAddComponents(): component %s not found\n", name);
delete allComponents[i];
}
}
}
void ComponentsManager::Initialize()
{
dwGuiDisplay = (DwGuiDisplay*) * (uint64_t*)DW_GUI_DISPLAY_INSTANCE_PTR_ADDRESS;
ParseAddComponents();
updateStopwatch.Start();
for (auto& component : components)
component->Initialize(this);
}
void ComponentsManager::Update()
{
elpasedTime = updateStopwatch.Restart();
for (auto& component : components)
{
component->SetElapsedTime(elpasedTime);
component->Update();
}
}
void ComponentsManager::UpdateInput()
{
if (!GetIsInputEmulatorUsed())
{
uint64_t* inputStatePtr = (uint64_t*)INPUT_STATE_PTR_ADDRESS;
// poll input using the original PollInput function we overwrote with the update hook instead
if (inputStatePtr != nullptr)
((EngineUpdateInput*)ENGINE_UPDATE_INPUT_ADDRESS)((void*)* inputStatePtr);
}
for (auto& component : components)
component->UpdateInput();
}
void ComponentsManager::OnFocusGain()
{
for (auto& component : components)
component->OnFocusGain();
}
void ComponentsManager::OnFocusLost()
{
for (auto& component : components)
component->OnFocusLost();
}
void ComponentsManager::Dispose()
{
for (auto& component : components)
delete component;
}
}