public void OnMove(BlackHoleBehaviour movedBehaviour) { unsafe { if (_numGrasped > 0) { for (int i = 0; i < _sim.mainState->numBlackHoles; i++) { var ie = _spawned[i].GetComponent <InteractionBehaviour>(); if (!ie.isGrasped) { continue; } int id = _sim.mainState->blackHoles[i].id; _sim.UpdateDrag(_renderer.displayAnchor.worldToLocalMatrix * _spawned[i].transform.localToWorldMatrix, id); } GalaxySimulation.BlackHole *ptr = _sim.mainState->blackHoles; for (int i = 0; i < _sim.mainState->numBlackHoles; i++, ptr++) { ptr->position = _renderer.displayAnchor.InverseTransformPoint(_spawned[i].transform.position); ptr->velocity = _renderer.displayAnchor.InverseTransformDirection(_spawned[i].transform.forward * (*ptr).velocity.magnitude); } _sim.ResetTrails(); } } }
private unsafe void onStepSim() { if (_sim.mainState->numBlackHoles != _spawned.Count) { onResetSim(); } if (canAct) { foreach (var item in _spawned) { item.GetComponent <InteractionBehaviour>().ignoreGrasping = false; } } else if (_numGrasped == 0) { foreach (var item in _spawned) { item.GetComponent <InteractionBehaviour>().ignoreGrasping = true; } } GalaxySimulation.BlackHole *ptr = _sim.mainState->blackHoles; for (int i = 0; i < _sim.mainState->numBlackHoles; i++, ptr++) { _spawned[i].transform.position = _renderer.displayAnchor.TransformPoint(ptr->position); _spawned[i].transform.rotation = _renderer.displayAnchor.rotation * Quaternion.LookRotation(ptr->velocity); } float minDist = float.MaxValue; foreach (var spawned in _spawned) { spawned.transform.localScale = Vector3.one / spawned.transform.parent.lossyScale.x; if (Hands.Left != null) { minDist = Mathf.Min(minDist, Vector3.Distance(Hands.Left.PalmPosition.ToVector3(), spawned.transform.position)); } if (Hands.Right != null) { minDist = Mathf.Min(minDist, Vector3.Distance(Hands.Right.PalmPosition.ToVector3(), spawned.transform.position)); } } float percent = Mathf.InverseLerp(_distRange.x, _distRange.y, minDist); float curvedPercent = _distCurve.Evaluate(percent); multiplier = canAct ? curvedPercent : 1f; }
private void onResetSim() { foreach (var spawned in _spawned) { DestroyImmediate(spawned.gameObject); } _spawned.Clear(); unsafe { GalaxySimulation.BlackHole *ptr = _sim.mainState->blackHoles; for (int i = 0; i < _sim.mainState->numBlackHoles; i++, ptr++) { var obj = Instantiate(_iePrefab); _spawned.Add(obj); obj.transform.SetParent(_renderer.displayAnchor); obj.transform.position = (*ptr).position; obj.transform.localScale = Vector3.one; obj.transform.rotation = Quaternion.identity; obj.gameObject.SetActive(true); } } }