コード例 #1
0
ファイル: CohModelConverter.cpp プロジェクト: broxen/Segs
Urho3D::StaticModel *convertedModelToLutefisk(Urho3D::Context *ctx, Urho3D::Node *tgtnode, SEGS::SceneNode *node, int opt)
{
    SEGS::Model *mdl = node->model;
    Urho3D::StaticModel * converted=nullptr;
    auto loc = s_coh_model_to_static_model.find(mdl);
    if (loc != s_coh_model_to_static_model.end())
        converted = loc->second.Get();

    if (mdl && converted)
    {
        float per_node_draw_distance = node->lod_far + node->lod_far_fade;
        StaticModel* boxObject = tgtnode->CreateComponent<StaticModel>();
        copyStaticModel(converted, boxObject);
        boxObject->SetDrawDistance(per_node_draw_distance);
        return boxObject;
    }

    ModelModifiers *model_trick = mdl->trck_node;
    if (model_trick)
    {
        if (opt != CONVERT_EDITOR_MARKERS && model_trick->isFlag(NoDraw))
        {
            //qDebug() << mdl->name << "Set as no draw";
            return nullptr;
        }
        if (opt != CONVERT_EDITOR_MARKERS && model_trick->isFlag(EditorVisible))
        {
            //qDebug() << mdl->name << "Set as editor model";
            return nullptr;
        }
        if (model_trick && model_trick->isFlag(CastShadow))
        {
            //qDebug() << "Not converting shadow models"<<mdl->name;
            return nullptr;
        }
        if (model_trick && model_trick->isFlag(ParticleSys))
        {
            qDebug() << "Not converting particle sys:" << mdl->name;
            return nullptr;
        }
    }
    Urho3D::Model *modelptr = buildModel(ctx, mdl);
    if(!modelptr)
        return nullptr;
    StaticModel* boxObject = tgtnode->CreateComponent<StaticModel>();

    boxObject->SetDrawDistance(node->lod_far+node->lod_far_fade);
    boxObject->SetModel(modelptr);
    convertMaterial(ctx,mdl,boxObject);
    s_coh_model_to_static_model[mdl] = boxObject;
    return boxObject;
}