Ejemplo n.º 1
0
        public Vector2f ConvertXY(float x, float y)
        {
            float newX = ((x - GetX()) / (LSystem.GetScaleWidth()));
            float newY = ((y - GetY()) / (LSystem.GetScaleHeight()));

            if (isInstance && _currentScreen.IsTxUpdate())
            {
                float oldW = GetWidth();
                float oldH = GetHeight();
                float newW = GetWidth() * GetScaleX();
                float newH = GetHeight() * GetScaleY();
                float offX = oldW / 2f - newW / 2f;
                float offY = oldH / 2f - newH / 2f;
                float nx   = (newX - offX);
                float ny   = (newY - offY);
                int   r    = (int)GetRotation();
                switch (r)
                {
                case -90:
                    offX = oldH / 2f - newW / 2f;
                    offY = oldW / 2f - newH / 2f;
                    nx   = (newX - offY);
                    ny   = (newY - offX);
                    _tmpLocaltion.Set(nx / GetScaleX(), ny / GetScaleY()).RotateSelf(-90);
                    _tmpLocaltion.Set(-(_tmpLocaltion.x - GetWidth()), MathUtils.Abs(_tmpLocaltion.y));
                    break;

                case 0:
                case 360:
                    _tmpLocaltion.Set(nx / GetScaleX(), ny / GetScaleY());
                    break;

                case 90:
                    offX = oldH / 2f - newW / 2f;
                    offY = oldW / 2f - newH / 2f;
                    nx   = (newX - offY);
                    ny   = (newY - offX);
                    _tmpLocaltion.Set(nx / GetScaleX(), ny / GetScaleY()).RotateSelf(90);
                    _tmpLocaltion.Set(-_tmpLocaltion.x, MathUtils.Abs(_tmpLocaltion.y - GetHeight()));
                    break;

                case -180:
                case 180:
                    _tmpLocaltion.Set(nx / GetScaleX(), ny / GetScaleY()).RotateSelf(GetRotation()).AddSelf(GetWidth(),
                                                                                                            GetHeight());
                    break;

                default:     // 原则上不处理非水平角度的触点
                    _tmpLocaltion.Set(newX, newY);
                    break;
                }
            }
            else
            {
                _tmpLocaltion.Set(newX, newY);
            }
            if (IsFlipX() || IsFlipY())
            {
                HelperUtils.Local2Global(IsFlipX(), IsFlipY(), GetWidth() / 2, GetHeight() / 2, _tmpLocaltion.x,
                                         _tmpLocaltion.y, _tmpLocaltion);
                return(_tmpLocaltion);
            }
            return(_tmpLocaltion);
        }