diff --git a/src/Assets/BindingsRx/Bindings.meta b/src/Assets/BindingsRx/Bindings.meta
new file mode 100644
index 0000000..2b30489
--- /dev/null
+++ b/src/Assets/BindingsRx/Bindings.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ab96d361bf5346c095d25635765e395c
+timeCreated: 1489141562
\ No newline at end of file
diff --git a/src/Assets/BindingsRx/UI/CanvasElementExtensions.cs b/src/Assets/BindingsRx/Bindings/CanvasElementExtensions.cs
similarity index 96%
rename from src/Assets/BindingsRx/UI/CanvasElementExtensions.cs
rename to src/Assets/BindingsRx/Bindings/CanvasElementExtensions.cs
index f324ad6..a31b199 100644
--- a/src/Assets/BindingsRx/UI/CanvasElementExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/CanvasElementExtensions.cs
@@ -1,12 +1,10 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.GameObjects;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class CanvasElementExtensions
{
diff --git a/src/Assets/BindingsRx/UI/CanvasElementExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/CanvasElementExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/CanvasElementExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/CanvasElementExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/UI/DropdownExtensions.cs b/src/Assets/BindingsRx/Bindings/DropdownExtensions.cs
similarity index 97%
rename from src/Assets/BindingsRx/UI/DropdownExtensions.cs
rename to src/Assets/BindingsRx/Bindings/DropdownExtensions.cs
index e6150d1..6fe8341 100644
--- a/src/Assets/BindingsRx/UI/DropdownExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/DropdownExtensions.cs
@@ -1,15 +1,11 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Security.Cryptography.X509Certificates;
-using BindingsRx.Extensions;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class DropdownExtensions
{
diff --git a/src/Assets/BindingsRx/UI/DropdownExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/DropdownExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/DropdownExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/DropdownExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/GameObjects/GameObjectExtensions.cs b/src/Assets/BindingsRx/Bindings/GameObjectExtensions.cs
similarity index 98%
rename from src/Assets/BindingsRx/GameObjects/GameObjectExtensions.cs
rename to src/Assets/BindingsRx/Bindings/GameObjectExtensions.cs
index 509cf9f..f4ab586 100644
--- a/src/Assets/BindingsRx/GameObjects/GameObjectExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/GameObjectExtensions.cs
@@ -1,10 +1,9 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine;
-namespace BindingsRx.GameObjects
+namespace BindingsRx.Bindings
{
public static class GameObjectExtensions
{
diff --git a/src/Assets/BindingsRx/GameObjects/GameObjectExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/GameObjectExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/GameObjects/GameObjectExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/GameObjectExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/Generic/GenericBindings.cs b/src/Assets/BindingsRx/Bindings/GenericBindings.cs
similarity index 99%
rename from src/Assets/BindingsRx/Generic/GenericBindings.cs
rename to src/Assets/BindingsRx/Bindings/GenericBindings.cs
index 2586156..ea84315 100644
--- a/src/Assets/BindingsRx/Generic/GenericBindings.cs
+++ b/src/Assets/BindingsRx/Bindings/GenericBindings.cs
@@ -4,9 +4,8 @@
using BindingsRx.Extensions;
using BindingsRx.Filters;
using UniRx;
-using UnityEngine;
-namespace BindingsRx.Generic
+namespace BindingsRx.Bindings
{
public static class GenericBindings
{
diff --git a/src/Assets/BindingsRx/Generic/GenericBindings.cs.meta b/src/Assets/BindingsRx/Bindings/GenericBindings.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/Generic/GenericBindings.cs.meta
rename to src/Assets/BindingsRx/Bindings/GenericBindings.cs.meta
diff --git a/src/Assets/BindingsRx/UI/InputFieldExtensions.cs b/src/Assets/BindingsRx/Bindings/InputFieldExtensions.cs
similarity index 98%
rename from src/Assets/BindingsRx/UI/InputFieldExtensions.cs
rename to src/Assets/BindingsRx/Bindings/InputFieldExtensions.cs
index 7c27ba1..e9e8253 100644
--- a/src/Assets/BindingsRx/UI/InputFieldExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/InputFieldExtensions.cs
@@ -1,12 +1,11 @@
using System;
using BindingsRx.Convertors;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class InputFieldExtensions
{
diff --git a/src/Assets/BindingsRx/UI/InputFieldExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/InputFieldExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/InputFieldExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/InputFieldExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/Bindings/MaterialExtensions.cs b/src/Assets/BindingsRx/Bindings/MaterialExtensions.cs
new file mode 100644
index 0000000..3dbd5f8
--- /dev/null
+++ b/src/Assets/BindingsRx/Bindings/MaterialExtensions.cs
@@ -0,0 +1,31 @@
+using System;
+using BindingsRx.Filters;
+using UniRx;
+using UnityEngine;
+
+namespace BindingsRx.Bindings
+{
+ ///
+ /// All material bindings require explicit cleanup as Material is not IDisposable
+ ///
+ public static class MaterialExtensions
+ {
+ public static IDisposable BindColorTo(this Material input, IReactiveProperty property, BindingTypes bindingType = BindingTypes.Default, params IFilter[] filters)
+ { return GenericBindings.Bind(() => input.color, x => input.color = x, property, bindingType, filters); }
+
+ public static IDisposable BindColorTo(this Material input, Func getter, Action setter, BindingTypes bindingType = BindingTypes.Default, params IFilter[] filters)
+ { return GenericBindings.Bind(() => input.color, x => input.color = x, getter, setter, bindingType, filters); }
+
+ public static IDisposable BindTextureTo(this Material input, IReactiveProperty property, BindingTypes bindingType = BindingTypes.Default, params IFilter[] filters)
+ { return GenericBindings.Bind(() => input.mainTexture, x => input.mainTexture = x, property, bindingType, filters); }
+
+ public static IDisposable BindColorTo(this Material input, Func getter, Action setter, BindingTypes bindingType = BindingTypes.Default, params IFilter[] filters)
+ { return GenericBindings.Bind(() => input.mainTexture, x => input.mainTexture = x, getter, setter, bindingType, filters); }
+
+ public static IDisposable BindShaderTo(this Material input, IReactiveProperty property, BindingTypes bindingType = BindingTypes.Default, params IFilter[] filters)
+ { return GenericBindings.Bind(() => input.shader, x => input.shader = x, property, bindingType, filters); }
+
+ public static IDisposable BindShaderTo(this Material input, Func getter, Action setter, BindingTypes bindingType = BindingTypes.Default, params IFilter[] filters)
+ { return GenericBindings.Bind(() => input.shader, x => input.shader = x, getter, setter, bindingType, filters); }
+ }
+}
\ No newline at end of file
diff --git a/src/Assets/BindingsRx/Bindings/MaterialExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/MaterialExtensions.cs.meta
new file mode 100644
index 0000000..4ad7f05
--- /dev/null
+++ b/src/Assets/BindingsRx/Bindings/MaterialExtensions.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 62cf4978469649e387b06cdf7853b6d3
+timeCreated: 1489142039
\ No newline at end of file
diff --git a/src/Assets/BindingsRx/GameObjects/MonobehaviourExtensions.cs b/src/Assets/BindingsRx/Bindings/MonoBehaviourExtensions.cs
similarity index 93%
rename from src/Assets/BindingsRx/GameObjects/MonobehaviourExtensions.cs
rename to src/Assets/BindingsRx/Bindings/MonoBehaviourExtensions.cs
index 011a699..19e23ab 100644
--- a/src/Assets/BindingsRx/GameObjects/MonobehaviourExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/MonoBehaviourExtensions.cs
@@ -1,10 +1,9 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine;
-namespace BindingsRx.GameObjects
+namespace BindingsRx.Bindings
{
public static class MonoBehaviourExtensions
{
diff --git a/src/Assets/BindingsRx/GameObjects/MonobehaviourExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/MonoBehaviourExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/GameObjects/MonobehaviourExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/MonoBehaviourExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/GameObjects/RectTransformExtensions.cs b/src/Assets/BindingsRx/Bindings/RectTransformExtensions.cs
similarity index 96%
rename from src/Assets/BindingsRx/GameObjects/RectTransformExtensions.cs
rename to src/Assets/BindingsRx/Bindings/RectTransformExtensions.cs
index e7e6216..8b3d75b 100644
--- a/src/Assets/BindingsRx/GameObjects/RectTransformExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/RectTransformExtensions.cs
@@ -1,11 +1,9 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.Generic;
-using BindingsRx.UI;
using UniRx;
using UnityEngine;
-namespace BindingsRx.GameObjects
+namespace BindingsRx.Bindings
{
public static class RectTransformExtensions
{
diff --git a/src/Assets/BindingsRx/GameObjects/RectTransformExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/RectTransformExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/GameObjects/RectTransformExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/RectTransformExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/UI/ScrollBarExtensions.cs b/src/Assets/BindingsRx/Bindings/ScrollBarExtensions.cs
similarity index 97%
rename from src/Assets/BindingsRx/UI/ScrollBarExtensions.cs
rename to src/Assets/BindingsRx/Bindings/ScrollBarExtensions.cs
index fab0a67..fee687a 100644
--- a/src/Assets/BindingsRx/UI/ScrollBarExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/ScrollBarExtensions.cs
@@ -1,10 +1,9 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class ScrollBarExtensions
{
diff --git a/src/Assets/BindingsRx/UI/ScrollBarExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/ScrollBarExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/ScrollBarExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/ScrollBarExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/UI/ScrollRectExtensions.cs b/src/Assets/BindingsRx/Bindings/ScrollRectExtensions.cs
similarity index 98%
rename from src/Assets/BindingsRx/UI/ScrollRectExtensions.cs
rename to src/Assets/BindingsRx/Bindings/ScrollRectExtensions.cs
index 69749cc..0c5ceaa 100644
--- a/src/Assets/BindingsRx/UI/ScrollRectExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/ScrollRectExtensions.cs
@@ -1,10 +1,9 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class ScrollRectExtensions
{
diff --git a/src/Assets/BindingsRx/UI/ScrollRectExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/ScrollRectExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/ScrollRectExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/ScrollRectExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/UI/SliderExtensions.cs b/src/Assets/BindingsRx/Bindings/SliderExtensions.cs
similarity index 97%
rename from src/Assets/BindingsRx/UI/SliderExtensions.cs
rename to src/Assets/BindingsRx/Bindings/SliderExtensions.cs
index 4d1a115..550d591 100644
--- a/src/Assets/BindingsRx/UI/SliderExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/SliderExtensions.cs
@@ -1,11 +1,9 @@
using System;
-using BindingsRx.Exceptions;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class SliderExtensions
{
diff --git a/src/Assets/BindingsRx/UI/SliderExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/SliderExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/SliderExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/SliderExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/UI/TextExtensions.cs b/src/Assets/BindingsRx/Bindings/TextExtensions.cs
similarity index 98%
rename from src/Assets/BindingsRx/UI/TextExtensions.cs
rename to src/Assets/BindingsRx/Bindings/TextExtensions.cs
index 093afe5..60e2f7c 100644
--- a/src/Assets/BindingsRx/UI/TextExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/TextExtensions.cs
@@ -1,12 +1,11 @@
using System;
using BindingsRx.Convertors;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class TextExtensions
{
diff --git a/src/Assets/BindingsRx/UI/TextExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/TextExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/TextExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/TextExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/UI/ToggleExtensions.cs b/src/Assets/BindingsRx/Bindings/ToggleExtensions.cs
similarity index 93%
rename from src/Assets/BindingsRx/UI/ToggleExtensions.cs
rename to src/Assets/BindingsRx/Bindings/ToggleExtensions.cs
index 2b223c9..1ba299c 100644
--- a/src/Assets/BindingsRx/UI/ToggleExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/ToggleExtensions.cs
@@ -1,10 +1,9 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.Generic;
using UniRx;
using UnityEngine.UI;
-namespace BindingsRx.UI
+namespace BindingsRx.Bindings
{
public static class ToggleExtensions
{
diff --git a/src/Assets/BindingsRx/UI/ToggleExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/ToggleExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/UI/ToggleExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/ToggleExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/GameObjects/TransformExtensions.cs b/src/Assets/BindingsRx/Bindings/TransformExtensions.cs
similarity index 96%
rename from src/Assets/BindingsRx/GameObjects/TransformExtensions.cs
rename to src/Assets/BindingsRx/Bindings/TransformExtensions.cs
index fb6b1f3..3dddfbf 100644
--- a/src/Assets/BindingsRx/GameObjects/TransformExtensions.cs
+++ b/src/Assets/BindingsRx/Bindings/TransformExtensions.cs
@@ -1,11 +1,9 @@
using System;
using BindingsRx.Filters;
-using BindingsRx.Generic;
-using BindingsRx.UI;
using UniRx;
using UnityEngine;
-namespace BindingsRx.GameObjects
+namespace BindingsRx.Bindings
{
public static class TransformExtensions
{
diff --git a/src/Assets/BindingsRx/GameObjects/TransformExtensions.cs.meta b/src/Assets/BindingsRx/Bindings/TransformExtensions.cs.meta
similarity index 100%
rename from src/Assets/BindingsRx/GameObjects/TransformExtensions.cs.meta
rename to src/Assets/BindingsRx/Bindings/TransformExtensions.cs.meta
diff --git a/src/Assets/BindingsRx/GameObjects.meta b/src/Assets/BindingsRx/GameObjects.meta
deleted file mode 100644
index f65151c..0000000
--- a/src/Assets/BindingsRx/GameObjects.meta
+++ /dev/null
@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: 99f0d2208b6204048aef65399f2bd60a
-folderAsset: yes
-timeCreated: 1488974647
-licenseType: Free
-DefaultImporter:
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/src/Assets/BindingsRx/Generic.meta b/src/Assets/BindingsRx/Generic.meta
deleted file mode 100644
index e72e841..0000000
--- a/src/Assets/BindingsRx/Generic.meta
+++ /dev/null
@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: 66d9329c156db2f4ca2e17ffc702e047
-folderAsset: yes
-timeCreated: 1488884101
-licenseType: Free
-DefaultImporter:
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/src/Assets/BindingsRx/UI.meta b/src/Assets/BindingsRx/UI.meta
deleted file mode 100644
index 0515683..0000000
--- a/src/Assets/BindingsRx/UI.meta
+++ /dev/null
@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: f1d3dc415b11c2b419ea629ecc63e8bb
-folderAsset: yes
-timeCreated: 1480283587
-licenseType: Free
-DefaultImporter:
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/src/Assets/Editor/Tests/GenericBindingTests.cs b/src/Assets/Editor/Tests/GenericBindingTests.cs
index 2495297..e911703 100644
--- a/src/Assets/Editor/Tests/GenericBindingTests.cs
+++ b/src/Assets/Editor/Tests/GenericBindingTests.cs
@@ -1,5 +1,5 @@
using BindingsRx;
-using BindingsRx.Generic;
+using BindingsRx.Bindings;
using NUnit.Framework;
using UniRx;
diff --git a/src/Assets/Examples/InputBindings/SetupDropdownBinding.cs b/src/Assets/Examples/InputBindings/SetupDropdownBinding.cs
index 2a93b9a..3cd92b2 100644
--- a/src/Assets/Examples/InputBindings/SetupDropdownBinding.cs
+++ b/src/Assets/Examples/InputBindings/SetupDropdownBinding.cs
@@ -1,4 +1,4 @@
-using BindingsRx.UI;
+using BindingsRx.Bindings;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
diff --git a/src/Assets/Examples/InputBindings/SetupTextBinding.cs b/src/Assets/Examples/InputBindings/SetupTextBinding.cs
index 0729bfa..07e34c1 100644
--- a/src/Assets/Examples/InputBindings/SetupTextBinding.cs
+++ b/src/Assets/Examples/InputBindings/SetupTextBinding.cs
@@ -1,4 +1,4 @@
-using BindingsRx.UI;
+using BindingsRx.Bindings;
using UnityEngine;
using UnityEngine.UI;
diff --git a/src/Assets/Examples/InputBindings/SetupTextualValueBinding.cs b/src/Assets/Examples/InputBindings/SetupTextualValueBinding.cs
index 5f29a8d..a533c20 100644
--- a/src/Assets/Examples/InputBindings/SetupTextualValueBinding.cs
+++ b/src/Assets/Examples/InputBindings/SetupTextualValueBinding.cs
@@ -1,5 +1,5 @@
using System;
-using BindingsRx.UI;
+using BindingsRx.Bindings;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
diff --git a/src/Assets/Examples/InputBindings/SetupThrottledTextBinding.cs b/src/Assets/Examples/InputBindings/SetupThrottledTextBinding.cs
index a99a007..6a5951e 100644
--- a/src/Assets/Examples/InputBindings/SetupThrottledTextBinding.cs
+++ b/src/Assets/Examples/InputBindings/SetupThrottledTextBinding.cs
@@ -1,6 +1,6 @@
using System;
+using BindingsRx.Bindings;
using BindingsRx.Filters;
-using BindingsRx.UI;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
diff --git a/src/Assets/Examples/InputBindings/SetupToggleBinding.cs b/src/Assets/Examples/InputBindings/SetupToggleBinding.cs
index 3a7fbf8..7daaada 100644
--- a/src/Assets/Examples/InputBindings/SetupToggleBinding.cs
+++ b/src/Assets/Examples/InputBindings/SetupToggleBinding.cs
@@ -1,5 +1,5 @@
using BindingsRx;
-using BindingsRx.UI;
+using BindingsRx.Bindings;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
diff --git a/src/src.csproj b/src/src.csproj
index 7381c4f..fcb8ca0 100644
--- a/src/src.csproj
+++ b/src/src.csproj
@@ -83,6 +83,7 @@
+
@@ -94,19 +95,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+