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; }
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]); } }