void Creature::loadAppearance() { PartModels parts; getPartModels(parts); if ((parts.type == "P") || parts.body.empty()) { warning("TODO: Model \"%s\": ModelType \"%s\" (\"%s\")", _tag.c_str(), parts.type.c_str(), parts.body.c_str()); return; } loadBody(parts); loadHead(parts); }
void Creature::loadEquippedModel() { uint32 state; uint8 textureVariation; getModelState(state, textureVariation); PartModels parts; if (_isPC) { getPartModelsPC(parts, state, textureVariation); _portrait = parts.portrait; } else { getPartModels(parts, state, textureVariation); if ((_modelType == "P") || parts.body.empty()) { warning("TODO: Model \"%s\": ModelType \"%s\" (\"%s\")", _tag.c_str(), _modelType.c_str(), parts.body.c_str()); return; } } loadBody(parts); loadHead(parts); if (!_model) return; attachWeaponModel(kInventorySlotLeftWeapon); attachWeaponModel(kInventorySlotRightWeapon); setDefaultAnimations(); if (_visible) { float x, y, z; getPosition(x, y, z); _model->setPosition(x, y, z); float angle; getOrientation(x, y, z, angle); _model->setOrientation(x, y, z, angle); _model->show(); } }
void Creature::loadModel() { if (_model) return; if (_appearanceID == Aurora::kFieldIDInvalid) { warning("Creature \"%s\" has no appearance", _tag.c_str()); return; } const Aurora::TwoDARow &appearance = TwoDAReg.get2DA("appearance").getRow(_appearanceID); if (_portrait.empty()) _portrait = appearance.getString("PORTRAIT"); _environmentMap = appearance.getString("ENVMAP"); if (appearance.getString("MODELTYPE") == "P") { getArmorModels(); getPartModels(); _model = loadModelObject(_partsSuperModelName); for (size_t i = 0; i < kBodyPartMAX; i++) { if (_bodyParts[i].modelName.empty()) continue; TextureMan.startRecordNewTextures(); // Try to load in the corresponding part model Graphics::Aurora::Model *partModel = loadModelObject(_bodyParts[i].modelName, _bodyParts[i].textureName); if (!partModel) continue; // Add the loaded model to the appropriate part node Graphics::Aurora::ModelNode *partNode = _model->getNode(kBodyPartNodes[i]); if (partNode) partNode->addChild(partModel); std::list<Common::UString> newTextures; TextureMan.stopRecordNewTextures(newTextures); for (std::list<Common::UString>::const_iterator t = newTextures.begin(); t != newTextures.end(); ++t) { Graphics::Aurora::TextureHandle texture = TextureMan.getIfExist(*t); if (texture.empty()) continue; _bodyParts[i].textures.push_back(texture); } finishPLTs(_bodyParts[i].textures); } } else _model = loadModelObject(appearance.getString("RACE")); // Positioning float x, y, z, angle; getPosition(x, y, z); setPosition(x, y, z); getOrientation(x, y, z, angle); setOrientation(x, y, z, angle); // Clickable if (_model) { _model->setTag(_tag); _model->setClickable(isClickable()); _ids.push_back(_model->getID()); if (!_environmentMap.empty()) { Common::UString environmentMap = _environmentMap; if (environmentMap.equalsIgnoreCase("default")) environmentMap = _area ? _area->getEnvironmentMap() : ""; _model->setEnvironmentMap(environmentMap); } } }