2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-16 00:17:13 +00:00

CFlyingPirate: First draft almost done

This commit is contained in:
2020-03-13 04:11:17 -04:00
parent 11ea9d3aa6
commit 13d8c3fdd1
9 changed files with 1049 additions and 135 deletions

View File

@@ -29,9 +29,9 @@ public:
CAnimFormatUnion(CInputStream& in, IObjectStore& store);
~CAnimFormatUnion();
EAnimFormat GetFormat() const { return x0_format; }
const CAnimSource& GetAsCAnimSource() const { return *reinterpret_cast<const CAnimSource*>(x4_storage); }
const CFBStreamedCompression& GetAsCFBStreamedCompression() const {
return *reinterpret_cast<const CFBStreamedCompression*>(x4_storage);
CAnimSource& GetAsCAnimSource() { return *reinterpret_cast<CAnimSource*>(x4_storage); }
CFBStreamedCompression& GetAsCFBStreamedCompression() {
return *reinterpret_cast<CFBStreamedCompression*>(x4_storage);
}
};

View File

@@ -71,31 +71,35 @@ template <class T>
class TSubAnimTypeToken : public TLockedToken<CAllFormatsAnimSource> {};
template <>
class TSubAnimTypeToken<CAnimSource> : public TLockedToken<CAllFormatsAnimSource> {
class TSubAnimTypeToken<CAnimSource> : public TLockedToken<CAnimSource> {
public:
TSubAnimTypeToken<CAnimSource>(const TLockedToken<CAllFormatsAnimSource>& token)
: TLockedToken<CAllFormatsAnimSource>(token) {}
TSubAnimTypeToken<CAnimSource>(const TLockedToken<CAllFormatsAnimSource>& token) : TLockedToken<CAnimSource>(token) {}
const CAnimSource* GetObj() const {
const CAllFormatsAnimSource* source = TLockedToken<CAllFormatsAnimSource>::GetObj();
CAnimSource* GetObj() {
CAllFormatsAnimSource* source = reinterpret_cast<CAllFormatsAnimSource*>(TLockedToken<CAnimSource>::GetObj());
return &source->GetAsCAnimSource();
}
const CAnimSource* operator->() const { return GetObj(); }
const CAnimSource& operator*() const { return *GetObj(); }
const CAnimSource* GetObj() const {
return const_cast<TSubAnimTypeToken<CAnimSource>*>(this)->GetObj();
}
};
template <>
class TSubAnimTypeToken<CFBStreamedCompression> : public TLockedToken<CAllFormatsAnimSource> {
class TSubAnimTypeToken<CFBStreamedCompression> : public TLockedToken<CFBStreamedCompression> {
public:
TSubAnimTypeToken<CFBStreamedCompression>(const TLockedToken<CAllFormatsAnimSource>& token)
: TLockedToken<CAllFormatsAnimSource>(token) {}
: TLockedToken<CFBStreamedCompression>(token) {}
const CFBStreamedCompression* GetObj() const {
const CAllFormatsAnimSource* source = TLockedToken<CAllFormatsAnimSource>::GetObj();
CFBStreamedCompression* GetObj() {
CAllFormatsAnimSource* source =
reinterpret_cast<CAllFormatsAnimSource*>(TLockedToken<CFBStreamedCompression>::GetObj());
return &source->GetAsCFBStreamedCompression();
}
const CFBStreamedCompression* operator->() const { return GetObj(); }
const CFBStreamedCompression& operator*() const { return *GetObj(); }
const CFBStreamedCompression* GetObj() const {
return const_cast<TSubAnimTypeToken<CFBStreamedCompression>*>(this)->GetObj();
}
};
class IAnimReader {