Skip to content

Commit

Permalink
fix(Interaction): allow touch highlight to affect all object materials
Browse files Browse the repository at this point in the history
Previously, the touch highlighting would only change the first material
on the Interactable Object. This fix ensures that all the materials on
an object get updated by the hightlight colour.
  • Loading branch information
thestonefox committed Aug 5, 2016
1 parent 9e5e1ed commit d79239f
Showing 1 changed file with 33 additions and 13 deletions.
46 changes: 33 additions & 13 deletions Assets/SteamVR_Unity_Toolkit/Scripts/VRTK_InteractableObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public enum ControllerHideMode
protected GameObject usingObject = null;

private int usingState = 0;
private Dictionary<string, Color> originalObjectColours;
private Dictionary<string, Color[]> originalObjectColours;

private Transform grabbedSnapHandle;
private Transform trackPoint;
Expand Down Expand Up @@ -442,7 +442,7 @@ protected virtual void OnDisable()

protected virtual void OnEnable()
{
if(forcedDropped)
if (forcedDropped)
{
LoadPreviousState();
}
Expand Down Expand Up @@ -492,39 +492,59 @@ private Renderer[] GetRendererArray()
return (GetComponents<Renderer>().Length > 0 ? GetComponents<Renderer>() : GetComponentsInChildren<Renderer>());
}

private Dictionary<string, Color> StoreOriginalColors()
private Dictionary<string, Color[]> StoreOriginalColors()
{
Dictionary<string, Color> colors = new Dictionary<string, Color>();
var colors = new Dictionary<string, Color[]>();
foreach (Renderer renderer in GetRendererArray())
{
if (renderer.material.HasProperty("_Color"))
colors[renderer.gameObject.name] = new Color[renderer.materials.Length];

for (int i = 0; i < renderer.materials.Length; i++)
{
colors[renderer.gameObject.name] = renderer.material.color;
var material = renderer.materials[i];
if (material.HasProperty("_Color"))
{
colors[renderer.gameObject.name][i] = material.color;
}
}
}
return colors;
}

private Dictionary<string, Color> BuildHighlightColorArray(Color color)
private Dictionary<string, Color[]> BuildHighlightColorArray(Color color)
{
Dictionary<string, Color> colors = new Dictionary<string, Color>();
var colors = new Dictionary<string, Color[]>();
foreach (Renderer renderer in GetRendererArray())
{
if (renderer.material.HasProperty("_Color"))
colors[renderer.gameObject.name] = new Color[renderer.materials.Length];
for (int i = 0; i < renderer.materials.Length; i++)
{
colors[renderer.gameObject.name] = color;
var material = renderer.materials[i];
if (material.HasProperty("_Color"))
{
colors[renderer.gameObject.name][i] = color;
}
}
}
return colors;
}

private void ChangeColor(Dictionary<string, Color> colors)
private void ChangeColor(Dictionary<string, Color[]> colors)
{
foreach (Renderer renderer in GetRendererArray())
{
if (renderer.material.HasProperty("_Color") && colors.ContainsKey(renderer.gameObject.name))
if (!colors.ContainsKey(renderer.gameObject.name))
{
renderer.material.color = colors[renderer.gameObject.name];
continue;
}

for (int i = 0; i < renderer.materials.Length; i++)
{
var material = renderer.materials[i];
if (material.HasProperty("_Color"))
{
material.color = colors[renderer.gameObject.name][i];
}
}
}
}
Expand Down

0 comments on commit d79239f

Please sign in to comment.