Add SpawnPedMenu
- Added ModMenuModule::SpawnPedMenu placed inside of ModMenuModule::WorldMenu
This commit is contained in:
parent
64b126156a
commit
530b53a6a6
@ -439,6 +439,7 @@
|
|||||||
<ClInclude Include="src\modules\modmenu\menus\saved-vehicle-options-menu.h" />
|
<ClInclude Include="src\modules\modmenu\menus\saved-vehicle-options-menu.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\menus\select-camera-modes-menu.h" />
|
<ClInclude Include="src\modules\modmenu\menus\select-camera-modes-menu.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\menus\spawn-object-menu.h" />
|
<ClInclude Include="src\modules\modmenu\menus\spawn-object-menu.h" />
|
||||||
|
<ClInclude Include="src\modules\modmenu\menus\spawn-ped-menu.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\menus\spawn-vehicle-menu.h" />
|
<ClInclude Include="src\modules\modmenu\menus\spawn-vehicle-menu.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\menus\vehicles-menu.h" />
|
<ClInclude Include="src\modules\modmenu\menus\vehicles-menu.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\menus\version-menu.h" />
|
<ClInclude Include="src\modules\modmenu\menus\version-menu.h" />
|
||||||
@ -730,6 +731,7 @@
|
|||||||
<ClCompile Include="src\modules\modmenu\menus\saved-vehicle-options-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\saved-vehicle-options-menu.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\menus\select-camera-modes-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\select-camera-modes-menu.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\menus\spawn-object-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\spawn-object-menu.cpp" />
|
||||||
|
<ClCompile Include="src\modules\modmenu\menus\spawn-ped-menu.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\menus\spawn-vehicle-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\spawn-vehicle-menu.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\menus\vehicles-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\vehicles-menu.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\menus\version-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\version-menu.cpp" />
|
||||||
|
|||||||
@ -187,6 +187,7 @@
|
|||||||
<ClCompile Include="src\modules\modmenu\menus\position-rotation-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\position-rotation-menu.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\segments\position-rotation-menu-segment.cpp" />
|
<ClCompile Include="src\modules\modmenu\segments\position-rotation-menu-segment.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\cheats\position-store.cpp" />
|
<ClCompile Include="src\modules\modmenu\cheats\position-store.cpp" />
|
||||||
|
<ClCompile Include="src\modules\modmenu\menus\spawn-ped-menu.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\segments\spawn-ped-segment.cpp" />
|
<ClCompile Include="src\modules\modmenu\segments\spawn-ped-segment.cpp" />
|
||||||
<ClCompile Include="src\modules\modmenu\menus\ped-template\options-menu.cpp" />
|
<ClCompile Include="src\modules\modmenu\menus\ped-template\options-menu.cpp" />
|
||||||
<ClCompile Include="src\game\utils\gang-utils.cpp" />
|
<ClCompile Include="src\game\utils\gang-utils.cpp" />
|
||||||
@ -530,6 +531,7 @@
|
|||||||
<ClInclude Include="src\modules\modmenu\cheats\position-store.h" />
|
<ClInclude Include="src\modules\modmenu\cheats\position-store.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\events\position-store-entries-update.h" />
|
<ClInclude Include="src\modules\modmenu\events\position-store-entries-update.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\events\player-pos-rot-update.h" />
|
<ClInclude Include="src\modules\modmenu\events\player-pos-rot-update.h" />
|
||||||
|
<ClInclude Include="src\modules\modmenu\menus\spawn-ped-menu.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\segments\spawn-ped-segment.h" />
|
<ClInclude Include="src\modules\modmenu\segments\spawn-ped-segment.h" />
|
||||||
<ClInclude Include="src\modules\modmenu\menus\ped-template\options-menu.h" />
|
<ClInclude Include="src\modules\modmenu\menus\ped-template\options-menu.h" />
|
||||||
<ClInclude Include="src\game\utils\gang-utils.h" />
|
<ClInclude Include="src\game\utils\gang-utils.h" />
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
#include "camera-advanced-menu.h"
|
#include "camera-advanced-menu.h"
|
||||||
#include "world-menu.h"
|
#include "world-menu.h"
|
||||||
#include "spawn-object-menu.h"
|
#include "spawn-object-menu.h"
|
||||||
|
#include "spawn-ped-menu.h"
|
||||||
#include "ped-template/ped-template-menus.h"
|
#include "ped-template/ped-template-menus.h"
|
||||||
#include "position-menu.h"
|
#include "position-menu.h"
|
||||||
#include "native-cheats-menu.h"
|
#include "native-cheats-menu.h"
|
||||||
|
|||||||
99
src/modules/modmenu/menus/spawn-ped-menu.cpp
Normal file
99
src/modules/modmenu/menus/spawn-ped-menu.cpp
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#include "spawn-ped-menu.h"
|
||||||
|
#include "../root.h"
|
||||||
|
#include "../segments/position-rotation-menu-segment.h"
|
||||||
|
#include "../segments/spawn-ped-segment.h"
|
||||||
|
|
||||||
|
ModMenuModule::SpawnPedMenu::SpawnPedMenu()
|
||||||
|
{
|
||||||
|
m_posRotMenuSegment = CreateSegment<PositionRotationMenuSegment>("ModMenu_SpawnPedMenu_PositionRotationMenuSegment");
|
||||||
|
m_SpawnPedSegment = CreateSegment<SpawnPedSegment>("ModMenu_SpawnPedMenu_SpawnSegment");
|
||||||
|
}
|
||||||
|
|
||||||
|
ModMenuModule::SpawnPedMenu::~SpawnPedMenu()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ModMenuModule::SpawnPedMenu::Attach()
|
||||||
|
{
|
||||||
|
UiModule::Component* vertCont;
|
||||||
|
CreateMenu(L"#Spawn character#", vertCont);
|
||||||
|
UiModule::RootModule* uiRoot = UiModule::RootModule::GetInstance();
|
||||||
|
const auto& options = ModMenuModule::RootModule::GetInstance()->GetOptions();
|
||||||
|
PersistenceModule::PersistenceManager* persistence = PersistenceModule::PersistenceManager::GetInstance();
|
||||||
|
|
||||||
|
m_menuController->CreateItem<UiModule::Text>(vertCont, L"Go back", options.textSize);
|
||||||
|
|
||||||
|
uiRoot->AddComponent<UiModule::Spacer>(vertCont, 0, options.menuSpacerHeight);
|
||||||
|
|
||||||
|
AttachSegment(m_posRotMenuSegment, this, vertCont);
|
||||||
|
AttachSegment(m_SpawnPedSegment, this, vertCont);
|
||||||
|
|
||||||
|
// spawn button
|
||||||
|
auto spawnText = m_menuController->CreateItem<UiModule::Text>(vertCont, L"Spawn", options.textSize);
|
||||||
|
auto spawnBtn = m_menuController->CreateLatestItemController<UiModule::ButtonController>(spawnText);
|
||||||
|
spawnBtn->SetCallback(this, &SpawnPedMenu::Spawn);
|
||||||
|
|
||||||
|
SetPreviousSelectedIndex();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModMenuModule::SpawnPedMenu::Detach()
|
||||||
|
{
|
||||||
|
SaveCurrentSelectedIndex();
|
||||||
|
DetachSegment(m_posRotMenuSegment);
|
||||||
|
DetachSegment(m_SpawnPedSegment);
|
||||||
|
DestroyMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModMenuModule::SpawnPedMenu::OnShow()
|
||||||
|
{
|
||||||
|
SetSegmentsVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModMenuModule::SpawnPedMenu::OnHide()
|
||||||
|
{
|
||||||
|
SetSegmentsVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModMenuModule::SpawnPedMenu::OnMenuAction(UiModule::Selectable* item, UiModule::MenuItemId id)
|
||||||
|
{
|
||||||
|
if (id == 0) {
|
||||||
|
MenuManager::GetInstance()->RemoveLastMenu();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_posRotMenuSegment->OnPassedMenuAction(item, id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_SpawnPedSegment->OnPassedMenuAction(item, id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModMenuModule::SpawnPedMenu::Spawn()
|
||||||
|
{
|
||||||
|
auto spawnSegmentDataOpt = m_SpawnPedSegment->GetSegmentData();
|
||||||
|
if (!spawnSegmentDataOpt.has_value()) {
|
||||||
|
spdlog::error("Cannot spawn ped: failed to get SpawnPedSegment data.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto positionSegmentDataOpt = m_posRotMenuSegment->GetSegmentData();
|
||||||
|
if (!positionSegmentDataOpt.has_value()) {
|
||||||
|
spdlog::error("Cannot spawn ped: failed to get PositionRotationMenuSegment data");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& spawnSegmentData = spawnSegmentDataOpt.value();
|
||||||
|
auto& positionSegmentData = positionSegmentDataOpt.value();
|
||||||
|
|
||||||
|
bool success = spawnSegmentData.inNearestCar ?
|
||||||
|
Utils::SpawnPed::SpawnPedInNearestCar(positionSegmentData.position, spawnSegmentData.pedTemplate.data) :
|
||||||
|
Utils::SpawnPed::SpawnPed(positionSegmentData.position, positionSegmentData.rotation, spawnSegmentData.pedTemplate.data);
|
||||||
|
|
||||||
|
if (!success) {
|
||||||
|
ToastManager::GetInstance()->Show({ L"Failed to spawn character", ToastType::Error });
|
||||||
|
}
|
||||||
|
}
|
||||||
27
src/modules/modmenu/menus/spawn-ped-menu.h
Normal file
27
src/modules/modmenu/menus/spawn-ped-menu.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../menu-base.h"
|
||||||
|
#include "../segment-support.h"
|
||||||
|
|
||||||
|
namespace ModMenuModule {
|
||||||
|
class PositionRotationMenuSegment;
|
||||||
|
class SpawnPedSegment;
|
||||||
|
|
||||||
|
class SpawnPedMenu : public MenuBase, public SegmentSupport {
|
||||||
|
public:
|
||||||
|
SpawnPedMenu();
|
||||||
|
virtual ~SpawnPedMenu();
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual bool Attach() override;
|
||||||
|
virtual void Detach() override;
|
||||||
|
virtual void OnShow() override;
|
||||||
|
virtual void OnHide() override;
|
||||||
|
|
||||||
|
void OnMenuAction(UiModule::Selectable* item, UiModule::MenuItemId id) override;
|
||||||
|
void Spawn();
|
||||||
|
|
||||||
|
PositionRotationMenuSegment* m_posRotMenuSegment = nullptr;
|
||||||
|
SpawnPedSegment* m_SpawnPedSegment = nullptr;
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
#include "world-menu.h"
|
#include "world-menu.h"
|
||||||
#include "spawn-object-menu.h"
|
#include "spawn-object-menu.h"
|
||||||
|
#include "spawn-ped-menu.h"
|
||||||
#include "../root.h"
|
#include "../root.h"
|
||||||
|
|
||||||
ModMenuModule::WorldMenu::WorldMenu()
|
ModMenuModule::WorldMenu::WorldMenu()
|
||||||
@ -21,6 +22,7 @@ bool ModMenuModule::WorldMenu::Attach()
|
|||||||
|
|
||||||
m_menuController->CreateItem<UiModule::Text>(vertCont, L"Go back", options.textSize);
|
m_menuController->CreateItem<UiModule::Text>(vertCont, L"Go back", options.textSize);
|
||||||
m_menuController->CreateItem<UiModule::Text>(vertCont, L"Spawn object", options.textSize);
|
m_menuController->CreateItem<UiModule::Text>(vertCont, L"Spawn object", options.textSize);
|
||||||
|
m_menuController->CreateItem<UiModule::Text>(vertCont, L"Spawn character", options.textSize);
|
||||||
|
|
||||||
SetPreviousSelectedIndex();
|
SetPreviousSelectedIndex();
|
||||||
|
|
||||||
@ -36,6 +38,9 @@ void ModMenuModule::WorldMenu::OnMenuAction(UiModule::Selectable* item, UiModule
|
|||||||
case 1: // Spawn object
|
case 1: // Spawn object
|
||||||
ModMenuModule::MenuManager::GetInstance()->AddMenu<ModMenuModule::SpawnObjectMenu>();
|
ModMenuModule::MenuManager::GetInstance()->AddMenu<ModMenuModule::SpawnObjectMenu>();
|
||||||
break;
|
break;
|
||||||
|
case 2: // Spawn character
|
||||||
|
ModMenuModule::MenuManager::GetInstance()->AddMenu<ModMenuModule::SpawnPedMenu>();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user