diff options
author | eray orçunus <erayorcunus@gmail.com> | 2019-08-17 22:03:57 +0300 |
---|---|---|
committer | eray orçunus <erayorcunus@gmail.com> | 2019-08-17 22:21:10 +0300 |
commit | 39223901bf459e0548605f64ae030e89fedb9949 (patch) | |
tree | ccd55f366d0b2a42b6746bf89017cb05139570e9 /src/modelinfo/PedModelInfo.cpp | |
parent | 41e8caeb6e2e4ae3e60aaf69e7c7d62a7aaeeeea (diff) |
AnimViewer messages, Particle fix, Peds
Diffstat (limited to 'src/modelinfo/PedModelInfo.cpp')
-rw-r--r-- | src/modelinfo/PedModelInfo.cpp | 39 |
1 files changed, 39 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 { |