void SpriteComponent::init() { const char *comma = strchr(_name.c_str(), ','); Common::String name(_name.c_str(), comma); if (_sprite) { if (_parent) { MeshComponent *mc = static_cast<MeshComponent *>(_parent); mc->getNode()->removeSprite(_sprite); } delete _sprite; _sprite = NULL; } if (comma) { int width, height, x, y, z; sscanf(comma, ",%d,%d,%d,%d,%d", &width, &height, &x, &y, &z); _sprite = new Sprite; _sprite->_material = g_resourceloader->loadMaterial(name, getCMap()); _sprite->_width = (float)width / 100.0f; _sprite->_height = (float)height / 100.0f; _sprite->_pos.set((float)x / 100.0f, (float)y / 100.0f, (float)z / 100.0f); _sprite->_visible = false; _sprite->_next = NULL; if (_parent) { if (_parent->isComponentType('M','E','S','H')) { MeshComponent *mc = static_cast<MeshComponent *>(_parent); mc->getNode()->addSprite(_sprite); } else Debug::warning(Debug::Costumes, "Parent of sprite %s wasn't a mesh", _name.c_str()); } } }
SpriteComponent::~SpriteComponent() { if (_sprite) { if (_parent) { MeshComponent *mc = static_cast<MeshComponent *>(_parent); if (mc) { if (mc->getParent()->isComponentType('M','M','D','L') || mc->getParent()->isComponentType('M','O','D','L')) { ModelComponent *mdlc = static_cast<ModelComponent *>(mc->getParent()); if (mdlc->getHierarchy()) mc->getNode()->removeSprite(_sprite); } } } delete _sprite->_material; delete _sprite; } }
void ModelComponent::init() { if (_prevComp && _prevComp->isComponentType('M','M','D','L')) { _previousCmap = _prevComp->getCMap(); } // Skip loading if it was initialized // by the sharing MainModelComponent // constructor before if (!_obj) { CMapPtr cm = getCMap(); // Get the default colormap if we haven't found // a valid colormap if (!cm && g_grim->getCurrSet()) cm = g_grim->getCurrSet()->getCMap(); if (!cm) { Debug::warning(Debug::Costumes, "No colormap specified for %s, using %s", _name.c_str(), DEFAULT_COLORMAP); cm = g_resourceloader->getColormap(DEFAULT_COLORMAP); } // If we're the child of a mesh component, put our nodes in the // parent object's tree. if (_parent) { MeshComponent *mc = static_cast<MeshComponent *>(_parent); _obj = g_resourceloader->loadModel(_name, cm, mc->getModel()); _hier = _obj->getHierarchy(); mc->getNode()->addChild(_hier); } else { _obj = g_resourceloader->loadModel(_name, cm); _hier = _obj->getHierarchy(); Debug::warning(Debug::Costumes, "Parent of model %s wasn't a mesh", _name.c_str()); } // Use parent availablity to decide whether to default the // component to being visible if (_parent) setKey(0); else setKey(1); } if (!_animation) { _animation = new AnimManager(); } }