mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-06 18:27:26 +00:00
GRIM: No need to make a copy of the nodes hierarchy.
This commit is contained in:
parent
e6ccad7657
commit
4c030baf74
@ -161,7 +161,7 @@ public:
|
||||
|
||||
protected:
|
||||
Common::String _filename;
|
||||
ObjectPtr<Model> _obj;
|
||||
Model *_obj;
|
||||
ModelNode *_hier;
|
||||
Math::Matrix4 _matrix;
|
||||
AnimManager *_animation;
|
||||
@ -376,11 +376,11 @@ void ModelComponent::init() {
|
||||
if (_parent) {
|
||||
MeshComponent *mc = static_cast<MeshComponent *>(_parent);
|
||||
_obj = g_resourceloader->loadModel(_filename, cm, mc->getModel());
|
||||
_hier = _obj->copyHierarchy();
|
||||
_hier = _obj->getHierarchy();
|
||||
mc->getNode()->addChild(_hier);
|
||||
} else {
|
||||
_obj = g_resourceloader->loadModel(_filename, cm);
|
||||
_hier = _obj->copyHierarchy();
|
||||
_hier = _obj->getHierarchy();
|
||||
Debug::warning(Debug::Costumes, "Parent of model %s wasn't a mesh", _filename.c_str());
|
||||
}
|
||||
|
||||
@ -440,7 +440,7 @@ ModelComponent::~ModelComponent() {
|
||||
_hier->_parent->removeChild(_hier);
|
||||
}
|
||||
|
||||
delete[] _hier;
|
||||
delete _obj;
|
||||
}
|
||||
|
||||
void ModelComponent::translateObject(ModelNode *node, bool reset) {
|
||||
@ -543,10 +543,10 @@ void MainModelComponent::reset() {
|
||||
|
||||
MainModelComponent::~MainModelComponent() {
|
||||
if (_hierShared)
|
||||
_hier = NULL; // Keep ~ModelComp from deleting it
|
||||
_obj = NULL; // Keep ~ModelComp from deleting it
|
||||
|
||||
for (Common::List<MainModelComponent*>::iterator i = _children.begin(); i != _children.end(); ++i) {
|
||||
(*i)->_hier = NULL;
|
||||
(*i)->_obj = NULL;
|
||||
(*i)->_parentModel = NULL;
|
||||
}
|
||||
|
||||
|
@ -250,19 +250,8 @@ void Model::draw() const {
|
||||
_rootHierNode->draw();
|
||||
}
|
||||
|
||||
ModelNode *Model::copyHierarchy() {
|
||||
ModelNode *result = new ModelNode[_numHierNodes];
|
||||
memcpy(result, _rootHierNode, _numHierNodes * sizeof(ModelNode));
|
||||
// Now adjust pointers
|
||||
for (int i = 0; i < _numHierNodes; i++) {
|
||||
if (result[i]._parent)
|
||||
result[i]._parent = &result[(_rootHierNode[i]._parent - _rootHierNode)];
|
||||
if (result[i]._child)
|
||||
result[i]._child = &result[(_rootHierNode[i]._child - _rootHierNode)];
|
||||
if (result[i]._sibling)
|
||||
result[i]._sibling = &result[(_rootHierNode[i]._sibling - _rootHierNode)];
|
||||
}
|
||||
return result;
|
||||
ModelNode *Model::getHierarchy() const {
|
||||
return _rootHierNode;
|
||||
}
|
||||
|
||||
void Model::reload(CMap *cmap) {
|
||||
|
@ -62,7 +62,7 @@ public:
|
||||
Common::String _fname;
|
||||
ObjectPtr<CMap> _cmap;
|
||||
|
||||
ModelNode *copyHierarchy();
|
||||
ModelNode *getHierarchy() const;
|
||||
int getNumNodes() const { return _numHierNodes; }
|
||||
|
||||
//private:
|
||||
|
Loading…
x
Reference in New Issue
Block a user