2020-12-02 16:19:16 -05:00
|
|
|
#include "pch.h"
|
|
|
|
#include "Animation.h"
|
2021-01-03 06:48:07 -05:00
|
|
|
#include "Ui.h"
|
|
|
|
#include "Util.h"
|
2020-12-02 16:19:16 -05:00
|
|
|
|
|
|
|
bool Animation::loop = false;
|
|
|
|
bool Animation::secondary = false;
|
|
|
|
char Animation::ifp_buffer[INPUT_BUFFER_SIZE] = "";
|
|
|
|
char Animation::anim_buffer[INPUT_BUFFER_SIZE] = "";
|
|
|
|
|
|
|
|
ImGuiTextFilter Animation::filter = "";
|
|
|
|
std::vector<std::string> Animation::search_categories;
|
|
|
|
std::string Animation::selected_item = "All";
|
|
|
|
|
|
|
|
CJson Animation::json = CJson("animation");
|
|
|
|
|
|
|
|
std::vector<std::string> fighting_vec{ "Default","Boxing","Kung fu","Kick Boxing","Punch Kick" };
|
|
|
|
int fighting_selected = 0;
|
|
|
|
|
2021-02-24 16:54:45 -05:00
|
|
|
std::vector<std::string> walking_vec{ "default", "man", "shuffle", "oldman", "gang1", "gang2",
|
|
|
|
"oldfatman", "fatman", "jogger", "drunkman", "blindman", "swat", "woman", "shopping", "busywoman",
|
2020-12-02 16:19:16 -05:00
|
|
|
"sexywoman", "pro", "oldwoman", "fatwoman", "jogwoman", "oldfatwoman", "skate" };
|
|
|
|
|
|
|
|
std::string walking_selected = "default";
|
|
|
|
|
|
|
|
Animation::Animation()
|
|
|
|
{
|
2020-12-20 14:23:32 -05:00
|
|
|
json.LoadData(search_categories, selected_item);
|
2020-12-02 16:19:16 -05:00
|
|
|
}
|
|
|
|
|
2021-02-24 16:54:45 -05:00
|
|
|
void Animation::Draw()
|
2020-12-02 16:19:16 -05:00
|
|
|
{
|
|
|
|
if (ImGui::BeginTabBar("Animation", ImGuiTabBarFlags_NoTooltip + ImGuiTabBarFlags_FittingPolicyScroll))
|
|
|
|
{
|
|
|
|
ImGui::Spacing();
|
|
|
|
int hplayer = CPools::GetPedRef(FindPlayerPed());
|
|
|
|
|
|
|
|
ImGui::Spacing();
|
|
|
|
|
|
|
|
if (ImGui::BeginTabItem("Anims"))
|
|
|
|
{
|
|
|
|
ImGui::Spacing();
|
|
|
|
if (ImGui::Button("Stop animation", Ui::GetSize()))
|
|
|
|
{
|
|
|
|
if (hplayer)
|
|
|
|
Command<Commands::CLEAR_CHAR_TASKS>(hplayer);
|
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::Spacing();
|
|
|
|
|
|
|
|
ImGui::Columns(2, 0, false);
|
|
|
|
ImGui::Checkbox("Loop", &loop);
|
|
|
|
ImGui::NextColumn();
|
|
|
|
ImGui::Checkbox("Secondary", &secondary);
|
|
|
|
ImGui::Columns(1);
|
|
|
|
ImGui::Spacing();
|
|
|
|
|
|
|
|
if (ImGui::BeginChild("Anims Child"))
|
|
|
|
{
|
|
|
|
ImGui::Spacing();
|
2021-01-07 16:07:45 -05:00
|
|
|
Ui::DrawJSON(json, search_categories, selected_item, filter, &PlayAnimation, &RemoveAnimation);
|
2020-12-02 16:19:16 -05:00
|
|
|
ImGui::EndChild();
|
|
|
|
}
|
|
|
|
ImGui::EndTabItem();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ImGui::BeginTabItem("Misc"))
|
|
|
|
{
|
|
|
|
ImGui::Spacing();
|
|
|
|
if (Ui::ListBox("Fighting", fighting_vec, fighting_selected))
|
|
|
|
{
|
|
|
|
Command<Commands::GIVE_MELEE_ATTACK_TO_CHAR>(hplayer, fighting_selected + 4, 6);
|
2021-02-24 16:54:45 -05:00
|
|
|
CHud::SetHelpMessage("Fighting anim set", false, false, false);
|
2020-12-02 16:19:16 -05:00
|
|
|
}
|
|
|
|
if (Ui::ListBoxStr("Walking", walking_vec, walking_selected))
|
|
|
|
{
|
|
|
|
if (walking_selected == "default")
|
|
|
|
{
|
|
|
|
patch::Set<DWORD>(0x609A4E, 0x4D48689, false);
|
|
|
|
patch::Set<WORD>(0x609A52, 0, false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
const char* cwalking_selected = walking_selected.c_str();
|
|
|
|
|
|
|
|
patch::Set<DWORD>(0x609A4E, -0x6F6F6F70, false);
|
|
|
|
patch::Nop(0x609A52, 2, false);
|
|
|
|
|
|
|
|
Command<Commands::REQUEST_ANIMATION>(cwalking_selected);
|
|
|
|
Command<Commands::LOAD_ALL_MODELS_NOW>();
|
|
|
|
Command<Commands::SET_ANIM_GROUP_FOR_CHAR>(hplayer, cwalking_selected);
|
|
|
|
Command<Commands::REMOVE_ANIMATION>(cwalking_selected);
|
2021-02-24 16:54:45 -05:00
|
|
|
}
|
2020-12-02 16:19:16 -05:00
|
|
|
CHud::SetHelpMessage("Walking anim set", false, false, false);
|
|
|
|
}
|
|
|
|
ImGui::EndTabItem();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ImGui::BeginTabItem("Custom"))
|
|
|
|
{
|
|
|
|
ImGui::InputTextWithHint("IFP name", "ped", ifp_buffer, INPUT_BUFFER_SIZE);
|
|
|
|
ImGui::InputTextWithHint("Anim name", "cower", anim_buffer, INPUT_BUFFER_SIZE);
|
|
|
|
ImGui::Spacing();
|
|
|
|
if (ImGui::Button("Add animation", Ui::GetSize()))
|
|
|
|
{
|
|
|
|
json.data["Custom"][anim_buffer] = ("0, " + std::string(ifp_buffer));
|
2020-12-20 14:23:32 -05:00
|
|
|
json.WriteToDisk();
|
2020-12-02 16:19:16 -05:00
|
|
|
}
|
|
|
|
ImGui::EndTabItem();
|
|
|
|
}
|
|
|
|
ImGui::EndTabBar();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Animation::PlayAnimation(std::string& ifp, std::string& anim, std::string& ifp_repeat)
|
|
|
|
{
|
|
|
|
int hplayer = CPools::GetPedRef(FindPlayerPed());
|
|
|
|
|
|
|
|
if (ifp != "PED")
|
|
|
|
{
|
|
|
|
Command<Commands::REQUEST_ANIMATION>(ifp.c_str());
|
|
|
|
Command<Commands::LOAD_ALL_MODELS_NOW>();
|
|
|
|
}
|
|
|
|
|
|
|
|
Command<Commands::CLEAR_CHAR_TASKS>(hplayer);
|
|
|
|
if (secondary)
|
|
|
|
Command<Commands::TASK_PLAY_ANIM_SECONDARY>(hplayer, anim.c_str(), ifp.c_str(), 4.0, loop, 0, 0, 0, -1);
|
|
|
|
else
|
|
|
|
Command<Commands::TASK_PLAY_ANIM>(hplayer, anim.c_str(), ifp.c_str(), 4.0, loop, 0, 0, 0, -1);
|
2021-02-24 16:54:45 -05:00
|
|
|
|
2020-12-02 16:19:16 -05:00
|
|
|
if (ifp != "PED")
|
|
|
|
Command<Commands::REMOVE_ANIMATION>(ifp.c_str());
|
|
|
|
}
|
|
|
|
|
2021-01-07 16:07:45 -05:00
|
|
|
void Animation::RemoveAnimation(std::string& ifp, std::string& anim, std::string& ifp_repeat)
|
2020-12-02 16:19:16 -05:00
|
|
|
{
|
|
|
|
flog << ifp << std::endl;
|
|
|
|
if (ifp == "Custom")
|
|
|
|
{
|
|
|
|
json.data["Custom"].erase(anim);
|
2021-01-13 13:25:28 -05:00
|
|
|
json.WriteToDisk();
|
2020-12-02 16:19:16 -05:00
|
|
|
CHud::SetHelpMessage("Animation removed", false, false, false);
|
2021-02-24 16:54:45 -05:00
|
|
|
}
|
|
|
|
else CHud::SetHelpMessage("You can only remove custom anims", false, false, false);
|
2020-12-02 16:19:16 -05:00
|
|
|
|
|
|
|
}
|
|
|
|
|