mirror of https://github.com/AxioDL/metaforce.git
CScriptActor & CDamageVulnerability inspect
This commit is contained in:
parent
53aabceae2
commit
1d95301789
|
@ -267,9 +267,10 @@ void ImGuiConsole::ShowInspectWindow(bool* isOpen) {
|
||||||
|
|
||||||
ImGuiTableSortSpecs* sortSpecs = ImGui::TableGetSortSpecs();
|
ImGuiTableSortSpecs* sortSpecs = ImGui::TableGetSortSpecs();
|
||||||
bool hasSortSpec = sortSpecs != nullptr &&
|
bool hasSortSpec = sortSpecs != nullptr &&
|
||||||
sortSpecs->SpecsCount == 1 && // no multi-sort
|
// no multi-sort
|
||||||
// We can skip sorting if we just want uid ascending,
|
sortSpecs->SpecsCount == 1 &&
|
||||||
// since that's how we iterate over CObjectList
|
// We can skip sorting if we just want uid ascending,
|
||||||
|
// since that's how we iterate over CObjectList
|
||||||
(sortSpecs->Specs[0].ColumnUserID != 'id' ||
|
(sortSpecs->Specs[0].ColumnUserID != 'id' ||
|
||||||
sortSpecs->Specs[0].SortDirection != ImGuiSortDirection_Ascending);
|
sortSpecs->Specs[0].SortDirection != ImGuiSortDirection_Ascending);
|
||||||
std::string_view search{m_inspectFilterText.data(), strlen(m_inspectFilterText.data())};
|
std::string_view search{m_inspectFilterText.data(), strlen(m_inspectFilterText.data())};
|
||||||
|
@ -736,7 +737,7 @@ int roundMultiple(int value, int multiple) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
return static_cast<int>(std::round(static_cast<double>(value) / static_cast<double>(multiple)) *
|
return static_cast<int>(std::round(static_cast<double>(value) / static_cast<double>(multiple)) *
|
||||||
static_cast<double>(multiple));
|
static_cast<double>(multiple));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RenderItemType(CPlayerState& pState, CPlayerState::EItemType itemType) {
|
static void RenderItemType(CPlayerState& pState, CPlayerState::EItemType itemType) {
|
||||||
|
|
|
@ -166,12 +166,13 @@
|
||||||
__VA_ARGS__ \
|
__VA_ARGS__ \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BITFIELD_CHECKBOX(label, bf) \
|
#define BITFIELD_CHECKBOX(label, bf, ...) \
|
||||||
{ \
|
{ \
|
||||||
bool b = (bf); \
|
bool b = (bf); \
|
||||||
ImGui::Checkbox(label, &b); \
|
if (ImGui::Checkbox(label, &b)) { \
|
||||||
if (b != (bf)) \
|
|
||||||
(bf) = b; \
|
(bf) = b; \
|
||||||
|
__VA_ARGS__ \
|
||||||
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ImGuiVector3fInput(const char* label, zeus::CVector3f& vec) {
|
static bool ImGuiVector3fInput(const char* label, zeus::CVector3f& vec) {
|
||||||
|
@ -209,6 +210,37 @@ static constexpr bool ImGuiEnumInput(const char* label, E& val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace metaforce {
|
namespace metaforce {
|
||||||
|
void CDamageVulnerability::ImGuiEditWindow(const char* title, bool& open) {
|
||||||
|
if (!open) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ImGui::Begin(title, &open, ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||||
|
ImGuiEnumInput("Deflected", x5c_deflected);
|
||||||
|
if (ImGui::CollapsingHeader("Normal")) {
|
||||||
|
constexpr std::array<const char*, std::tuple_size_v<typeof x0_normal>> names{
|
||||||
|
"Power", "Ice", "Wave", "Plasma", "Bomb", "Power Bomb", "Missile", "Boost Ball",
|
||||||
|
"Phazon", "AI", "Poison Water", "Lava", "Heat", "(Unused)", "Orange Phazon"};
|
||||||
|
for (int i = 0; i < x0_normal.size(); ++i) {
|
||||||
|
ImGuiEnumInput(names[i], x0_normal[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ImGui::CollapsingHeader("Charged")) {
|
||||||
|
constexpr std::array<const char*, std::tuple_size_v<typeof x3c_charged>> names{"Power", "Ice", "Wave", "Plasma"};
|
||||||
|
for (int i = 0; i < x3c_charged.size(); ++i) {
|
||||||
|
ImGuiEnumInput(names[i], x3c_charged[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ImGui::CollapsingHeader("Combo")) {
|
||||||
|
constexpr std::array<const char*, std::tuple_size_v<typeof x4c_combo>> names{"Super Missile", "Ice Spreader",
|
||||||
|
"Wavebuster", "Flamethrower"};
|
||||||
|
for (int i = 0; i < x4c_combo.size(); ++i) {
|
||||||
|
ImGuiEnumInput(names[i], x4c_combo[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
std::string_view CEntity::ImGuiType() { return "Entity"; }
|
std::string_view CEntity::ImGuiType() { return "Entity"; }
|
||||||
|
|
||||||
void CEntity::ImGuiInspect() {
|
void CEntity::ImGuiInspect() {
|
||||||
|
@ -306,11 +338,12 @@ void CEntity::ImGuiInspect() {
|
||||||
ImGui::Checkbox("Highlight", &m_debugSelected);
|
ImGui::Checkbox("Highlight", &m_debugSelected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct EulerAngles {
|
struct EulerAngles {
|
||||||
float roll, pitch, yaw;
|
float roll, pitch, yaw;
|
||||||
};
|
};
|
||||||
|
|
||||||
EulerAngles ToEulerAngles(const zeus::CQuaternion& q) {
|
static EulerAngles ToEulerAngles(const zeus::CQuaternion& q) {
|
||||||
EulerAngles angles;
|
EulerAngles angles;
|
||||||
|
|
||||||
// roll (x-axis rotation)
|
// roll (x-axis rotation)
|
||||||
|
@ -348,6 +381,12 @@ IMGUI_ENTITY_INSPECT(CActor, CEntity, Actor, {
|
||||||
x34_transform.setRotation(zeus::CQuaternion(rotation * zeus::skDegToRadVec).toTransform().buildMatrix3f());
|
x34_transform.setRotation(zeus::CQuaternion(rotation * zeus::skDegToRadVec).toTransform().buildMatrix3f());
|
||||||
SetTransform(x34_transform);
|
SetTransform(x34_transform);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
int thermalVisorFlags = xe6_27_thermalVisorFlags;
|
||||||
|
if (ImGui::Combo("Thermal Visor Flags", &thermalVisorFlags, "None\0Cold\0Hot", 3)) {
|
||||||
|
xe6_27_thermalVisorFlags = u8(thermalVisorFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
IMGUI_ENTITY_INSPECT(MP1::CFireFlea::CDeathCameraEffect, CEntity, FireFleaDeathCameraEffect, {})
|
IMGUI_ENTITY_INSPECT(MP1::CFireFlea::CDeathCameraEffect, CEntity, FireFleaDeathCameraEffect, {})
|
||||||
IMGUI_ENTITY_INSPECT(MP1::CMetroidPrimeRelay, CEntity, MetroidPrimeRelay, {})
|
IMGUI_ENTITY_INSPECT(MP1::CMetroidPrimeRelay, CEntity, MetroidPrimeRelay, {})
|
||||||
|
@ -493,12 +532,14 @@ IMGUI_ENTITY_INSPECT(CScriptEffect, CActor, ScriptEffect, {
|
||||||
ImGui::DragFloat("Remaining Time", &x12c_remTime, 0.1f);
|
ImGui::DragFloat("Remaining Time", &x12c_remTime, 0.1f);
|
||||||
ImGui::DragFloat("Duration", &x130_duration, 0.1f);
|
ImGui::DragFloat("Duration", &x130_duration, 0.1f);
|
||||||
ImGui::DragFloat("Duration Reset While Visible", &x134_durationResetWhileVisible, 0.1f);
|
ImGui::DragFloat("Duration Reset While Visible", &x134_durationResetWhileVisible, 0.1f);
|
||||||
ImGui::Text("Trigger ID: 0x%04X", x13c_triggerId.Value());
|
|
||||||
if (x13c_triggerId != kInvalidUniqueId) {
|
if (x13c_triggerId != kInvalidUniqueId) {
|
||||||
|
ImGui::Text("Trigger ID: 0x%04X", x13c_triggerId.Value());
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::SmallButton("View")) {
|
if (ImGui::SmallButton("View")) {
|
||||||
ImGuiConsole::inspectingEntities.insert(x13c_triggerId);
|
ImGuiConsole::inspectingEntities.insert(x13c_triggerId);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
ImGui::TextUnformatted("Trigger ID: [none]");
|
||||||
}
|
}
|
||||||
ImGui::DragFloat("Destroy Delay Timer", &x140_destroyDelayTimer, 0.1f);
|
ImGui::DragFloat("Destroy Delay Timer", &x140_destroyDelayTimer, 0.1f);
|
||||||
})
|
})
|
||||||
|
@ -570,7 +611,36 @@ IMGUI_ENTITY_INSPECT(CCollisionActor, CPhysicsActor, CollisionActor, {})
|
||||||
IMGUI_ENTITY_INSPECT(MP1::CGrenadeLauncher, CPhysicsActor, GrenadeLauncher, {})
|
IMGUI_ENTITY_INSPECT(MP1::CGrenadeLauncher, CPhysicsActor, GrenadeLauncher, {})
|
||||||
IMGUI_ENTITY_INSPECT(MP1::CMetroidPrimeExo::CPhysicsDummy, CPhysicsActor, MetroidPrimeExoPhysicsDummy, {})
|
IMGUI_ENTITY_INSPECT(MP1::CMetroidPrimeExo::CPhysicsDummy, CPhysicsActor, MetroidPrimeExoPhysicsDummy, {})
|
||||||
IMGUI_ENTITY_INSPECT(CPlayer, CPhysicsActor, Player, {})
|
IMGUI_ENTITY_INSPECT(CPlayer, CPhysicsActor, Player, {})
|
||||||
IMGUI_ENTITY_INSPECT(CScriptActor, CPhysicsActor, ScriptActor, {})
|
IMGUI_ENTITY_INSPECT(CScriptActor, CPhysicsActor, ScriptActor, {
|
||||||
|
if (ImGui::Button("Edit Damage Vulnerability")) {
|
||||||
|
m_editingDamageVulnerability = true;
|
||||||
|
}
|
||||||
|
x268_damageVulnerability.ImGuiEditWindow("Damage Vulnerability - Script Actor", m_editingDamageVulnerability);
|
||||||
|
|
||||||
|
bool modelFlagsChanged = false;
|
||||||
|
ImGui::DragFloat("Fade In Time", &x2d0_fadeInTime, 0.1f);
|
||||||
|
ImGui::DragFloat("Fade Out Time", &x2d4_fadeOutTime, 0.1f);
|
||||||
|
ImGui::SliderFloat("X-Ray Alpha", &x2dc_xrayAlpha, 0.0f, 1.f);
|
||||||
|
ImGui::SameLine();
|
||||||
|
BITFIELD_CHECKBOX("Enabled", x2e2_27_xrayAlphaEnabled, { modelFlagsChanged = true; });
|
||||||
|
BITFIELD_CHECKBOX("Disable Thermal Hot Z-test", x2e2_24_noThermalHotZ, { modelFlagsChanged = true; });
|
||||||
|
BITFIELD_CHECKBOX("Dead", x2e2_25_dead); // onclick -> EScriptObjectMessage::Reset?
|
||||||
|
BITFIELD_CHECKBOX("Animating", x2e2_26_animating);
|
||||||
|
BITFIELD_CHECKBOX("Scale Advancement Delta", x2e2_30_scaleAdvancementDelta);
|
||||||
|
BITFIELD_CHECKBOX("Material Flag 54", x2e2_31_materialFlag54);
|
||||||
|
BITFIELD_CHECKBOX("Is Player Actor", x2e3_24_isPlayerActor);
|
||||||
|
if (x2e0_triggerId != kInvalidUniqueId) {
|
||||||
|
ImGui::Text("Trigger ID: 0x%04X", x2e0_triggerId.Value());
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton("View")) {
|
||||||
|
ImGuiConsole::inspectingEntities.insert(x2e0_triggerId);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ImGui::TextUnformatted("Trigger ID: [none]");
|
||||||
|
}
|
||||||
|
x2e2_29_processModelFlags =
|
||||||
|
modelFlagsChanged || x2e2_27_xrayAlphaEnabled || x2e2_24_noThermalHotZ || x2d8_shaderIdx != 0;
|
||||||
|
})
|
||||||
IMGUI_ENTITY_INSPECT(CScriptDebris, CPhysicsActor, ScriptDebris, {})
|
IMGUI_ENTITY_INSPECT(CScriptDebris, CPhysicsActor, ScriptDebris, {})
|
||||||
IMGUI_ENTITY_INSPECT(CScriptDock, CPhysicsActor, ScriptDock, {})
|
IMGUI_ENTITY_INSPECT(CScriptDock, CPhysicsActor, ScriptDock, {})
|
||||||
IMGUI_ENTITY_INSPECT(CScriptDoor, CPhysicsActor, ScriptDoor, {})
|
IMGUI_ENTITY_INSPECT(CScriptDoor, CPhysicsActor, ScriptDoor, {})
|
||||||
|
|
|
@ -61,5 +61,8 @@ public:
|
||||||
static const CDamageVulnerability& ImmuneVulnerabilty() { return sImmuneVulnerability; }
|
static const CDamageVulnerability& ImmuneVulnerabilty() { return sImmuneVulnerability; }
|
||||||
static const CDamageVulnerability& ReflectVulnerabilty() { return sReflectVulnerability; }
|
static const CDamageVulnerability& ReflectVulnerabilty() { return sReflectVulnerability; }
|
||||||
static const CDamageVulnerability& PassThroughVulnerabilty() { return sPassThroughVulnerability; }
|
static const CDamageVulnerability& PassThroughVulnerabilty() { return sPassThroughVulnerability; }
|
||||||
|
|
||||||
|
// Used in ImGuiEntitySupport
|
||||||
|
void ImGuiEditWindow(const char* title, bool& open);
|
||||||
};
|
};
|
||||||
} // namespace metaforce
|
} // namespace metaforce
|
||||||
|
|
|
@ -27,6 +27,10 @@ protected:
|
||||||
bool x2e2_31_materialFlag54 : 1;
|
bool x2e2_31_materialFlag54 : 1;
|
||||||
bool x2e3_24_isPlayerActor : 1 = false;
|
bool x2e3_24_isPlayerActor : 1 = false;
|
||||||
|
|
||||||
|
#if ENABLE_IMGUI
|
||||||
|
bool m_editingDamageVulnerability = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DEFINE_ENTITY
|
DEFINE_ENTITY
|
||||||
CScriptActor(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
|
CScriptActor(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
|
||||||
|
|
Loading…
Reference in New Issue