X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fmaterials%2Flighting.cpp;h=bcf2bb0e2645772555b2f1bbc2eaa4b6ea3959b2;hp=fa0c26b41bfa815abe6902394e505cf474c3276c;hb=a8383f1163cd020e2ce2c030e93defd2f9909a1d;hpb=aeef1c75d50f39bf57c3e608bbe41005479c44da diff --git a/source/materials/lighting.cpp b/source/materials/lighting.cpp index fa0c26b4..bcf2bb0e 100644 --- a/source/materials/lighting.cpp +++ b/source/materials/lighting.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "error.h" #include "light.h" #include "lighting.h" @@ -63,12 +64,17 @@ void Lighting::set_fog_half_distance(float d) set_fog_density(-log(pow(0.5, 1.0/d))); } -void Lighting::attach(unsigned i, const Light &l) +void Lighting::attach(const Light &l) { - if(i>=lights.size()) - lights.resize(i+1); + if(find(lights, &l)==lights.end()) + lights.push_back(&l); +} - lights[i] = &l; +void Lighting::detach(const Light &l) +{ + vector::iterator i = find(lights, &l); + if(i!=lights.end()) + lights.erase(i); } void Lighting::detach(unsigned i) @@ -76,7 +82,7 @@ void Lighting::detach(unsigned i) if(i>=lights.size()) return; - lights[i] = 0; + detach(*lights[i]); } const Light *Lighting::get_attached_light(unsigned i) const @@ -120,6 +126,9 @@ void Lighting::Loader::init_actions() add("light", &Loader::light); add("sky_color", &Loader::sky_color); add("zenith_direction", &Loader::zenith_direction); + + // Deprecated + add("light", &Loader::light_index); } void Lighting::Loader::ambient(float r, float g, float b) @@ -147,14 +156,19 @@ void Lighting::Loader::horizon_angle(float a) obj.set_horizon_angle(Geometry::Angle::from_degrees(a)); } -void Lighting::Loader::light(unsigned i) +void Lighting::Loader::light() { RefPtr lgt = new Light; load_sub(*lgt); - obj.attach(i, *lgt); + obj.attach(*lgt); obj.owned_data.push_back(lgt.release()); } +void Lighting::Loader::light_index(unsigned) +{ + light_inline(); +} + void Lighting::Loader::sky_color(float r, float g, float b) { obj.set_sky_color(Color(r, g, b));