155 lines
3.6 KiB
C++
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;
|
|
}
|
|
} |