mirror of
https://github.com/halpz/re3.git
synced 2024-12-27 18:25:28 +00:00
CWeaponModelInfo
This commit is contained in:
parent
e4683a3074
commit
e9fbd2ccfd
|
@ -145,7 +145,7 @@ AnimAssocDesc aStdAnimDescs[] = {
|
||||||
{ ANIM_DRIVEBY_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_DRIVEBY_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LB, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_CAR_LB, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DRIVE_BOAT, ASSOC_DELETEFADEDOUT },
|
{ ANIM_DRIVE_BOAT, ASSOC_DELETEFADEDOUT },
|
||||||
{ ANIM_CAR_GETOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_CAR_GETOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_CAR_GETOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
|
@ -906,6 +906,7 @@ CAnimManager::LoadAnimFile(RwStream *stream, bool compress, char (*somename)[32]
|
||||||
|
|
||||||
int animIndex = animBlock->firstIndex;
|
int animIndex = animBlock->firstIndex;
|
||||||
for(j = 0; j < animBlock->numAnims; j++){
|
for(j = 0; j < animBlock->numAnims; j++){
|
||||||
|
assert(animIndex < ARRAY_SIZE(ms_aAnimations));
|
||||||
CAnimBlendHierarchy *hier = &ms_aAnimations[animIndex++];
|
CAnimBlendHierarchy *hier = &ms_aAnimations[animIndex++];
|
||||||
|
|
||||||
// animation name
|
// animation name
|
||||||
|
|
|
@ -9,6 +9,7 @@ CBaseModelInfo *CModelInfo::ms_modelInfoPtrs[MODELINFOSIZE];
|
||||||
|
|
||||||
CStore<CSimpleModelInfo, SIMPLEMODELSIZE> CModelInfo::ms_simpleModelStore;
|
CStore<CSimpleModelInfo, SIMPLEMODELSIZE> CModelInfo::ms_simpleModelStore;
|
||||||
CStore<CTimeModelInfo, TIMEMODELSIZE> CModelInfo::ms_timeModelStore;
|
CStore<CTimeModelInfo, TIMEMODELSIZE> CModelInfo::ms_timeModelStore;
|
||||||
|
CStore<CWeaponModelInfo, WEAPONMODELSIZE> CModelInfo::ms_weaponModelStore;
|
||||||
CStore<CClumpModelInfo, CLUMPMODELSIZE> CModelInfo::ms_clumpModelStore;
|
CStore<CClumpModelInfo, CLUMPMODELSIZE> CModelInfo::ms_clumpModelStore;
|
||||||
CStore<CPedModelInfo, PEDMODELSIZE> CModelInfo::ms_pedModelStore;
|
CStore<CPedModelInfo, PEDMODELSIZE> CModelInfo::ms_pedModelStore;
|
||||||
CStore<CVehicleModelInfo, VEHICLEMODELSIZE> CModelInfo::ms_vehicleModelStore;
|
CStore<CVehicleModelInfo, VEHICLEMODELSIZE> CModelInfo::ms_vehicleModelStore;
|
||||||
|
@ -25,6 +26,7 @@ CModelInfo::Initialise(void)
|
||||||
ms_2dEffectStore.clear();
|
ms_2dEffectStore.clear();
|
||||||
ms_simpleModelStore.clear();
|
ms_simpleModelStore.clear();
|
||||||
ms_timeModelStore.clear();
|
ms_timeModelStore.clear();
|
||||||
|
ms_weaponModelStore.clear();
|
||||||
ms_clumpModelStore.clear();
|
ms_clumpModelStore.clear();
|
||||||
ms_pedModelStore.clear();
|
ms_pedModelStore.clear();
|
||||||
ms_vehicleModelStore.clear();
|
ms_vehicleModelStore.clear();
|
||||||
|
@ -86,6 +88,8 @@ CModelInfo::ShutDown(void)
|
||||||
ms_simpleModelStore.store[i].Shutdown();
|
ms_simpleModelStore.store[i].Shutdown();
|
||||||
for(i = 0; i < ms_timeModelStore.allocPtr; i++)
|
for(i = 0; i < ms_timeModelStore.allocPtr; i++)
|
||||||
ms_timeModelStore.store[i].Shutdown();
|
ms_timeModelStore.store[i].Shutdown();
|
||||||
|
for(i = 0; i < ms_weaponModelStore.allocPtr; i++)
|
||||||
|
ms_weaponModelStore.store[i].Shutdown();
|
||||||
for(i = 0; i < ms_clumpModelStore.allocPtr; i++)
|
for(i = 0; i < ms_clumpModelStore.allocPtr; i++)
|
||||||
ms_clumpModelStore.store[i].Shutdown();
|
ms_clumpModelStore.store[i].Shutdown();
|
||||||
for(i = 0; i < ms_vehicleModelStore.allocPtr; i++)
|
for(i = 0; i < ms_vehicleModelStore.allocPtr; i++)
|
||||||
|
@ -98,6 +102,7 @@ CModelInfo::ShutDown(void)
|
||||||
ms_2dEffectStore.clear();
|
ms_2dEffectStore.clear();
|
||||||
ms_simpleModelStore.clear();
|
ms_simpleModelStore.clear();
|
||||||
ms_timeModelStore.clear();
|
ms_timeModelStore.clear();
|
||||||
|
ms_weaponModelStore.clear();
|
||||||
ms_pedModelStore.clear();
|
ms_pedModelStore.clear();
|
||||||
ms_clumpModelStore.clear();
|
ms_clumpModelStore.clear();
|
||||||
ms_vehicleModelStore.clear();
|
ms_vehicleModelStore.clear();
|
||||||
|
@ -123,6 +128,16 @@ CModelInfo::AddTimeModel(int id)
|
||||||
return modelinfo;
|
return modelinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CWeaponModelInfo*
|
||||||
|
CModelInfo::AddWeaponModel(int id)
|
||||||
|
{
|
||||||
|
CWeaponModelInfo *modelinfo;
|
||||||
|
modelinfo = CModelInfo::ms_weaponModelStore.alloc();
|
||||||
|
CModelInfo::ms_modelInfoPtrs[id] = modelinfo;
|
||||||
|
modelinfo->Init();
|
||||||
|
return modelinfo;
|
||||||
|
}
|
||||||
|
|
||||||
CClumpModelInfo*
|
CClumpModelInfo*
|
||||||
CModelInfo::AddClumpModel(int id)
|
CModelInfo::AddClumpModel(int id)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "BaseModelInfo.h"
|
#include "BaseModelInfo.h"
|
||||||
#include "SimpleModelInfo.h"
|
#include "SimpleModelInfo.h"
|
||||||
#include "TimeModelInfo.h"
|
#include "TimeModelInfo.h"
|
||||||
|
#include "WeaponModelInfo.h"
|
||||||
#include "ClumpModelInfo.h"
|
#include "ClumpModelInfo.h"
|
||||||
#include "PedModelInfo.h"
|
#include "PedModelInfo.h"
|
||||||
#include "VehicleModelInfo.h"
|
#include "VehicleModelInfo.h"
|
||||||
|
@ -14,6 +15,7 @@ class CModelInfo
|
||||||
static CBaseModelInfo *ms_modelInfoPtrs[MODELINFOSIZE];
|
static CBaseModelInfo *ms_modelInfoPtrs[MODELINFOSIZE];
|
||||||
static CStore<CSimpleModelInfo, SIMPLEMODELSIZE> ms_simpleModelStore;
|
static CStore<CSimpleModelInfo, SIMPLEMODELSIZE> ms_simpleModelStore;
|
||||||
static CStore<CTimeModelInfo, TIMEMODELSIZE> ms_timeModelStore;
|
static CStore<CTimeModelInfo, TIMEMODELSIZE> ms_timeModelStore;
|
||||||
|
static CStore<CWeaponModelInfo, WEAPONMODELSIZE> ms_weaponModelStore;
|
||||||
static CStore<CClumpModelInfo, CLUMPMODELSIZE> ms_clumpModelStore;
|
static CStore<CClumpModelInfo, CLUMPMODELSIZE> ms_clumpModelStore;
|
||||||
static CStore<CPedModelInfo, PEDMODELSIZE> ms_pedModelStore;
|
static CStore<CPedModelInfo, PEDMODELSIZE> ms_pedModelStore;
|
||||||
static CStore<CVehicleModelInfo, VEHICLEMODELSIZE> ms_vehicleModelStore;
|
static CStore<CVehicleModelInfo, VEHICLEMODELSIZE> ms_vehicleModelStore;
|
||||||
|
@ -25,6 +27,7 @@ public:
|
||||||
|
|
||||||
static CSimpleModelInfo *AddSimpleModel(int id);
|
static CSimpleModelInfo *AddSimpleModel(int id);
|
||||||
static CTimeModelInfo *AddTimeModel(int id);
|
static CTimeModelInfo *AddTimeModel(int id);
|
||||||
|
static CWeaponModelInfo *AddWeaponModel(int id);
|
||||||
static CClumpModelInfo *AddClumpModel(int id);
|
static CClumpModelInfo *AddClumpModel(int id);
|
||||||
static CPedModelInfo *AddPedModel(int id);
|
static CPedModelInfo *AddPedModel(int id);
|
||||||
static CVehicleModelInfo *AddVehicleModel(int id);
|
static CVehicleModelInfo *AddVehicleModel(int id);
|
||||||
|
|
53
src/modelinfo/WeaponModelInfo.cpp
Normal file
53
src/modelinfo/WeaponModelInfo.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include "ModelInfo.h"
|
||||||
|
#include "AnimManager.h"
|
||||||
|
#include "VisibilityPlugins.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
CWeaponModelInfo::SetAnimFile(const char *file)
|
||||||
|
{
|
||||||
|
if(strcasecmp(file, "null") == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_animFileName = new char[strlen(file)+1];
|
||||||
|
strcpy(m_animFileName, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CWeaponModelInfo::ConvertAnimFileIndex(void)
|
||||||
|
{
|
||||||
|
if(m_animFileIndex != -1){
|
||||||
|
// we have a string pointer in that union
|
||||||
|
int32 index = CAnimManager::GetAnimationBlockIndex(m_animFileName);
|
||||||
|
delete[] m_animFileName;
|
||||||
|
m_animFileIndex = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CWeaponModelInfo::Init(void)
|
||||||
|
{
|
||||||
|
CSimpleModelInfo::Init();
|
||||||
|
SetWeaponInfo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CWeaponModelInfo::SetWeaponInfo(int32 weaponId)
|
||||||
|
{
|
||||||
|
m_atomics[2] = (RpAtomic*)weaponId;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32
|
||||||
|
CWeaponModelInfo::GetWeaponInfo(void)
|
||||||
|
{
|
||||||
|
return (int32)(uintptr)m_atomics[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CWeaponModelInfo::SetAtomic(int n, RpAtomic *atomic)
|
||||||
|
{
|
||||||
|
CSimpleModelInfo::SetAtomic(n, atomic);
|
||||||
|
CVisibilityPlugins::SetAtomicRenderCallback(atomic, CVisibilityPlugins::RenderWeaponCB);
|
||||||
|
}
|
||||||
|
|
22
src/modelinfo/WeaponModelInfo.h
Normal file
22
src/modelinfo/WeaponModelInfo.h
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "SimpleModelInfo.h"
|
||||||
|
|
||||||
|
class CWeaponModelInfo : public CSimpleModelInfo
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
int32 m_animFileIndex;
|
||||||
|
char *m_animFileName;
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
CWeaponModelInfo(void) : CSimpleModelInfo(MITYPE_WEAPON) { m_animFileIndex = -1; }
|
||||||
|
|
||||||
|
virtual void SetAnimFile(const char *file);
|
||||||
|
virtual void ConvertAnimFileIndex(void);
|
||||||
|
virtual int GetAnimFileIndex(void) { return m_animFileIndex; }
|
||||||
|
|
||||||
|
void Init(void);
|
||||||
|
void SetWeaponInfo(int32 weaponId);
|
||||||
|
int32 GetWeaponInfo(void);
|
||||||
|
void SetAtomic(int n, RpAtomic *atomic);
|
||||||
|
};
|
|
@ -218,6 +218,25 @@ CVisibilityPlugins::RenderAlphaAtomic(RpAtomic *atomic, int alpha)
|
||||||
return atomic;
|
return atomic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--MIAMI: done
|
||||||
|
RpAtomic*
|
||||||
|
CVisibilityPlugins::RenderWeaponCB(RpAtomic *atomic)
|
||||||
|
{
|
||||||
|
RwMatrix *m;
|
||||||
|
RwV3d view;
|
||||||
|
float maxdist, distsq;
|
||||||
|
CSimpleModelInfo *mi;
|
||||||
|
|
||||||
|
mi = GetAtomicModelInfo(atomic);
|
||||||
|
m = RwFrameGetLTM(RpAtomicGetFrame(atomic));
|
||||||
|
RwV3dSub(&view, RwMatrixGetPos(m), ms_pCameraPosn);
|
||||||
|
maxdist = mi->GetLodDistance(0);
|
||||||
|
distsq = RwV3dDotProduct(&view, &view);
|
||||||
|
if(distsq < maxdist*maxdist)
|
||||||
|
AtomicDefaultRenderCallBack(atomic);
|
||||||
|
return atomic;
|
||||||
|
}
|
||||||
|
|
||||||
RpAtomic*
|
RpAtomic*
|
||||||
CVisibilityPlugins::RenderFadingAtomic(RpAtomic *atomic, float camdist)
|
CVisibilityPlugins::RenderFadingAtomic(RpAtomic *atomic, float camdist)
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
static RpAtomic *RenderWheelAtomicCB(RpAtomic *atomic);
|
static RpAtomic *RenderWheelAtomicCB(RpAtomic *atomic);
|
||||||
static RpAtomic *RenderObjNormalAtomic(RpAtomic *atomic);
|
static RpAtomic *RenderObjNormalAtomic(RpAtomic *atomic);
|
||||||
static RpAtomic *RenderAlphaAtomic(RpAtomic *atomic, int alpha);
|
static RpAtomic *RenderAlphaAtomic(RpAtomic *atomic, int alpha);
|
||||||
|
static RpAtomic *RenderWeaponCB(RpAtomic *atomic);
|
||||||
static RpAtomic *RenderFadingAtomic(RpAtomic *atm, float dist);
|
static RpAtomic *RenderFadingAtomic(RpAtomic *atm, float dist);
|
||||||
|
|
||||||
static RpAtomic *RenderVehicleHiDetailCB(RpAtomic *atomic);
|
static RpAtomic *RenderVehicleHiDetailCB(RpAtomic *atomic);
|
||||||
|
|
Loading…
Reference in a new issue