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\select-camera-modes-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\vehicles-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\select-camera-modes-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\vehicles-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\segments\position-rotation-menu-segment.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\menus\ped-template\options-menu.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\events\position-store-entries-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\menus\ped-template\options-menu.h" />
|
||||
<ClInclude Include="src\game\utils\gang-utils.h" />
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
#include "camera-advanced-menu.h"
|
||||
#include "world-menu.h"
|
||||
#include "spawn-object-menu.h"
|
||||
#include "spawn-ped-menu.h"
|
||||
#include "ped-template/ped-template-menus.h"
|
||||
#include "position-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 "spawn-object-menu.h"
|
||||
#include "spawn-ped-menu.h"
|
||||
#include "../root.h"
|
||||
|
||||
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"Spawn object", options.textSize);
|
||||
m_menuController->CreateItem<UiModule::Text>(vertCont, L"Spawn character", options.textSize);
|
||||
|
||||
SetPreviousSelectedIndex();
|
||||
|
||||
@ -36,6 +38,9 @@ void ModMenuModule::WorldMenu::OnMenuAction(UiModule::Selectable* item, UiModule
|
||||
case 1: // Spawn object
|
||||
ModMenuModule::MenuManager::GetInstance()->AddMenu<ModMenuModule::SpawnObjectMenu>();
|
||||
break;
|
||||
case 2: // Spawn character
|
||||
ModMenuModule::MenuManager::GetInstance()->AddMenu<ModMenuModule::SpawnPedMenu>();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user