Exemplo n.º 1
0
        public void Execute()
        {
            foreach (var gameEntity in this.snakeVisuals.GetEntities())
            {
                List <Vector2>    positionParts = gameEntity.snakePosition.positions;
                List <ViewEntity> visualParts   = gameEntity.snakeVisual.linkedVisuals;

                SnakeVisualDefinition visualDefinition = gameEntity.snakeVisual.snakeVisualDefinition;
                {
                    Direction headDirection = this.GetPartDirection(positionParts[1], positionParts[0]);
                    this.SetSprite(visualParts[0], this.GetHeadSprite(headDirection, visualDefinition));
                }

                for (int i = 1; i < visualParts.Count - 1; i++)
                {
                    Direction towardsHeadDirection = this.GetPartDirection(positionParts[i], positionParts[i - 1]);
                    Direction fromTailDirection    = this.GetPartDirection(positionParts[i + 1], positionParts[i]);
                    this.SetSprite(visualParts[i], this.GetBodySprite(towardsHeadDirection, fromTailDirection, visualDefinition));
                }

                {
                    Direction tailDirection = this.GetPartDirection(positionParts[positionParts.Count - 1], positionParts[positionParts.Count - 2]);
                    this.SetSprite(visualParts[positionParts.Count - 1], this.GetTailSprite(tailDirection, visualDefinition));
                }

                for (int i = 0; i < visualParts.Count; i++)
                {
                    visualParts[i].ReplacePosition(positionParts[i]);
                }
            }
        }
Exemplo n.º 2
0
        Sprite GetHeadSprite(Direction direction, SnakeVisualDefinition visualDefinition)
        {
            switch (direction)
            {
            case Direction.Up:
                return(visualDefinition.headUp);

            case Direction.Down:
                return(visualDefinition.headDown);

            case Direction.Left:
                return(visualDefinition.headLeft);

            case Direction.Right:
                return(visualDefinition.headRight);

            default:
                return(visualDefinition.headUp);
            }
        }
Exemplo n.º 3
0
        Sprite GetTailSprite(Direction direction, SnakeVisualDefinition visualDefinition)
        {
            switch (direction)
            {
            case Direction.Up:
                return(visualDefinition.tailUp);

            case Direction.Down:
                return(visualDefinition.tailDown);

            case Direction.Left:
                return(visualDefinition.tailLeft);

            case Direction.Right:
                return(visualDefinition.tailRight);

            default:
                return(visualDefinition.tailUp);
            }
        }
Exemplo n.º 4
0
        Sprite GetBodySprite(Direction towardsHeadDirection, Direction fromTailDirection, SnakeVisualDefinition visualDefinition)
        {
            switch (fromTailDirection)
            {
            case Direction.Up:
                switch (towardsHeadDirection)
                {
                case Direction.Up:
                    return(visualDefinition.straightUp);

                case Direction.Down:
                    Assert.IsTrue(false, "This direction should not happen");
                    return(visualDefinition.straightUp);

                case Direction.Left:
                    return(visualDefinition.upToLeft);

                case Direction.Right:
                    return(visualDefinition.upToRight);

                default:
                    return(visualDefinition.straightUp);
                }

            case Direction.Down:
                switch (towardsHeadDirection)
                {
                case Direction.Up:
                    Assert.IsTrue(false, "This direction should not happen");
                    return(visualDefinition.straightDown);

                case Direction.Down:
                    return(visualDefinition.straightDown);

                case Direction.Left:
                    return(visualDefinition.downToLeft);

                case Direction.Right:
                    return(visualDefinition.downToRight);

                default:
                    return(visualDefinition.straightDown);
                }

            case Direction.Left:
                switch (towardsHeadDirection)
                {
                case Direction.Up:
                    return(visualDefinition.leftToUp);

                case Direction.Down:
                    return(visualDefinition.leftToDown);

                case Direction.Left:
                    return(visualDefinition.straightLeft);

                case Direction.Right:
                    Assert.IsTrue(false, "This direction should not happen");
                    return(visualDefinition.straightLeft);

                default:
                    return(visualDefinition.straightLeft);
                }

            case Direction.Right:
                switch (towardsHeadDirection)
                {
                case Direction.Up:
                    return(visualDefinition.rightToUp);

                case Direction.Down:
                    return(visualDefinition.rightToDown);

                case Direction.Left:
                    Assert.IsTrue(false, "This direction should not happen");
                    return(visualDefinition.straightRight);

                case Direction.Right:
                    return(visualDefinition.straightRight);

                default:
                    return(visualDefinition.straightRight);
                }

            default:
                return(visualDefinition.straightUp);
            }
        }