예제 #1
0
    public void SetSprite(FivewayFrame frame)
    {
        int directionNumber = 0;

        if (frame.directionSprites.Length < 5)
        {
            goto skipangle;
        }

        //calculate sprite number
        Vector3 toTarget = (Camera.main.transform.position - transform.position).normalized;

        int angle1 = Mathf.RoundToInt((Mathf.Atan2(transform.forward.z, transform.forward.x) + Mathf.PI) / (Mathf.PI * 2) * 8) % 8;
        int angle2 = Mathf.RoundToInt((Mathf.Atan2(toTarget.z, toTarget.x) + Mathf.PI) / (Mathf.PI * 2) * 8) % 8;

        directionNumber = angle2 - angle1;
        if (directionNumber < 0)
        {
            directionNumber += 8;
        }

        if (frame.directionSprites.Length == 8)
        {
            materialProperties.SetVector("_UvTransform", new Vector4(0, 0, 0, 0));
        }
        else
        {
            if (directionNumber > 4)
            {
                directionNumber = 8 - directionNumber;
                materialProperties.SetVector("_UvTransform", new Vector4(1, 0, 0, 0)); //mirror U axis
            }
            else
            {
                materialProperties.SetVector("_UvTransform", new Vector4(0, 0, 0, 0));
            }
        }

        if (lastDirection != directionNumber)
        {
            refreshSprite = true;
            lastDirection = directionNumber;
        }

skipangle:

        if (!refreshSprite)
        {
            return;
        }

        Texture sprite = frame.directionSprites[directionNumber];

        materialProperties.SetFloat("_ScaleX", (float)sprite.width / MapLoader.sizeDividor);
        materialProperties.SetFloat("_ScaleY", (float)sprite.height / MapLoader.sizeDividor);
        materialProperties.SetTexture("_MainTex", sprite);
        mr.SetPropertyBlock(materialProperties);

        refreshSprite = false;
    }
예제 #2
0
 public void CacheSprites(FivewayFrameAssigment[] assigments, ref FivewayFrame[] frames)
 {
     frames = new FivewayFrame[assigments.Length];
     for (int i = 0; i < assigments.Length; i++)
     {
         frames[i].Assign(assigments[i]);
     }
 }