Ticket #143: receiveshadows_r11037_02072012.patch

File receiveshadows_r11037_02072012.patch, 6.3 KB (added by historic_bruno, 12 years ago)

updated version applied to r11037

  • source/graphics/Model.cpp

     
    462462    if (source->m_Flags & MODELFLAG_CASTSHADOWS)
    463463        m_Flags |= MODELFLAG_CASTSHADOWS;
    464464
     465    m_Flags &= ~MODELFLAG_RECEIVESHADOWS;
     466    if (source->m_Flags & MODELFLAG_RECEIVESHADOWS)
     467        m_Flags |= MODELFLAG_RECEIVESHADOWS;
     468
    465469    m_ObjectBounds.SetEmpty();
    466470    InvalidateBounds();
    467471}
  • source/graphics/Model.h

     
    3636class CSkeletonAnimDef;
    3737class CSkeletonAnimManager;
    3838
    39 #define MODELFLAG_CASTSHADOWS       (1<<0)
    40 #define MODELFLAG_NOLOOPANIMATION   (1<<1)
    41 #define MODELFLAG_SILHOUETTE_DISPLAY    (1<<2)
    42 #define MODELFLAG_SILHOUETTE_OCCLUDER   (1<<3)
    43 #define MODELFLAG_FILTERED          (1<<4)  // used internally by renderer
     39#define MODELFLAG_CASTSHADOWS           (1<<0)
     40#define MODELFLAG_RECEIVESHADOWS        (1<<1)
     41#define MODELFLAG_NOLOOPANIMATION       (1<<2)
     42#define MODELFLAG_SILHOUETTE_DISPLAY    (1<<3)
     43#define MODELFLAG_SILHOUETTE_OCCLUDER   (1<<4)
     44#define MODELFLAG_FILTERED              (1<<5)  // used internally by renderer
    4445
    4546///////////////////////////////////////////////////////////////////////////////
    4647// CModel: basically, a mesh object - holds the texturing and skinning
  • source/graphics/ObjectBase.cpp

     
    3434CObjectBase::CObjectBase(CObjectManager& objectManager)
    3535: m_ObjectManager(objectManager)
    3636{
    37     m_Properties.m_CastShadows = true;
     37    m_Properties.m_CastShadows = false;
     38    m_Properties.m_ReceiveShadows = false;
    3839    m_Properties.m_AutoFlatten = false;
    3940    m_Properties.m_FloatOnWater = false;
    4041}
     
    5354    #define AT(x) int at_##x = XeroFile.GetAttributeID(#x)
    5455    EL(actor);
    5556    EL(castshadow);
     57    EL(receiveshadow);
    5658    EL(float);
    5759    EL(material);
    5860    EL(group);
     
    245247        }
    246248        else if (child_name == el_castshadow)
    247249        {
    248             m_Properties.m_CastShadows = true; // TODO: this is the default, so it's a bit useless
     250            m_Properties.m_CastShadows = true;
    249251        }
     252        else if (child_name == el_receiveshadow)
     253        {
     254            m_Properties.m_ReceiveShadows = true;
     255        }
    250256        else if (child_name == el_float)
    251257        {
    252258            m_Properties.m_FloatOnWater = true;
  • source/graphics/ObjectBase.h

     
    147147        bool m_AutoFlatten;
    148148        // cast shadows from this object
    149149        bool m_CastShadows;
     150        // this object receives shadows
     151        bool m_ReceiveShadows;
    150152        // float on top of water
    151153        bool m_FloatOnWater;
    152154    } m_Properties;
  • source/graphics/ObjectEntry.cpp

     
    227227        model->SetFlags(model->GetFlags()|MODELFLAG_CASTSHADOWS);
    228228    }
    229229
     230    if (m_Base->m_Properties.m_ReceiveShadows)
     231    {
     232        model->SetFlags(model->GetFlags()|MODELFLAG_RECEIVESHADOWS);
     233    }
     234
    230235    return true;
    231236}
    232237
  • source/tools/atlas/AtlasUI/ActorEditor/ActorEditor.cpp

     
    7373    m_CastShadows = new wxCheckBox(propertiesPanel, wxID_ANY, _("Cast shadow"));
    7474    propertiesSizer->Add(m_CastShadows, wxSizerFlags().Border(wxALL, 5));
    7575
     76    m_ReceiveShadows = new wxCheckBox(propertiesPanel, wxID_ANY, _("Receive shadow"));
     77    propertiesSizer->Add(m_ReceiveShadows, wxSizerFlags().Border(wxALL, 5));
     78
    7679    m_Float = new wxCheckBox(propertiesPanel, wxID_ANY, _("Float on water"));
    7780    propertiesSizer->Add(m_Float, wxSizerFlags().Border(wxALL, 5));
    7881
     
    107110    m_ActorEditorListCtrl->ThawData(actor);
    108111
    109112    m_CastShadows->SetValue(actor["castshadow"].defined());
     113    m_ReceiveShadows->SetValue(actor["receiveshadow"].defined());
    110114    m_Float->SetValue(actor["float"].defined());
    111115    m_Material->SetValue((wxString)actor["material"]);
    112116}
     
    118122    if (m_CastShadows->IsChecked())
    119123        actor.set("castshadow", L"");
    120124
     125    if (m_ReceiveShadows->IsChecked())
     126        actor.set("receiveshadow", L"");
     127       
    121128    if (m_Float->IsChecked())
    122129        actor.set("float", L"");
    123130
     
    173180
    174181        if (wxString(in["Object"]["Properties"]["@castshadows"]) == _T("1"))
    175182            actor.add("castshadow", L"");
     183           
     184        if (wxString(in["Object"]["Properties"]["@receiveshadows"]) == _T("1"))
     185            actor.add("receiveshadow", L"");
    176186
    177187        // Things to strip leading strings (for converting filenames, since the
    178188        // new format doesn't store the entire path)
     
    247257        AtObj actor;
    248258
    249259        if (in["actor"]["castshadow"].defined()) actor.add("castshadow", in["actor"]["castshadow"]);
     260        if (in["actor"]["receiveshadow"].defined()) actor.add("receiveshadow", in["actor"]["receiveshadow"]);
    250261        if (in["actor"]["material"].defined()) actor.add("material", in["actor"]["material"]);
    251262
    252263        for (AtIter grpit = in["actor"]["group"]; grpit.defined(); ++grpit)
     
    317328    m_ActorEditorListCtrl->ImportData(actor);
    318329
    319330    m_CastShadows->SetValue(actor["castshadow"].defined());
     331    m_ReceiveShadows->SetValue(actor["receiveshadow"].defined());
    320332    m_Float->SetValue(actor["float"].defined());
    321333    m_Material->SetValue((wxString)actor["material"]);
    322334}
     
    330342
    331343    if (m_CastShadows->IsChecked())
    332344        actor.set("castshadow", L"");
     345       
     346    if (m_ReceiveShadows->IsChecked())
     347        actor.set("receiveshadow", L"");
    333348
    334349    if (m_Float->IsChecked())
    335350        actor.set("float", L"");
  • source/tools/atlas/AtlasUI/ActorEditor/ActorEditor.h

     
    4848    ActorEditorListCtrl* m_ActorEditorListCtrl;
    4949
    5050    wxCheckBox* m_CastShadows;
     51    wxCheckBox* m_ReceiveShadows;
    5152    wxCheckBox* m_Float;
    5253    wxComboBox* m_Material;
    5354