mirror of
				https://github.com/halpz/re3.git
				synced 2025-11-04 02:05:05 +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