ProjectileWeapon factory, CollisionResponse stub

This commit is contained in:
Phillip Stephens 2016-02-13 11:05:59 -08:00
parent b477a9a9f5
commit 07a6bad207
8 changed files with 235 additions and 2 deletions

View File

@ -0,0 +1,15 @@
#include "CCollisionResponseData.hpp"
namespace pshag
{
CCollisionResponseData::CCollisionResponseData(CInputStream& in, CSimplePool* resPool)
{
}
std::unique_ptr<IObj> FCollisionResponseDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms)
{
CSimplePool* sp = static_cast<CSimplePool*>(static_cast<TObjOwnerParam<IObjectStore*>*>(vparms.GetObj())->GetParam());
return TToken<CCollisionResponseData>::GetIObjObjectFor(std::unique_ptr<CCollisionResponseData>(new CCollisionResponseData(in, sp)));
}
}

View File

@ -0,0 +1,22 @@
#ifndef __PSHAG_CCOLLISIONRESPONSEDATA_HPP__
#define __PSHAG_CCOLLISIONRESPONSEDATA_HPP__
#include "RetroTypes.hpp"
#include "IObj.hpp"
#include "CToken.hpp"
#include "IOStreams.hpp"
namespace pshag
{
class CSimplePool;
class CCollisionResponseData
{
public:
CCollisionResponseData(CInputStream& in, CSimplePool* resPool);
};
std::unique_ptr<IObj> FCollisionResponseDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms);
}
#endif // __PSHAG_CCOLLISIONRESPONSEDATA_HPP__

View File

@ -20,6 +20,8 @@ add_library(RuntimeCommonParticle
CParticleElectricDataFactory.hpp CParticleElectricDataFactory.cpp CParticleElectricDataFactory.hpp CParticleElectricDataFactory.cpp
CParticleElectric.hpp CParticleElectric.cpp CParticleElectric.hpp CParticleElectric.cpp
CParticleGen.hpp CParticleGen.cpp CParticleGen.hpp CParticleGen.cpp
CProjectileWeaponDataFactory.hpp CProjectileWeaponDataFactory.cpp
CCollisionResponseData.hpp CCollisionResponseData.cpp
CDecalManager.hpp CDecalManager.cpp CDecalManager.hpp CDecalManager.cpp
CSpawnSystemKeyframeData.hpp CSpawnSystemKeyframeData.cpp CSpawnSystemKeyframeData.hpp CSpawnSystemKeyframeData.cpp
CWarp.hpp CWarp.cpp CWarp.hpp CWarp.cpp

View File

@ -51,6 +51,7 @@ class CParticleDataFactory
friend class CDecalDataFactory; friend class CDecalDataFactory;
friend class CParticleElectricDataFactory; friend class CParticleElectricDataFactory;
friend class CParticleSwooshDataFactory; friend class CParticleSwooshDataFactory;
friend class CProjectileWeaponDataFactory;
static SParticleModel GetModel(CInputStream& in, CSimplePool* resPool); static SParticleModel GetModel(CInputStream& in, CSimplePool* resPool);
static SChildGeneratorDesc GetChildGeneratorDesc(TResId res, CSimplePool* resPool, const std::vector<TResId>& tracker); static SChildGeneratorDesc GetChildGeneratorDesc(TResId res, CSimplePool* resPool, const std::vector<TResId>& tracker);

View File

@ -122,7 +122,7 @@ bool CParticleSwooshDataFactory::CreateWPSM(CSwooshDescription* desc, CInputStre
default: default:
{ {
uint32_t clsName = clsId.toUint32(); uint32_t clsName = clsId.toUint32();
Log.report(LogVisor::FatalError, "Unknown SSWH class %.4s @%" PRIi64, &clsName, in.position()); Log.report(LogVisor::FatalError, "Unknown SWSH class %.4s @%" PRIi64, &clsName, in.position());
return false; return false;
} }
} }

View File

@ -0,0 +1,161 @@
#include "CProjectileWeaponDataFactory.hpp"
#include "CWeaponDescription.hpp"
#include "CCollisionResponseData.hpp"
#include "CRandom16.hpp"
#include "CSimplePool.hpp"
namespace pshag
{
static LogVisor::LogModule Log("Retro::CProjectileWeaponDataFactory");
using CPF = CParticleDataFactory;
CWeaponDescription*CProjectileWeaponDataFactory::GetGeneratorDesc(CInputStream& in, CSimplePool* resPool)
{
return CreateGeneratorDescription(in, resPool);
}
CWeaponDescription* CProjectileWeaponDataFactory::CreateGeneratorDescription(CInputStream& in, CSimplePool* resPool)
{
FourCC clsId = CPF::GetClassID(in);
if (clsId == FOURCC('WPSM'))
{
CWeaponDescription* desc = new CWeaponDescription;
CreateWPSM(desc, in, resPool);
}
return nullptr;
}
bool CProjectileWeaponDataFactory::CreateWPSM(CWeaponDescription* desc, CInputStream& in, CSimplePool* resPool)
{
CRandom16 rand;
FourCC clsId = CPF::GetClassID(in);
while(clsId != SBIG('_END'))
{
switch(clsId)
{
case SBIG('IORN'):
desc->x0_IORN.reset(CPF::GetVectorElement(in));
break;
case SBIG('IVEC'):
desc->x4_IVEC.reset(CPF::GetVectorElement(in));
break;
case SBIG('PSVM'):
desc->xc_PSVM.reset(CPF::GetModVectorElement(in));
break;
case SBIG('VMD2'):
desc->x10_VMD2 = CPF::GetBool(in);
break;
case SBIG('PSLT'):
desc->x14_PSLT.reset(CPF::GetIntElement(in));
break;
case SBIG('PCSL'):
desc->x18_PCSL.reset(CPF::GetVectorElement(in));
break;
case SBIG('PCOL'):
desc->x1c_PCOL.reset(CPF::GetColorElement(in));
break;
case SBIG('POFS'):
desc->x20_POFS.reset(CPF::GetVectorElement(in));
break;
case SBIG('OFST'):
desc->x24_OFST.reset(CPF::GetVectorElement(in));
break;
case SBIG('APSO'):
desc->x28_APSO = CPF::GetBool(in);
break;
case SBIG('HOMG'):
desc->x29_HOMG = CPF::GetBool(in);
break;
case SBIG('AP11'):
desc->x2a_AP11 = CPF::GetBool(in);
break;
case SBIG('AP21'):
desc->x2c_AS11 = CPF::GetBool(in);
break;
case SBIG('AS12'):
desc->x2d_AS12 = CPF::GetBool(in);
break;
case SBIG('AS13'):
desc->x2e_AS13 = CPF::GetBool(in);
break;
case SBIG('TRAT'):
desc->x30_TRAT.reset(CPF::GetRealElement(in));
break;
case SBIG('APSM'):
{
std::vector<TResId> tracker;
tracker.reserve(8);
desc->x34_APSM = CPF::GetChildGeneratorDesc(in, resPool, tracker);
break;
}
case SBIG('APS2'):
{
std::vector<TResId> tracker;
tracker.reserve(8);
desc->x44_APS2 = CPF::GetChildGeneratorDesc(in, resPool, tracker);
break;
}
case SBIG('ASW1'):
desc->x54_ASW1 = CPF::GetSwooshGeneratorDesc(in, resPool);
break;
case SBIG('ASW2'):
desc->x64_ASW2 = CPF::GetSwooshGeneratorDesc(in, resPool);
break;
case SBIG('ASW3'):
desc->x74_ASW3 = CPF::GetSwooshGeneratorDesc(in, resPool);
break;
case SBIG('OHEF'):
desc->x84_OHEF = CPF::GetModel(in, resPool);
break;
case SBIG('COLR'):
{
FourCC cid = CPF::GetClassID(in);
if (cid == SBIG('NONE'))
break;
TResId id = CPF::GetInt(in);
if (id)
desc->x94_COLR = {resPool->GetObj({FOURCC('CRSC'), id}), true};
break;
}
case SBIG('EWTR'):
desc->xa4_EWTR = CPF::GetBool(in);
break;
case SBIG('LWTR'):
desc->xa5_LWTR = CPF::GetBool(in);
break;
case SBIG('SWTR'):
desc->xa6_SWTR = CPF::GetBool(in);
break;
case SBIG('PJFX'):
{
FourCC cid = CPF::GetClassID(in);
if (cid != FOURCC('CNST'))
{
Log.report(LogVisor::FatalError, "PJFX element does not begin with CNST");
return false;
}
desc->xa8_PJFX = CPF::GetInt(in);
break;
}
default:
{
uint32_t clsName = clsId.toUint32();
Log.report(LogVisor::FatalError, "Unknown WPSM class %.4s @%" PRIi64, &clsName, in.position());
return false;
}
}
clsId = CPF::GetClassID(in);
}
return true;
}
std::unique_ptr<IObj> FProjectileWeaponDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms)
{
CSimplePool* sp = static_cast<CSimplePool*>(static_cast<TObjOwnerParam<IObjectStore*>*>(vparms.GetObj())->GetParam());
return TToken<CWeaponDescription>::GetIObjObjectFor(std::unique_ptr<CWeaponDescription>(CProjectileWeaponDataFactory::GetGeneratorDesc(in, sp)));
}
}

View File

@ -0,0 +1,24 @@
#ifndef __PSHAG_CPROJECTILEWEAPONDATAFACTORY_HPP__
#define __PSHAG_CPROJECTILEWEAPONDATAFACTORY_HPP__
#include "RetroTypes.hpp"
#include "IObj.hpp"
#include "CToken.hpp"
#include "IOStreams.hpp"
namespace pshag
{
class CWeaponDescription;
class CSimplePool;
class CProjectileWeaponDataFactory
{
static CWeaponDescription* CreateGeneratorDescription(CInputStream& in, CSimplePool* resPool);
static bool CreateWPSM(CWeaponDescription* desc, CInputStream& in, CSimplePool* resPool);
public:
static CWeaponDescription* GetGeneratorDesc(CInputStream& in, CSimplePool* resPool);
};
std::unique_ptr<IObj> FProjectileWeaponDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms);
}
#endif // __PSHAG_CPROJECTILEWEAPONDATAFACTORY_HPP__

View File

@ -10,6 +10,14 @@
namespace pshag namespace pshag
{ {
class CCollisionResponseData;
struct SCollisionResponseData
{
TToken<CCollisionResponseData> m_res;
bool m_found = false;
};
class CWeaponDescription class CWeaponDescription
{ {
public: public:
@ -37,7 +45,7 @@ public:
SSwooshGeneratorDesc x64_ASW2; SSwooshGeneratorDesc x64_ASW2;
SSwooshGeneratorDesc x74_ASW3; SSwooshGeneratorDesc x74_ASW3;
SParticleModel x84_OHEF; SParticleModel x84_OHEF;
//x94_COLR; SCollisionResponseData x94_COLR;
bool xa4_EWTR; bool xa4_EWTR;
bool xa5_LWTR; bool xa5_LWTR;
bool xa6_SWTR; bool xa6_SWTR;