diff options
author | eray orçunus <erayorcunus@gmail.com> | 2019-08-17 21:03:57 +0200 |
---|---|---|
committer | eray orçunus <erayorcunus@gmail.com> | 2019-08-17 21:21:10 +0200 |
commit | 39223901bf459e0548605f64ae030e89fedb9949 (patch) | |
tree | ccd55f366d0b2a42b6746bf89017cb05139570e9 /src/modelinfo | |
parent | Merge pull request #193 from erorcun/erorcun (diff) | |
download | re3-39223901bf459e0548605f64ae030e89fedb9949.tar re3-39223901bf459e0548605f64ae030e89fedb9949.tar.gz re3-39223901bf459e0548605f64ae030e89fedb9949.tar.bz2 re3-39223901bf459e0548605f64ae030e89fedb9949.tar.lz re3-39223901bf459e0548605f64ae030e89fedb9949.tar.xz re3-39223901bf459e0548605f64ae030e89fedb9949.tar.zst re3-39223901bf459e0548605f64ae030e89fedb9949.zip |
Diffstat (limited to 'src/modelinfo')
-rw-r--r-- | src/modelinfo/PedModelInfo.cpp | 39 | ||||
-rw-r--r-- | src/modelinfo/PedModelInfo.h | 1 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/modelinfo/PedModelInfo.cpp b/src/modelinfo/PedModelInfo.cpp index c5242ef6..afe177c2 100644 --- a/src/modelinfo/PedModelInfo.cpp +++ b/src/modelinfo/PedModelInfo.cpp @@ -189,6 +189,45 @@ CPedModelInfo::CreateHitColModel(void) m_hitColModel = colmodel; } +CColModel* +CPedModelInfo::AnimatePedColModel(CColModel* colmodel, RwFrame* frame) +{ + RwObjectNameAssociation nameAssoc; + RwObjectIdAssociation idAssoc; + RwMatrix* mat = RwMatrixCreate(); + CColSphere* spheres = colmodel->spheres; + + for (int i = 0; i < NUMPEDINFONODES; i++) { + RwFrame* f = nil; + if (m_pColNodeInfos[i].name) { + nameAssoc.name = m_pColNodeInfos[i].name; + nameAssoc.frame = nil; + RwFrameForAllChildren(frame, FindFrameFromNameCB, &nameAssoc); + f = nameAssoc.frame; + } + else { + idAssoc.id = m_pColNodeInfos[i].pedNode; + idAssoc.frame = nil; + RwFrameForAllChildren(frame, FindFrameFromIdCB, &idAssoc); + f = idAssoc.frame; + } + if (f) { + RwMatrixCopy(mat, RwFrameGetMatrix(f)); + + for (f = RwFrameGetParent(f); f; f = RwFrameGetParent(f)) { + RwMatrixTransform(mat, &f->modelling, rwCOMBINEPOSTCONCAT); + if (RwFrameGetParent(f) == frame) + break; + } + + spheres[i].center.x = mat->pos.x + m_pColNodeInfos[i].x; + spheres[i].center.y = mat->pos.y + 0.0f; + spheres[i].center.z = mat->pos.z + m_pColNodeInfos[i].z; + } + } + + return colmodel; +} class CPedModelInfo_ : public CPedModelInfo { diff --git a/src/modelinfo/PedModelInfo.h b/src/modelinfo/PedModelInfo.h index 483d13f8..a2d58d6e 100644 --- a/src/modelinfo/PedModelInfo.h +++ b/src/modelinfo/PedModelInfo.h @@ -39,5 +39,6 @@ public: void SetLowDetailClump(RpClump*); void CreateHitColModel(void); CColModel *GetHitColModel(void) { return m_hitColModel; } + static CColModel *AnimatePedColModel(CColModel* colmodel, RwFrame* frame); }; static_assert(sizeof(CPedModelInfo) == 0x54, "CPedModelInfo: error"); |