From 9d81c0645f8e800d380a5352c5027824073f0d6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sun, 7 Feb 2021 16:28:31 +0100 Subject: [PATCH] ksys/evt: Fix float/bool handling --- src/KingSystem/Event/evtOrderParam.cpp | 42 ++++++++++++++------------ src/KingSystem/Event/evtOrderParam.h | 4 +-- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/KingSystem/Event/evtOrderParam.cpp b/src/KingSystem/Event/evtOrderParam.cpp index 6561a91e..30ff8211 100644 --- a/src/KingSystem/Event/evtOrderParam.cpp +++ b/src/KingSystem/Event/evtOrderParam.cpp @@ -38,25 +38,26 @@ bool OrderParam::initialize(s32 entry_count) { void OrderParam::uninitialize() { for (s32 i = 0; i < mEntries.size(); i++) { - auto* e = &mEntries[i]; - auto* name_ptr = e->name; - if (name_ptr) - delete (sead::FixedSafeString<0x20>*)name_ptr; - auto* ptr = e->data; + auto& entry = mEntries[i]; + if (entry.name) + delete (entry.name); + auto* ptr = entry.data; if (ptr) { - switch (e->type) { + switch (entry.type) { case OrderParamType::String: - delete (sead::FixedSafeString<0x40>*)ptr; + delete static_cast(ptr); break; case OrderParamType::Int: + delete static_cast(ptr); + break; case OrderParamType::Float: - delete (u32*)ptr; + delete static_cast(ptr); break; case OrderParamType::Bool: - delete (char*)ptr; + delete static_cast(ptr); break; case OrderParamType::Actor: - delete (ksys::act::BaseProcLink*)ptr; + delete static_cast(ptr); break; case OrderParamType::Array: mHeap->free(ptr); @@ -65,7 +66,7 @@ void OrderParam::uninitialize() { break; } } - clearEntry(e); + clearEntry(&entry); } mEntries.freeBuffer(); mEntryCount = 0; @@ -108,7 +109,7 @@ bool OrderParam::doAssign(OrderParam* other) { return false; break; case OrderParamType::Float: - if (!addParamInt2(*static_cast(other_ptr), *other_name)) + if (!addParamFloat(*static_cast(other_ptr), *other_name)) return false; break; case OrderParamType::String: @@ -116,7 +117,7 @@ bool OrderParam::doAssign(OrderParam* other) { return false; break; case OrderParamType::Bool: - if (!addParamByte(*static_cast(other_ptr), *other_name)) + if (!addParamBool(*static_cast(other_ptr), *other_name)) return false; break; case OrderParamType::Actor: @@ -149,8 +150,8 @@ bool OrderParam::addParamInt(s32 val, const sead::SafeString& name) { return true; } -bool OrderParam::addParamInt2(s32 val, const sead::SafeString& name) { - auto* entry_ptr = tryAllocParam(name, OrderParamType::Float); +bool OrderParam::addParamFloat(f32 val, const sead::SafeString& name) { + auto* entry_ptr = tryAllocParam(name, OrderParamType::Float); if (!entry_ptr) return false; *entry_ptr = val; @@ -166,8 +167,8 @@ bool OrderParam::addParamString(const sead::SafeString& val, const sead::SafeStr return true; } -bool OrderParam::addParamByte(char val, const sead::SafeString& name) { - auto* entry_ptr = tryAllocParam(name, OrderParamType::Bool); +bool OrderParam::addParamBool(bool val, const sead::SafeString& name) { + auto* entry_ptr = tryAllocParam(name, OrderParamType::Bool); if (!entry_ptr) return false; *entry_ptr = val; @@ -186,7 +187,7 @@ bool OrderParam::addParamActor(ksys::act::BaseProc* actor, sead::SafeString& nam } bool OrderParam::addParamArray(char* array, u32 size, sead::SafeString& name) { - auto* entry_ptr = tryAllocParam(name, OrderParamType::Array, size); + auto* entry_ptr = tryAllocParam(name, OrderParamType::Array, size); if (!entry_ptr) return false; std::memcpy(entry_ptr, array, size); @@ -233,10 +234,13 @@ OrderParamEntry* OrderParam::tryAlloc(OrderParamType type, u32 size, const sead: switch (type) { case OrderParamType::Int: - case OrderParamType::Float: entry->data = new (heap, std::nothrow_t()) s32(); entry->size = sizeof(s32); break; + case OrderParamType::Float: + entry->data = new (heap, std::nothrow_t()) f32(); + entry->size = sizeof(f32); + break; case OrderParamType::String: entry->data = new (heap, std::nothrow_t()) sead::FixedSafeString<0x40>; entry->size = sizeof(sead::FixedSafeString<0x40>); diff --git a/src/KingSystem/Event/evtOrderParam.h b/src/KingSystem/Event/evtOrderParam.h index cfacb699..7f3f8696 100644 --- a/src/KingSystem/Event/evtOrderParam.h +++ b/src/KingSystem/Event/evtOrderParam.h @@ -37,9 +37,9 @@ public: inline const OrderParamEntry* getParam(const s32 index) const; bool addParamInt(s32 val, const sead::SafeString& name); - bool addParamInt2(s32 val, const sead::SafeString& name); + bool addParamFloat(f32 val, const sead::SafeString& name); bool addParamString(const sead::SafeString& val, const sead::SafeString& name); - bool addParamByte(char val, const sead::SafeString& name); + bool addParamBool(bool val, const sead::SafeString& name); bool addParamActor(ksys::act::BaseProc* actor, sead::SafeString& name); bool addParamArray(char* array, u32 size, sead::SafeString& name);