Esempio n. 1
0
    protected void OnSpriteRendered()
    {
        if (Camera.current == null)
        {
            return;
        }

        CardinalSprite.Direction calculatedDirection = GetCurrentDirection(Camera.current);
        currentDirection = calculatedDirection;
    }
 void AnimationUpdate()
 {
     /*
      * if (currentDirection != direction.currentDirection)
      * {
      * UpdateSprite();
      * currentDirection = direction.currentDirection;
      * }
      * else if (currentFrame != frame)
      * {
      * UpdateSprite();
      * currentFrame = frame;
      * }
      */
     currentDirection = direction.currentDirection;
     UpdateSprite();
 }
Esempio n. 3
0
    //transform.Rotate(0, currentAngle, 0);

    /*
     * if (calculatedDirection != currentDirection)
     * UpdateSprite(calculatedDirection);
     * }
     *
     * protected void UpdateSprite(CardinalSprite.Direction direction)
     * {
     * if (!cardinalSprite) return;
     * if (!spriteRenderer) return;
     * Sprite s = cardinalSprite.south;
     *
     * // Opposite direction: If you camera is south, we see the back of the object, facing north.
     * switch(direction)
     * {
     * case CardinalSprite.Direction.South:
     *  s = cardinalSprite.north;
     *  break;
     * case CardinalSprite.Direction.SouthEast:
     *  s = cardinalSprite.northWest;
     *  break;
     * case CardinalSprite.Direction.East:
     *  s = cardinalSprite.west;
     *  break;
     * case CardinalSprite.Direction.NorthEast:
     *  s = cardinalSprite.southWest;
     *  break;
     * case CardinalSprite.Direction.North:
     *  break;
     * case CardinalSprite.Direction.NorthWest:
     *  s = cardinalSprite.southEast;
     *  break;
     * case CardinalSprite.Direction.West:
     *  s = cardinalSprite.east;
     *  break;
     * case CardinalSprite.Direction.SouthWest:
     *  s = cardinalSprite.northEast;
     *  break;
     * }
     * spriteRenderer.sprite = s;
     *
     * currentDirection = direction;
     * }
     *
     */

    protected CardinalSprite.Direction GetCurrentDirection(Camera cam)
    {
        CardinalSprite.Direction direction = CardinalSprite.Direction.South;

        Vector3 localSpacePoint = transform.InverseTransformPoint(cam.transform.position);
        // ONEEIGHTHPI offsets so that our unit circle is rotated.
        float angle = Mathf.Atan2(localSpacePoint.x, localSpacePoint.z) + ONEEIGTHPI + PI;

        angle %= TWOPI;

        angle /= TWOPI;

        // Opposite direction
        // If camera is south, we face north
        direction = (CardinalSprite.Direction)(int)(angle * 8.0f);


        currentAngle = angle;


        return(direction);
    }