diff options
author | BDKPlayer <fabian.stotz@yahoo.de> | 2020-04-10 17:54:48 +0200 |
---|---|---|
committer | BDKPlayer <fabian.stotz@yahoo.de> | 2020-04-10 17:54:48 +0200 |
commit | 8fc311eaba0bc23a2b4cfbbd7882d2385710e234 (patch) | |
tree | e2e59e86f4dea000b71746042915321943fe952c | |
parent | 5b7e11032b3e3870c3f5919e0d65927e95bbb31b (diff) |
Added Config system to save/load settings
-rw-r--r-- | AoE_imgui_DE.vcxproj | 10 | ||||
-rw-r--r-- | AoE_imgui_DE.vcxproj.filters | 16 | ||||
-rw-r--r-- | CastleManager.cpp | 40 | ||||
-rw-r--r-- | CastleManager.h | 5 | ||||
-rw-r--r-- | Config.cpp | 75 | ||||
-rw-r--r-- | Config.h | 41 | ||||
-rw-r--r-- | Core.cpp | 15 | ||||
-rw-r--r-- | Debug.cpp | 13 | ||||
-rw-r--r-- | ESP.cpp | 29 | ||||
-rw-r--r-- | ESP.h | 4 | ||||
-rw-r--r-- | Engine.cpp | 48 | ||||
-rw-r--r-- | Engine.h | 2 | ||||
-rw-r--r-- | Feature.cpp | 10 | ||||
-rw-r--r-- | Feature.h | 2 | ||||
-rw-r--r-- | FeatureManager.cpp | 16 | ||||
-rw-r--r-- | FeatureManager.h | 2 | ||||
-rw-r--r-- | MinimapText.cpp | 24 | ||||
-rw-r--r-- | MinimapText.h | 2 | ||||
-rw-r--r-- | OneVsOne.cpp | 26 | ||||
-rw-r--r-- | OneVsOne.h | 13 |
20 files changed, 365 insertions, 28 deletions
diff --git a/AoE_imgui_DE.vcxproj b/AoE_imgui_DE.vcxproj index 7bf3cfa..4b8491a 100644 --- a/AoE_imgui_DE.vcxproj +++ b/AoE_imgui_DE.vcxproj @@ -44,7 +44,7 @@ <ConfigurationType>DynamicLibrary</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> + <CharacterSet>NotSet</CharacterSet> <InterproceduralOptimization>false</InterproceduralOptimization> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> @@ -106,6 +106,7 @@ <Optimization>Disabled</Optimization> <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;AoE_imgui_DE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <BasicRuntimeChecks>Default</BasicRuntimeChecks> + <LanguageStandard>stdcpp17</LanguageStandard> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -138,6 +139,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;AoE_imgui_DE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <LanguageStandard>stdcpp17</LanguageStandard> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -149,6 +151,7 @@ <ItemGroup> <ClInclude Include="CastleManager.h" /> <ClInclude Include="Classes.h" /> + <ClInclude Include="Config.h" /> <ClInclude Include="Core.h" /> <ClInclude Include="CustomLoadingScreen.h" /> <ClInclude Include="Debug.h" /> @@ -168,8 +171,8 @@ <ClInclude Include="MidfunctionHook.h" /> <ClInclude Include="MinimapText.h" /> <ClInclude Include="Offsets.h" /> + <ClInclude Include="OneVsOne.h" /> <ClInclude Include="Patcher.h" /> - <ClInclude Include="PauseManager.h" /> <ClInclude Include="RelicManager.h" /> <ClInclude Include="Renderer.h" /> <ClInclude Include="ResourceInformation.h" /> @@ -180,6 +183,7 @@ </ItemGroup> <ItemGroup> <ClCompile Include="CastleManager.cpp" /> + <ClCompile Include="Config.cpp" /> <ClCompile Include="Core.cpp" /> <ClCompile Include="CustomLoadingScreen.cpp" /> <ClCompile Include="Debug.cpp" /> @@ -196,8 +200,8 @@ <ClCompile Include="MidfunctionHook.cpp" /> <ClCompile Include="MinimapText.cpp" /> <ClCompile Include="Offsets.cpp" /> + <ClCompile Include="OneVsOne.cpp" /> <ClCompile Include="Patcher.cpp" /> - <ClCompile Include="PauseManager.cpp" /> <ClCompile Include="RelicManager.cpp" /> <ClCompile Include="Renderer.cpp" /> <ClCompile Include="ResourceInformation.cpp" /> diff --git a/AoE_imgui_DE.vcxproj.filters b/AoE_imgui_DE.vcxproj.filters index ce84dd8..01a3a28 100644 --- a/AoE_imgui_DE.vcxproj.filters +++ b/AoE_imgui_DE.vcxproj.filters @@ -117,15 +117,18 @@ <ClInclude Include="Debug.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="PauseManager.h"> - <Filter>Header Files\Feature</Filter> - </ClInclude> <ClInclude Include="CastleManager.h"> <Filter>Header Files\Feature</Filter> </ClInclude> <ClInclude Include="ThreadsafeQueue.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="OneVsOne.h"> + <Filter>Header Files\Feature</Filter> + </ClInclude> + <ClInclude Include="Config.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="imgui\imgui.cpp"> @@ -194,11 +197,14 @@ <ClCompile Include="Debug.cpp"> <Filter>Source Files\Feature</Filter> </ClCompile> - <ClCompile Include="PauseManager.cpp"> + <ClCompile Include="CastleManager.cpp"> <Filter>Source Files\Feature</Filter> </ClCompile> - <ClCompile Include="CastleManager.cpp"> + <ClCompile Include="OneVsOne.cpp"> <Filter>Source Files\Feature</Filter> </ClCompile> + <ClCompile Include="Config.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> </Project>
\ No newline at end of file diff --git a/CastleManager.cpp b/CastleManager.cpp index 0ffedf7..373d6e5 100644 --- a/CastleManager.cpp +++ b/CastleManager.cpp @@ -6,15 +6,33 @@ #include "Engine.h" #include "SDK.h" #include "Renderer.h" +#include "Config.h" bool warningEnabled = true; -bool warnTeam = false; -bool warnAll = false; int notification = 0; ThreadSafeQueue<std::string> teamMessages; ThreadSafeQueue<std::string> allMessages; +void CastleManager::LoadConfig() +{ + Config* config = Config::Get(); + notification = config->ReadInt("CastleManager", "notification"); + warningEnabled = config->ReadInt("CastleManager", "warningEnabled"); +} + +void CastleManager::SaveConfig() +{ + Config* config = Config::Get(); + config->Write<int>("CastleManager", "warningEnabled", warningEnabled); + config->Write<int>("CastleManager", "notification", notification); +} + +void CastleManager::OnUnitIteration(Unit* unit, Player* player, int playerIndex) +{ + +} + void CastleManager::OnUnitCreated(Unit* unit) { if (!warningEnabled) @@ -76,4 +94,20 @@ void CastleManager::OnMenuMainWindow() ImGui::SameLine(); ImGui::RadioButton("All", ¬ification, 2); ImGui::Separator(); -}
\ No newline at end of file +} + +void CastleManager::OnDraw() +{ + /*if (strcmp("CSTL", unit->pUnitData->name) == 0) + { + Vector2 screenPos = Engine::Get()->worldToScreen(unit->position); + int screenResX = Engine::Get()->GetMainScreen()->pGameScreen->ScreenResX; + int screenResY = Engine::Get()->GetMainScreen()->pGameScreen->ScreenResY; + Renderer::Get()->RenderLine(ImVec2(screenResX / 2, screenResY / 2), ImVec2(screenPos.x, screenPos.y), 0xffffffff, 2); + }*/ +} + +void CastleManager::OnPlayerIteration(Player* player, int playerIndex) +{ + +} diff --git a/CastleManager.h b/CastleManager.h index 616faa2..9d151d7 100644 --- a/CastleManager.h +++ b/CastleManager.h @@ -5,6 +5,11 @@ class CastleManager : public Feature { //Callbacks + void LoadConfig() override; + void SaveConfig() override; + void OnUnitIteration(Unit* unit, Player* player, int playerIndex) override; void OnUnitCreated(Unit* unit) override; void OnMenuMainWindow() override; + void OnDraw() override; + void OnPlayerIteration(Player* player, int playerIndex) override; };
\ No newline at end of file diff --git a/Config.cpp b/Config.cpp new file mode 100644 index 0000000..bcb5939 --- /dev/null +++ b/Config.cpp @@ -0,0 +1,75 @@ +#include "Config.h" + +#include <Windows.h> + +#include <iostream> +#include <fstream> + +#include "Shlobj.h" +#include "Shlobj_core.h" + + +Config* Config::instance = NULL; + + +std::filesystem::path Config::GetConfigPath() +{ + TCHAR szPath[MAX_PATH]; + SHGetFolderPath(nullptr, CSIDL_APPDATA, nullptr, 0, szPath); + std::filesystem::path path = std::filesystem::path(szPath); + path.append("AoE2DE_imgui"); + return path; +} + +Config::Config() +{ + std::filesystem::path path = GetConfigPath(); + + //create directory if it doesn't exist + CreateDirectoryA(GetConfigPath().string().c_str(), NULL); + + //create config.ini if doesn't exist + std::ofstream configFile; + path.append("config.ini"); + configFile.open(path.c_str(), std::fstream::app); +} + +std::filesystem::path Config::GetConfigFilePath() +{ + std::filesystem::path path = GetConfigPath(); + path.append("config.ini"); + return path; +} + +float Config::ReadFloat(std::string feature, std::string settingsName) +{ + char buffer[256]; + int read = GetPrivateProfileString(feature.c_str(), settingsName.c_str(), NULL, buffer, 256, GetConfigFilePath().string().c_str()); + if (!read) + { + printf("Failed to read config: %s->%s\n", feature.c_str(), settingsName.c_str()); + } + return std::stof(buffer); +} + +int Config::ReadInt(std::string feature, std::string settingsName) +{ + char buffer[256]; + int read = GetPrivateProfileString(feature.c_str(), settingsName.c_str(), NULL, buffer, 256, GetConfigFilePath().string().c_str()); + if (!read) + { + printf("Failed to read config: %s->%s\n", feature.c_str(), settingsName.c_str()); + } + return std::stoi(buffer); +} + +std::string Config::ReadString(std::string feature, std::string settingsName) +{ + char buffer[256]; + int read = GetPrivateProfileString(feature.c_str(), settingsName.c_str(), NULL, buffer, 256, GetConfigFilePath().string().c_str()); + if (!read) + { + printf("Failed to read config: %s->%s\n", feature.c_str(), settingsName.c_str()); + } + return std::string(buffer); +}
\ No newline at end of file diff --git a/Config.h b/Config.h new file mode 100644 index 0000000..1fd994b --- /dev/null +++ b/Config.h @@ -0,0 +1,41 @@ +#pragma once +#include <filesystem> +#include <string> + + +class Config +{ + static Config* instance; + + Config(); +public: + + static Config* Get() + { + if (!instance) + { + instance = new Config(); + } + return instance; + } + + std::filesystem::path GetConfigPath(); + std::filesystem::path GetConfigFilePath(); + + + template <class T> + void Write(std::string feature, std::string settingsName, T value) + { + if (!WritePrivateProfileString(feature.c_str(), settingsName.c_str(), std::to_string(value).c_str(), GetConfigFilePath().string().c_str())) + { + printf("Failed to write config: %s->%s\n", feature.c_str(), settingsName.c_str()); + } + } + + float ReadFloat(std::string feature, std::string settingsName); + + int ReadInt(std::string feature, std::string settingsName); + + + std::string ReadString(std::string feature, std::string settingsName); +}; @@ -22,7 +22,7 @@ #include "RelicManager.h" #include "CustomLoadingScreen.h" #include "Debug.h" -#include "PauseManager.h" +//#include "PauseManager.h" MidfunctionHook onGameStartHook = MidfunctionHook(); MidfunctionHook onTurnHook = MidfunctionHook(); @@ -260,7 +260,7 @@ void Core::OnPresent() ImGui::Text("Localplayer %p", Engine::Get()->GetLocalPlayer()); ImGui::Text("PlayerArray %p", playerArray); ImGui::Text("totalPlayers %d", totalPlayers); - ImGui::Text("ScreenPos %f %f %f", mainScreen->pGameScreen->pMainView->ScreenPosX, mainScreen->pGameScreen->pMainView->ScreenPosY, mainScreen->pGameScreen->pMainView->ScreenPosZ); + ImGui::Text("ScreenPos %p %f %f %f", mainScreen->pGameScreen->pMainView, mainScreen->pGameScreen->pMainView->ScreenPosX, mainScreen->pGameScreen->pMainView->ScreenPosY, mainScreen->pGameScreen->pMainView->ScreenPosZ); ImGui::TreePop(); } ImGui::Separator(); @@ -277,6 +277,17 @@ void Core::OnPresent() FeatureManager::Get()->OnMenuMainWindow(); ImGui::Separator(); ImGui::Checkbox("Skip localplayer", &skipLocalplayer); + ImGui::Separator(); + ImGui::Separator(); + if(ImGui::Button("Save Config")) + { + FeatureManager::Get()->SaveConfig(); + } + ImGui::SameLine(); + if (ImGui::Button("Load Config")) + { + FeatureManager::Get()->LoadConfig(); + } } } __finally @@ -11,15 +11,16 @@ void Debug::OnInitialise() } void Debug::OnMenuMainWindow() { + int idleUnits = 0; + + PlayerArray* playerArray = Engine::Get()->GetPlayerArray(); + ImGui::Separator(); ImGui::Text("Debug"); - if (ImGui::Button("SendChat")) - { - Engine::Get()->SendChat("Testmessage", true); - } - if (ImGui::Button("SendChat2")) + //ImGui::Text("Idle: %d", idleUnit); + if (ImGui::Button("Flare")) { - Engine::Get()->SendChat("Testmessage2", false); + Engine::Get()->Flare(100.f, 100.f); } ImGui::Separator(); } @@ -6,6 +6,8 @@ #include <math.h> +#include "Config.h" + uint32_t ESP::colors_hex[8] = { 0xff0000ff, 0xffff0000,0xff00ff00,0xffffff00,0xff00ffff,0xffff00ff,0xffffffff,0xffffb400 }; void ESP::DrawBox(Unit* unit, int32_t color, bool drawName = false) @@ -108,6 +110,27 @@ void ESP::DrawCircle(Unit* unit, int radius, int32_t color, int smoothness = 16, } } +void ESP::LoadConfig() +{ + Config* config = Config::Get(); + siegeImpactLocation = config->ReadInt("ESP", "siegeImpactLocation"); + trebuchetESP = config->ReadInt("ESP", "trebuchetESP"); + gaiaESP = config->ReadInt("ESP", "gaiaESP"); + goldESP = config->ReadInt("ESP", "goldESP"); + stoneESP = config->ReadInt("ESP", "stoneESP"); +} + +void ESP::SaveConfig() +{ + Config* config = Config::Get(); + config->Write<int>("ESP", "siegeImpactLocation", siegeImpactLocation); + config->Write<int>("ESP", "trebuchetESP", trebuchetESP); + config->Write<int>("ESP", "gaiaESP", gaiaESP); + config->Write<int>("ESP", "goldESP", goldESP); + config->Write<int>("ESP", "stoneESP", stoneESP); +} + + void ESP::OnUnitIteration(Unit* unit, Player* player, int playerIndex) { if (playerUnitEsp[playerIndex]) @@ -194,7 +217,7 @@ void ESP::OnMenuPlayerTreenode(Player* player, int playerIndex) void ESP::OnNeutralUnit(Unit* unit) { - if (gaiaEsp || goldESP || stoneESP) + if (gaiaESP || goldESP || stoneESP) { std::string unitName = unit->pUnitData->name; Vector2 screenPos = Engine::Get()->worldToScreen(unit); @@ -215,7 +238,7 @@ void ESP::OnNeutralUnit(Unit* unit) return; } - if (!gaiaEsp) + if (!gaiaESP) { return; } @@ -281,7 +304,7 @@ void ESP::OnMenuMainWindow() ImGui::Checkbox("Trebuchet range", &trebuchetESP); ImGui::Separator(); ImGui::Text("Resource ESP"); - ImGui::Checkbox("Gaia##ESP", &gaiaEsp); + ImGui::Checkbox("Gaia##ESP", &gaiaESP); ImGui::SameLine(); ImGui::Checkbox("Gold##ESP", &goldESP); ImGui::SameLine(); @@ -5,7 +5,7 @@ struct Vector2; struct Vector3; class ESP : public Feature { - bool gaiaEsp = true; + bool gaiaESP = true; bool goldESP = true; bool stoneESP = true; bool trebuchetESP = true; @@ -21,6 +21,8 @@ class ESP : public Feature static uint32_t colors_hex[8]; //Callbacks + void LoadConfig() override; + void SaveConfig() override; void OnUnitIteration(Unit* unit, Player* player, int playerIndex) override; void OnMenuPlayerTreenode(Player* player, int playerIndex) override; void OnNeutralUnit(Unit* unit) override; @@ -128,24 +128,53 @@ ImVec4 Engine::GetPlayerColorImGUI(int colorIndex) const return color; } +Player* Engine::GetPlayer(int index) const +{ + const int totalPlayers = GetTotalPlayers(); + if (index > totalPlayers) + { + return nullptr; + } + + MainScreen* mainScreen = GetMainScreen(); + if (!mainScreen) + { + return nullptr; + } + + World* main = GetWorld(); + if (!main) + { + return nullptr; + } + + PlayerArray* playerArray = main->pPlayerArray; + if (!playerArray) + { + return nullptr; + } + + return playerArray->playerData[index].player; +} + Player* Engine::GetPlayerByName(char* playerName) const { MainScreen* mainScreen = GetMainScreen(); if (!mainScreen) { - return NULL; + return nullptr; } World* main = GetWorld(); if (!main) { - return NULL; + return nullptr; } PlayerArray* playerArray = main->pPlayerArray; if (!playerArray) { - return NULL; + return nullptr; } int totalPlayers = GetTotalPlayers(); @@ -161,7 +190,7 @@ Player* Engine::GetPlayerByName(char* playerName) const return player; } } - return NULL; + return nullptr; } Player* Engine::GetLocalPlayer() const @@ -214,4 +243,13 @@ void Engine::PrintBottomNotification(const char* message, unsigned int hexcolor) typedef void(__fastcall* tPrintBottomText) (GameScreen* AVGameScreen, const char* message, unsigned int hexcolor, int64_t unused); static tPrintBottomText fPrintBottomText = (tPrintBottomText)(base + Offsets::printBottomText); fPrintBottomText(GetMainScreen()->pGameScreen, message, hexcolor, 0xffffffffffffffff); //Color format: RBGA -}
\ No newline at end of file +} + +int64_t Engine::Flare(float xPos, float yPos) const +{ + typedef __int64(__fastcall* tCreateFlare) (Player* player, __int64 hundert12, __int64 zero1, __int64 zero2, float xPos, float yPos, int64_t zero3, int64_t zero4); + static tCreateFlare fCreateFlare = (tCreateFlare)(base + 0xc31270); + + return fCreateFlare(GetLocalPlayer(), 0x112, 0, 0, 220.f, 220.f, 0, 0); + //__usercall fhsCreateFlare_MAYBE_7FF718CF1270@<rax>( __int64 a3_zero@<r8>, __int64 a4_zero@<r9>, float xPos@<xmm2>, float yPos@<xmm3>, __int64 a5_zero, int a6_Zero) +} @@ -37,6 +37,7 @@ public: uint32_t GetPlayerColor(int colorIndex) const; ImVec4 GetPlayerColorImGUI(int colorIndex) const; + Player* GetPlayer(int index) const; Player* GetPlayerByName(char* playername) const; Player* GetLocalPlayer() const; @@ -44,4 +45,5 @@ public: void SendChat(const char* message, bool teamchat = false) const; void PrintNotification(const char* message) const; void PrintBottomNotification(const char* message, unsigned int hexcolor) const; + int64_t Flare(float xPos, float yPos) const; };
\ No newline at end of file diff --git a/Feature.cpp b/Feature.cpp index 9c49ea4..325e8b9 100644 --- a/Feature.cpp +++ b/Feature.cpp @@ -1,5 +1,15 @@ #include "Feature.h" +void Feature::LoadConfig() +{ + +} + +void Feature::SaveConfig() +{ + +} + void Feature::OnInitialise() { @@ -9,6 +9,8 @@ class Feature protected: bool enabled = true; public: + virtual void LoadConfig(); + virtual void SaveConfig(); virtual void OnInitialise(); virtual void OnGameStart(); virtual void OnTurn(); diff --git a/FeatureManager.cpp b/FeatureManager.cpp index 539f010..8d9b71f 100644 --- a/FeatureManager.cpp +++ b/FeatureManager.cpp @@ -27,6 +27,22 @@ void FeatureManager::RegisterFeature(Feature* feature) features.push_back(feature); } +void FeatureManager::LoadConfig() +{ + for (Feature* feature : features) + { + feature->LoadConfig(); + } +} + +void FeatureManager::SaveConfig() +{ + for (Feature* feature : features) + { + feature->SaveConfig(); + } +} + void FeatureManager::OnInitialise() { for (Feature* feature : features) diff --git a/FeatureManager.h b/FeatureManager.h index 6481150..7868507 100644 --- a/FeatureManager.h +++ b/FeatureManager.h @@ -18,6 +18,8 @@ public: void RegisterFeature(Feature* feature); //Callbacks + void LoadConfig(); + void SaveConfig(); void OnInitialise(); void OnGameStart(); void OnTurn(); diff --git a/MinimapText.cpp b/MinimapText.cpp index b48fe65..7638b4e 100644 --- a/MinimapText.cpp +++ b/MinimapText.cpp @@ -11,6 +11,8 @@ #include <map> +#include "Config.h" + #pragma warning( disable : 4244 ) MidfunctionHook minimapHook; @@ -74,6 +76,28 @@ void __fastcall minimapProxy(Registers* registers) MidfunctionHook::OverwriteRegister(registers->rsp, Register::RDI, (int64_t)newName.c_str()); } +void MinimapText::LoadConfig() +{ + Config* config = Config::Get(); + *hookEnabled = config->ReadInt("MinimapText", "hookEnabled"); + displayWood = config->ReadInt("MinimapText", "displayWood"); + displayFood = config->ReadInt("MinimapText", "displayFood"); + displayGold = config->ReadInt("MinimapText", "displayGold"); + displayStone = config->ReadInt("MinimapText", "displayStone"); + displayPopulation = config->ReadInt("MinimapText", "displayPopulation"); +} + +void MinimapText::SaveConfig() +{ + Config* config = Config::Get(); + config->Write<int>("MinimapText", "hookEnabled", *hookEnabled); + config->Write<int>("MinimapText", "displayWood", displayWood); + config->Write<int>("MinimapText", "displayFood", displayFood); + config->Write<int>("MinimapText", "displayGold", displayGold); + config->Write<int>("MinimapText", "displayStone", displayStone); + config->Write<int>("MinimapText", "displayPopulation", displayPopulation); +} + void MinimapText::OnInitialise() { hookEnabled = &enabled; diff --git a/MinimapText.h b/MinimapText.h index 5bc376a..e21c00e 100644 --- a/MinimapText.h +++ b/MinimapText.h @@ -5,6 +5,8 @@ class DetourHook64; class MinimapText : public Feature { //Callbacks + void LoadConfig() override; + void SaveConfig() override; void OnInitialise() override; void OnMenuMainWindow() override; void OnShutdown() override; diff --git a/OneVsOne.cpp b/OneVsOne.cpp new file mode 100644 index 0000000..8b87d65 --- /dev/null +++ b/OneVsOne.cpp @@ -0,0 +1,26 @@ +#include "OneVsOne.h" + +void OneVsOne::OnDraw() +{ + +} + +void OneVsOne::OnUnitIteration(Unit* unit, Player* player, int playerIndex) +{ + +} + +void OneVsOne::OnMenuPlayerTreenode(Player* player, int playerIndex) +{ + +} + +void OneVsOne::OnNeutralUnit(Unit* unit) +{ + +} + +void OneVsOne::OnMenuMainWindow() +{ + +}
\ No newline at end of file diff --git a/OneVsOne.h b/OneVsOne.h new file mode 100644 index 0000000..4c4d95f --- /dev/null +++ b/OneVsOne.h @@ -0,0 +1,13 @@ +#pragma once +#pragma once +#include "Feature.h" + +class OneVsOne : public Feature +{ + //Callbacks + void OnDraw() override; + void OnUnitIteration(Unit* unit, Player* player, int playerIndex) override; + void OnMenuPlayerTreenode(Player* player, int playerIndex) override; + void OnNeutralUnit(Unit* unit) override; + void OnMenuMainWindow() override; +};
\ No newline at end of file |