mirror of
https://github.com/GTAmodding/re3.git
synced 2025-10-13 01:00:33 +00:00
CVisibilityPlugins, CRenderer, some fixes
This commit is contained in:
parent
b77d93ba4a
commit
3f3e258d77
26 changed files with 657 additions and 293 deletions
58
src/modelinfo/MloModelInfo.cpp
Normal file
58
src/modelinfo/MloModelInfo.cpp
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include "common.h"
|
||||
|
||||
#include "VisibilityPlugins.h"
|
||||
#include "ModelInfo.h"
|
||||
|
||||
base::cRelocatableChunkClassInfo CMloModelInfo::msClassInfo("CMloModelInfo", VTABLE_ADDR(&msClassInstance), sizeof(msClassInstance));
|
||||
CMloModelInfo CMloModelInfo::msClassInstance;
|
||||
|
||||
void
|
||||
CMloModelInfo::ConstructClump()
|
||||
{
|
||||
/*
|
||||
m_clump = RpClumpCreate();
|
||||
RwFrame *mainFrame = RwFrameCreate();
|
||||
RwFrameSetIdentity(mainFrame);
|
||||
RpClumpSetFrame(m_clump, mainFrame);
|
||||
|
||||
for (int i = firstInstance; i < lastInstance; i++) {
|
||||
int modelId = CModelInfo::GetMloInstanceStore().store[i].m_modelIndex;
|
||||
RwMatrix *attMat = CModelInfo::GetMloInstanceStore().store[i].GetMatrix().m_attachment;
|
||||
CSimpleModelInfo *minfo = (CSimpleModelInfo*)CModelInfo::GetModelInfo(modelId);
|
||||
|
||||
if (minfo->m_atomics[0] != nil) {
|
||||
RpAtomic *newAtomic = RpAtomicClone(minfo->m_atomics[0]);
|
||||
RwFrame *newFrame = RwFrameCreate();
|
||||
if (newAtomic != nil && newFrame != nil) {
|
||||
*RwFrameGetMatrix(newFrame) = *attMat;
|
||||
RpAtomicSetFrame(newAtomic, newFrame);
|
||||
RwFrameAddChild(mainFrame, newFrame);
|
||||
RpClumpAddAtomic(m_clump, newAtomic);
|
||||
} else {
|
||||
debug("Failed to allocate memory while creating template MLO.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (RpClumpGetNumAtomics(m_clump) != 0) {
|
||||
CVisibilityPlugins::SetClumpModelInfo(m_clump, this);
|
||||
} else {
|
||||
RpClumpDestroy(m_clump);
|
||||
m_clump = nil;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void
|
||||
CMloModelInfo::RcWriteThis(base::cRelocatableChunkWriter &writer)
|
||||
{
|
||||
writer.AllocateRaw(this, sizeof(*this), sizeof(void*), false, true);
|
||||
writer.Class(VTABLE_ADDR(this), msClassInfo);
|
||||
}
|
||||
|
||||
void
|
||||
CMloModelInfo::RcWriteEmpty(base::cRelocatableChunkWriter &writer)
|
||||
{
|
||||
writer.AllocateRaw(this, sizeof(*this), sizeof(void*), false, true);
|
||||
writer.Class(VTABLE_ADDR(this), msClassInfo);
|
||||
}
|
20
src/modelinfo/MloModelInfo.h
Normal file
20
src/modelinfo/MloModelInfo.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
|
||||
#include "ClumpModelInfo.h"
|
||||
|
||||
class CMloModelInfo : public CClumpModelInfo
|
||||
{
|
||||
public:
|
||||
float drawDist;
|
||||
int firstInstance;
|
||||
int lastInstance;
|
||||
public:
|
||||
CMloModelInfo(void) : CClumpModelInfo(MITYPE_MLO) {}
|
||||
void ConstructClump();
|
||||
|
||||
virtual void RcWriteThis(base::cRelocatableChunkWriter &writer);
|
||||
virtual void RcWriteEmpty(base::cRelocatableChunkWriter &writer);
|
||||
|
||||
static base::cRelocatableChunkClassInfo msClassInfo;
|
||||
static CMloModelInfo msClassInstance;
|
||||
};
|
|
@ -2,11 +2,13 @@
|
|||
|
||||
#include "2dEffect.h"
|
||||
#include "SimpleModelInfo.h"
|
||||
#include "MloModelInfo.h"
|
||||
#include "TimeModelInfo.h"
|
||||
#include "WeaponModelInfo.h"
|
||||
#include "ClumpModelInfo.h"
|
||||
#include "PedModelInfo.h"
|
||||
#include "VehicleModelInfo.h"
|
||||
#include "XtraCompsModelInfo.h"
|
||||
#include "templates.h"
|
||||
|
||||
class CModelInfo
|
||||
|
|
|
@ -206,8 +206,8 @@ CSimpleModelInfo::GetAtomicFromDistance(float dist)
|
|||
{
|
||||
int i;
|
||||
i = 0;
|
||||
// HACk until we figure out what's going on
|
||||
if(m_atomics == nil) return nil;
|
||||
if(m_atomics == nil)
|
||||
return nil;
|
||||
if(m_isDamaged)
|
||||
i = m_firstDamaged;
|
||||
for(; i < m_numAtomics; i++)
|
||||
|
@ -219,8 +219,8 @@ if(m_atomics == nil) return nil;
|
|||
RpAtomic*
|
||||
CSimpleModelInfo::GetFirstAtomicFromDistance(float dist)
|
||||
{
|
||||
// HACk until we figure out what's going on
|
||||
if(m_atomics == nil) return nil;
|
||||
if(m_atomics == nil)
|
||||
return nil;
|
||||
if(dist < m_lodDistances[0] * TheCamera.LODDistMultiplier)
|
||||
return m_atomics[0];
|
||||
return nil;
|
||||
|
|
21
src/modelinfo/XtraCompsModelInfo.cpp
Normal file
21
src/modelinfo/XtraCompsModelInfo.cpp
Normal file
|
@ -0,0 +1,21 @@
|
|||
#include "common.h"
|
||||
|
||||
#include "VisibilityPlugins.h"
|
||||
#include "ModelInfo.h"
|
||||
|
||||
base::cRelocatableChunkClassInfo CXtraCompsModelInfo::msClassInfo("CXtraCompsModelInfo", VTABLE_ADDR(&msClassInstance), sizeof(msClassInstance));
|
||||
CXtraCompsModelInfo CXtraCompsModelInfo::msClassInstance;
|
||||
|
||||
void
|
||||
CXtraCompsModelInfo::RcWriteThis(base::cRelocatableChunkWriter &writer)
|
||||
{
|
||||
writer.AllocateRaw(this, sizeof(*this), sizeof(void*), false, true);
|
||||
writer.Class(VTABLE_ADDR(this), msClassInfo);
|
||||
}
|
||||
|
||||
void
|
||||
CXtraCompsModelInfo::RcWriteEmpty(base::cRelocatableChunkWriter &writer)
|
||||
{
|
||||
writer.AllocateRaw(this, sizeof(*this), sizeof(void*), false, true);
|
||||
writer.Class(VTABLE_ADDR(this), msClassInfo);
|
||||
}
|
19
src/modelinfo/XtraCompsModelInfo.h
Normal file
19
src/modelinfo/XtraCompsModelInfo.h
Normal file
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include "ClumpModelInfo.h"
|
||||
|
||||
class CXtraCompsModelInfo : public CClumpModelInfo
|
||||
{
|
||||
int field_34;
|
||||
public:
|
||||
CXtraCompsModelInfo(void) : CClumpModelInfo(MITYPE_XTRACOMPS) { field_34 = 0; }
|
||||
void Shutdown(void) {};
|
||||
RwObject *CreateInstance(void) { return nil; }
|
||||
void SetClump(RpClump*) {};
|
||||
|
||||
virtual void RcWriteThis(base::cRelocatableChunkWriter &writer);
|
||||
virtual void RcWriteEmpty(base::cRelocatableChunkWriter &writer);
|
||||
|
||||
static base::cRelocatableChunkClassInfo msClassInfo;
|
||||
static CXtraCompsModelInfo msClassInstance;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue