2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 11:07:44 +00:00

Initial round of particle runtime implementations

This commit is contained in:
Jack Andersen
2016-02-04 15:27:03 -10:00
parent cf2464a02b
commit 7a35dac972
46 changed files with 885 additions and 146 deletions

View File

@@ -9,14 +9,14 @@ namespace Retro
class IObj
{
public:
virtual ~IObj() {}
virtual ~IObj() = default;
};
class TObjOwnerDerivedFromIObjUntyped : public IObj
{
protected:
IObj* m_objPtr;
TObjOwnerDerivedFromIObjUntyped(IObj* objPtr) : m_objPtr(objPtr) {}
void* m_objPtr;
TObjOwnerDerivedFromIObjUntyped(void* objPtr) : m_objPtr(objPtr) {}
};
template<class T>
@@ -26,23 +26,12 @@ class TObjOwnerDerivedFromIObj : public TObjOwnerDerivedFromIObjUntyped
public:
static std::unique_ptr<TObjOwnerDerivedFromIObj<T>> GetNewDerivedObject(std::unique_ptr<T>&& obj)
{
std::unique_ptr<T> movedObjPtr = std::move(obj);
return std::unique_ptr<TObjOwnerDerivedFromIObj<T>>
(new TObjOwnerDerivedFromIObj<T>(movedObjPtr.release()));
(new TObjOwnerDerivedFromIObj<T>(obj.release()));
}
~TObjOwnerDerivedFromIObj() {delete static_cast<T*>(m_objPtr);}
};
template<class T>
class TToken
{
public:
static std::unique_ptr<TObjOwnerDerivedFromIObj<T>> GetIObjObjectFor(std::unique_ptr<T>&& obj)
{
return TObjOwnerDerivedFromIObj<T>::GetNewDerivedObject(std::move(obj));
}
};
}
#endif // __RETRO_IOBJ_HPP__