Ticket #143: receiveshadows.diff

File receiveshadows.diff, 5.9 KB (added by Lubosz, 14 years ago)

Patch for ActorEditor, Model, ObjectBase and ObjectEntry to support receiving shadows

  • 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"");
  • 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
  • graphics/Model.cpp

     
    379379    m_Flags &= ~MODELFLAG_CASTSHADOWS;
    380380    if (source->m_Flags & MODELFLAG_CASTSHADOWS)
    381381        m_Flags |= MODELFLAG_CASTSHADOWS;
     382       
     383    m_Flags &= ~MODELFLAG_RECEIVESHADOWS;
     384    if (source->m_Flags & MODELFLAG_RECEIVESHADOWS)
     385        m_Flags |= MODELFLAG_RECEIVESHADOWS;
    382386
    383387    m_ObjectBounds.SetEmpty();
    384388    InvalidateBounds();
  • graphics/Model.h

     
    3737class CSkeletonAnimManager;
    3838
    3939#define MODELFLAG_CASTSHADOWS       (1<<0)
    40 #define MODELFLAG_NOLOOPANIMATION   (1<<1)
     40#define MODELFLAG_RECEIVESHADOWS    (1<<1)
     41#define MODELFLAG_NOLOOPANIMATION   (1<<2)
    4142
    4243///////////////////////////////////////////////////////////////////////////////
    4344// CModel: basically, a mesh object - holds the texturing and skinning
  • graphics/ObjectBase.h

     
    120120        bool m_AutoFlatten;
    121121        // cast shadows from this object
    122122        bool m_CastShadows;
     123        // this object receives shadows
     124        bool m_ReceiveShadows;
    123125        // float on top of water
    124126        bool m_FloatOnWater;
    125127    } m_Properties;
  • graphics/ObjectBase.cpp

     
    3535CObjectBase::CObjectBase(CObjectManager& objectManager)
    3636: m_ObjectManager(objectManager)
    3737{
    38     m_Properties.m_CastShadows = true;
     38    m_Properties.m_CastShadows = false;
     39    m_Properties.m_ReceiveShadows = false;
    3940    m_Properties.m_AutoFlatten = false;
    4041    m_Properties.m_FloatOnWater = false;
    4142}
     
    5152    #define AT(x) int at_##x = XeroFile.GetAttributeID(#x)
    5253    EL(actor);
    5354    EL(castshadow);
     55    EL(receiveshadow);
    5456    EL(float);
    5557    EL(material);
    5658    EL(group);
     
    213215        }
    214216        else if (child_name == el_castshadow)
    215217        {
    216             m_Properties.m_CastShadows = true; // TODO: this is the default, so it's a bit useless
     218            m_Properties.m_CastShadows = true;
    217219        }
     220        else if (child_name == el_receiveshadow)
     221        {
     222            m_Properties.m_ReceiveShadows = true;
     223        }
    218224        else if (child_name == el_float)
    219225        {
    220226            m_Properties.m_FloatOnWater = true;
  • graphics/ObjectEntry.cpp

     
    199199    {
    200200        m_Model->SetFlags(m_Model->GetFlags()|MODELFLAG_CASTSHADOWS);
    201201    }
     202    if (m_Base->m_Properties.m_ReceiveShadows)
     203    {
     204        m_Model->SetFlags(m_Model->GetFlags()|MODELFLAG_RECEIVESHADOWS);
     205    }
    202206
    203207    // replace any units using old model to now use new model; also reprop models, if necessary
    204208    // FIXME, RC - ugh, doesn't recurse correctly through props