/**********************************************************************
This file is part of Crack dot Com's free source code release of Golgotha.
for information about compiling & licensing issues visit this URL
 If that doesn't help, contact Jonathan Clark at 
  golgotha_source@usa.net (Subject should have "GOLG" in it) 
***********************************************************************/

#include "light.hh"
#include "saver_id.hh"
#include "saver.hh"
#include "map.hh"

g1_light_info g1_lights;


void g1_light_info::recalc_shadow_intensity()
{
  for (int i=0; i<256; i++)
    shadow_intensity[i]=1.0 - i4_float(i)/256.0;
}


void g1_light_info::set_ambient_intensity(float v)
{
  ambient_intensity=v;
  recalc_shadow_intensity();

}

void g1_light_info::set_directional_intensity(float v)
{
  directional_intensity=v;
  recalc_shadow_intensity();
}




void g1_light_info::save(i4_saver_class *fp)
{
  fp->mark_section("Map Lights V2");
  fp->write_format("fffff", 
                   &directional_intensity, 
                   &direction.x, &direction.y, &direction.z,
                   &ambient_intensity);
}

i4_bool g1_light_info::load(i4_loader_class *fp)
{
  if (fp && fp->goto_section("Map Lights V2"))
  {
    fp->read_format("fffff", 
                    &directional_intensity, 
                    &direction.x, &direction.y, &direction.z,
                    &ambient_intensity);

    recalc_shadow_intensity();
    return i4_T;
  }

  return i4_F;
}

void g1_light_info::defaults()
{
  directional_intensity=0.3;
  direction=i4_3d_vector(1, 0.0, -0.1);
  direction.normalize();
  ambient_intensity=0.05;
}

g1_light_info::g1_light_info()
{
  defaults();
}