+#include <msp/core/algorithm.h>
#include "effect.h"
+using namespace std;
+
namespace Msp {
namespace GL {
-Effect::Effect(Renderable &r):
- renderable(r)
+Effect::Effect(Renderable &c):
+ content(c)
{
- enabled_methods.insert(Tag());
+ enable_for_method(Tag());
}
void Effect::enable_for_method(Tag tag)
{
- enabled_methods.insert(tag);
+ auto i = lower_bound(enabled_methods, tag);
+ if(i==enabled_methods.end() || *i!=tag)
+ enabled_methods.insert(i, tag);
}
void Effect::disable_for_method(Tag tag)
{
- enabled_methods.erase(tag);
+ auto i = lower_bound(enabled_methods, tag);
+ if(i!=enabled_methods.end() && *i==tag)
+ enabled_methods.erase(i);
+}
+
+bool Effect::is_enabled_for_method(Tag tag) const
+{
+ auto i = lower_bound(enabled_methods, tag);
+ return (i!=enabled_methods.end() && *i==tag);
+}
+
+
+void Effect::Template::create_base(Effect &effect) const
+{
+ for(Tag m: enabled_methods)
+ effect.enable_for_method(m);
}
void Effect::Template::Loader::init_actions()
{
add("content", &Template::content_name);
+ add("enable_for_method", &Loader::enable_for_method);
+}
+
+void Effect::Template::Loader::enable_for_method(const string &m)
+{
+ obj.enabled_methods.push_back(m);
}
} // namespace GL