+public:
+ struct Template: Effect::Template
+ {
+ class Loader: public DataFile::DerivedObjectLoader<Template, Effect::Template::Loader>
+ {
+ private:
+ static ActionMap shared_actions;
+
+ public:
+ Loader(Template &, Collection &);
+ private:
+ virtual void init_actions();
+
+ void light(const std::string &);
+ void size_square(unsigned);
+ void target(float, float, float);
+ };
+
+ struct ShadowedLight
+ {
+ class Loader: public DataFile::ObjectLoader<ShadowedLight>
+ {
+ private:
+ static ActionMap shared_actions;
+
+ public:
+ Loader(ShadowedLight &);
+ private:
+ virtual void init_actions();
+ };
+
+ const Light *light = 0;
+ unsigned size;
+ std::string shadow_caster_name;
+ };
+
+ unsigned width = 2048;
+ unsigned height = 2048;
+ const Lighting *lighting = 0;
+ std::vector<ShadowedLight> lights;
+ Vector3 target;
+ float radius = 1.0f;
+ float depth_bias = 4.0f;
+ float darkness = 1.0f;
+
+ virtual ShadowMap *create(const std::map<std::string, Renderable *> &) const;
+ };
+