2using System.Collections;
3using System.Globalization;
4using System.Runtime.Serialization;
6using JetBrains.Annotations;
7using NaughtyAttributes;
19 [SerializeField]
private GameObject selectedGO;
20 private GameObject canvasSelector;
22 private Material[] mats;
23 private Material[] origMats;
24 private float _timeToWatch = 2.0f;
25 private Material highlightMat;
26 private GameObject highlightHolder;
35 highlightMat = (Material) Resources.Load(
"SteamVR_HoverHighlightBlue", typeof(Material));
38 private bool IsWatching()
47 highlightHolder =
new GameObject(
"Highlighter");
54 var newSkinnedHolder =
new GameObject(
"SkinnedHolder");
55 newSkinnedHolder.transform.parent = highlightHolder.transform;
56 var newSkinned = newSkinnedHolder.AddComponent<SkinnedMeshRenderer>();
57 var materials =
new Material[existingSkinned.sharedMaterials.Length];
58 for (var materialIndex = 0; materialIndex < materials.Length; materialIndex++)
59 materials[materialIndex] = highlightMat;
61 newSkinned.sharedMaterials = materials;
62 newSkinned.sharedMesh = existingSkinned.sharedMesh;
63 newSkinned.rootBone = existingSkinned.rootBone;
64 newSkinned.updateWhenOffscreen = existingSkinned.updateWhenOffscreen;
65 newSkinned.bones = existingSkinned.bones;
70 var existingFilters = selectedGO.GetComponentsInChildren<MeshFilter>(
true);
74 for (var filterIndex = 0; filterIndex < existingFilters.Length; filterIndex++)
76 var existingFilter = existingFilters[filterIndex];
77 var existingRenderer = existingFilter.GetComponent<MeshRenderer>();
79 if (existingFilter ==
null || existingRenderer ==
null)
82 var newFilterHolder =
new GameObject(
"FilterHolder");
83 newFilterHolder.transform.parent = highlightHolder.transform;
84 var newFilter = newFilterHolder.AddComponent<MeshFilter>();
85 newFilter.sharedMesh = existingFilter.sharedMesh;
86 var newRenderer = newFilterHolder.AddComponent<MeshRenderer>();
88 var materials =
new Material[existingRenderer.sharedMaterials.Length];
89 for (var materialIndex = 0; materialIndex < materials.Length; materialIndex++)
90 materials[materialIndex] = highlightMat;
91 newRenderer.sharedMaterials = materials;
102 if (highlightHolder ==
null)
110 if (existingSkinned !=
null && highlightSkinned !=
null)
112 highlightSkinned.transform.position = existingSkinned.transform.position;
113 highlightSkinned.transform.rotation = existingSkinned.transform.rotation;
114 highlightSkinned.transform.localScale = existingSkinned.transform.lossyScale;
115 highlightSkinned.localBounds = existingSkinned.localBounds;
116 var blendShapeCount = existingSkinned.sharedMesh.blendShapeCount;
117 for (var blendShapeIndex = 0; blendShapeIndex < blendShapeCount; blendShapeIndex++)
118 highlightSkinned.SetBlendShapeWeight(blendShapeIndex,
119 existingSkinned.GetBlendShapeWeight(blendShapeIndex));
123 for (var rendererIndex = 0; rendererIndex <
highlightRenderers.Length; rendererIndex++)
128 if (existingRenderer !=
null && highlightRenderer !=
null)
130 highlightRenderer.transform.position = existingRenderer.transform.position;
131 highlightRenderer.transform.rotation = existingRenderer.transform.rotation;
132 highlightRenderer.transform.localScale = existingRenderer.transform.lossyScale;
137 private new void Update()
149 mats = selectedGO.GetComponentInChildren<MeshRenderer>().materials;
157 selectedGO.GetComponentInChildren<MeshRenderer>().materials = origMats;
159 Destroy(highlightHolder);
174 var ci = CultureInfo.CurrentCulture;
175 var nfi = ci.NumberFormat;
176 input = input.Replace(
',', nfi.CurrencyDecimalSeparator[0]);
177 input = input.Replace(
'.', nfi.CurrencyDecimalSeparator[0]);
179 if (input.Contains(
":"))
181 var first = input.Split(
':');
204 mats = selectedGO.GetComponentInChildren<MeshRenderer>().materials;
205 origMats =
new Material[mats.Length];
206 Array.Copy(mats, origMats, mats.Length);
219 if (go ==
null)
return;
232 GetComponentInChildren<ObjectDroppedEvent>().NameText.text = go.name;
244 yield
return new WaitForEndOfFrame();
251 if (hash ==
"")
return;
265 GetComponentInChildren<ObjectDroppedEvent>().NameText.text =
gop.
asset.name;
275 canvasSelector.GetComponent<Canvas>().enabled =
false;
276 GetComponentInParent<Canvas>().enabled =
true;
293 GetComponentInParent<Canvas>().enabled =
false;
295 canvasSelector.GetComponent<Canvas>().enabled =
true;
302 if (selectedGO ==
null)
308 public new void GetObjectData(SerializationInfo info, StreamingContext context)
310 base.GetObjectData(info, context);
311 info.AddValue(
"selectedGO", selectedGO, typeof(GameObject));
312 info.AddValue(
"timeToWatch",
timeToWatch, typeof(
float));
315 info.AddValue(
"selectedGOHash", selectedGO.GetComponent<
HashHolder>().
Hash, typeof(
string));
323 public CheckAction(SerializationInfo info, StreamingContext context) : base(info, context)
325 selectedGO = (GameObject) info.GetValue(
"selectedGO", typeof(GameObject));
327 foreach (var e
in info)
329 if (e.Name ==
"selectedGOHash")
335 if (e.Name ==
"timeToWatch")
timeToWatch = info.GetSingle(
"timeToWatch");
UnityEngine.UI.Button Button
void TriggerOutput(string id)
List< GameObject > outPuts
IEnumerator SetGameObjectJob(string hash)
override void Triggered(string id)
SkinnedMeshRenderer[] highlightSkinnedRenderers
MeshRenderer[] existingRenderers
string canvasSelectorName
void InputEnded(string input)
SkinnedMeshRenderer[] existingSkinnedRenderers
new void GetObjectData(SerializationInfo info, StreamingContext context)
virtual void CreateHighlightRenderers()
void SetGameObject(string hash)
CheckAction(SerializationInfo info, StreamingContext context)
void SetGameObject(GameObject go)
virtual void UpdateHighlightRenderers()
MeshRenderer[] highlightRenderers
GameObject GetGameObject()
static GameObject activeGameObject
void Initialize(bool reinitialize=false)
static GazePickupHelper instance
static void ChangeMaterialsModeToFadeMode(Material[] mats)
static void SetMaterialAlpha(Material[] mats, float value)