Beispiel #1
0
    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();
            }
        }
    }
Beispiel #2
0
    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;
    }
Beispiel #3
0
    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);
            }
        }
    }