public static void TryInstantiatingAnimatable(OvrAvatar.HandType hand, ShelfObject shelfObj) { if (RecognitionState != GestureRecognizerState.Default && RecognitionState != GestureRecognizerState.Recognizing) { return; } if (hand == OvrAvatar.HandType.Right && (rightAlmostPointOn || rightPointOn || rightGrabOn || rightPinchOn)) { var anim = shelfObj.InstantiateAnimatable(); if (anim != null) { ObjectInstantiator = shelfObj; ObjectBeingInstantiated = anim; SetRecognitionState(GestureRecognizerState.Instantiating); } } else if (hand == OvrAvatar.HandType.Left && (leftAlmostPointOn || leftPointOn || leftGrabOn || leftPinchOn)) { var anim = shelfObj.InstantiateAnimatable(); if (anim != null) { ObjectInstantiator = shelfObj; ObjectBeingInstantiated = anim; SetRecognitionState(GestureRecognizerState.Instantiating); } } }
public void TryChangeParticleShapeFromDroppedObject(ShelfObject obj) { try { ParticleMeshCreator = obj; GameObject particle = Instantiate(obj.ParticlePrefab); if (particle == null) { Debug.LogWarning("No particle prefab found!"); return; } var mr = particle.GetComponentInChildren <MeshRenderer>(); ParticleScale = mr.transform.lossyScale; main.startSizeX = ParticleScale.x; main.startSizeY = ParticleScale.y; main.startSizeZ = ParticleScale.z; InitialParticleRotation = mr.transform.rotation; var psr = GetComponent <ParticleSystemRenderer>(); var mesh = mr.GetComponent <MeshFilter>().mesh; var verts = mesh.vertices; Vector3 avg = Vector3.zero; for (int i = 0; i < verts.Length; ++i) { avg += verts[i]; } avg /= verts.Length; for (int i = 0; i < verts.Length; ++i) { verts[i] -= avg; } mesh.SetVertices(verts.ToList()); psr.mesh = mesh; psr.material = mr.GetComponent <MeshRenderer>().material; Destroy(particle); ps.Stop(); ps.Play(); } catch (Exception e) { Debug.LogWarning(e.Message); Debug.Log(e.StackTrace); } }
public void Init(ShelfObject parent) { Creator = parent; OnInit?.Invoke(); TimeManager.RegisterObject(this); foreach (var mf in GetComponentsInChildren <MeshFilter>()) { mf.mesh = mf.sharedMesh; } foreach (var child in GetComponentsInChildren <Animatable>()) { if (child.GetInstanceID() == GetInstanceID()) { continue; } child.Init(null); } }
private static void InstantiateFromSaved(SerializableAnimatable obj, Dictionary <string, ShelfObject> shelfObjMap) { bool isShelfObjectAvailable = false; ShelfObject shelfObj = null; isShelfObjectAvailable = shelfObjMap.TryGetValue(obj.ShelfParent, out shelfObj); if (!isShelfObjectAvailable) { Debug.LogWarning("File load warning: Could not find a shelfobject named " + obj.ShelfParent); return; } var sceneObject = shelfObj.InstantiateAnimatable(); SetPropertiesFromJsonObject(sceneObject, obj); // Emitters are only supported on top-level objects var emitter = obj.Emitter; // Assuming that for no "Emitter" in the JSON, its default value // is created, and so a list subfield should be empty if (emitter.CurveControlPoints != null && emitter.CurveControlPoints.Count > 0) { var sceneEmitter = sceneObject.GetComponentInChildren <ParticleEmitter>(); if (sceneEmitter == null) { Debug.LogWarning( "JSON indicated the presence of a particle emitter for " + shelfObj.name + " but no emitter was found on the object!"); } var ctrlPoints = new List <Vector3>(emitter.CurveControlPoints.Count); foreach (var pt in emitter.CurveControlPoints) { ctrlPoints.Add(pt); } sceneEmitter.SetEmissionConeFromFile( ctrlPoints, emitter.TimeCache, emitter.EmissionDataKeys); sceneEmitter.GravityInfluence = emitter.GravityInfluence; sceneEmitter.WindInfluence = emitter.WindInfluence; sceneEmitter.MaxPositionNoise = emitter.MaxPositionNoise; sceneEmitter.MaxRotationNoise = emitter.MaxRotationNoise; sceneEmitter.PositionNoiseFrequency = emitter.PositionNoiseFrequency; sceneEmitter.RotationNoiseFrequency = emitter.RotationNoiseFrequency; sceneEmitter.SpiralFrequency = emitter.SpiralFrequency; sceneEmitter.InitialParticleRotation = emitter.InitialParticleRotation; sceneEmitter.ParticleScale = emitter.ParticleScale; if (emitter.ParticleShelfObject != null) { bool res = shelfObjMap.TryGetValue(emitter.ParticleShelfObject, out ShelfObject particleMeshParent); if (res) { sceneEmitter.TryChangeParticleShapeFromDroppedObject(particleMeshParent); } } sceneEmitter.TestMode = false; } sceneObject.Init(shelfObj); }