예제 #1
0
    void Awake()
    {
        uitTimer = transform.Find("UITimer_Text").GetComponent <TextMeshProUGUI>();

        tmpSodas    = transform.Find("TMPSodas_Text").GetComponent <TextMeshProUGUI>();
        sodasKeycap = transform.Find("TMPSodas_Text/SodaKeycap").GetComponent <Keycap>();

        tmpTowels    = transform.Find("TMPTowels_Text").GetComponent <TextMeshProUGUI>();
        towelsKeycap = transform.Find("TMPTowels_Text/TowelKeycap").GetComponent <Keycap>();

        warpKeycap = transform.Find("TMPWarp_Text/WarpKeycap").GetComponent <Keycap>();
    }
    void Update()
    {
        float currentVelocity = Vector3.Distance(ourTransform.position, previousPos);

        //If object is moving fast enough to possibly clip through objects
        if (currentVelocity > minimumVelocity)
        {
            Vector3 center         = ourTransform.position + colliderOffset;
            Vector3 previousCenter = previousPos + colliderOffset;

            //For each edge, draw a ray between previous edge pos and current edge pos
            foreach (var edgeOffset in colliderEdgeOffsets)
            {
                Vector3 edge         = center + edgeOffset;
                Vector3 previousEdge = previousCenter + edgeOffset;

                bool         hitKeycap = false;
                RaycastHit[] hits      = Physics.RaycastAll(previousEdge, edge - previousEdge, Vector3.Distance(edge, previousEdge));
                foreach (var hit in hits)
                {
                    //Find keycap component
                    Keycap keycap = hit.collider.GetComponent <Keycap>();

                    if (keycap == null)
                    {
                        continue;
                    }

                    Transform keycapTransform = keycap.transform;

                    //Update keycap position
                    keycapTransform.position =
                        ourTransform.position +
                        keycapTransform.TransformDirection(new Vector3(0, -colliderRadius)) +
                        keycapTransform.TransformVector(new Vector3(0, -keycap.ColliderValidationOffset, 0));
                    keycapTransform.localPosition = new Vector3(0, keycapTransform.localPosition.y, 0);

                    hitKeycap = true;
                    break;
                }

                if (hitKeycap)
                {
                    break;
                }
            }
        }

        previousPos = transform.position;
    }
예제 #3
0
파일: Key.cs 프로젝트: WhiteAutumn/Activate
    void Awake()
    {
        //Find and cache keycap transform
        foreach (Transform child in transform)
        {
            Keycap keycap = child.GetComponent <Keycap>();
            if (keycap != null)
            {
                keycapTransform = keycap.transform;
            }
        }

        UpdateListeners();
    }
        public void TestKeycap()
        {
            var keys = new HashSet <byte>(new[] { (byte)'*', (byte)'#', (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9', });

            var count = 0;

            foreach (var s in Data.RgiEmojiSequenceList)
            {
                if (Keycap.Create(s) is { Value: not 0 } key)
                {
                    ++count;
                    Assert.Contains(key.Value, keys);
                }
            }

            Assert.Equal(12, count);
        }