Ejemplo n.º 1
0
    private void OnHeadCollision(Collider collision, SnakeBodyPart myBodyPart)
    {
        if (CheckForSelfCollision(collision))
        {
            SnakeDeath();
        }

        Block block;

        if (CheckCollisionWithBlock(collision, out block))
        {
            AddSegment();
            BlockBenefitsResolver.ResolveBlock(block, this);
            return;
        }

        SnakeScript otherSnake;

        if (CheckCollisionWithOtherSnake(collision, out otherSnake))
        {
            if (HasBatteringRamEnabled())
            {
                StartCoroutine(DecreaseBatteringRam());
            }
            else
            {
                SnakeDeath();
            }
        }
    }
Ejemplo n.º 2
0
 public SnakeBody()
 {
     SnakeBodyParts = new List <SnakeBodyPart>
     {
         SnakeBodyPart.GetDefaultBodyPart()
     };
 }
Ejemplo n.º 3
0
        private void Initialize()
        {
            ChangeDirectionCommand = new PlayerControlCommnad(ChangeDirection, CanChangeDirection);
            SnakeObj = new SnakeModel(SnakeBodyPart.GetDefaultBodyPart());
            PointObj = new PointModel();

            SnakeTimer = new DispatcherSnakeTime(UpdateBoard);
        }
Ejemplo n.º 4
0
    public override void OnOverlap(TileObject other)
    {
        SnakeBodyPart snake = other.GetComponent <SnakeBodyPart>();

        if (snake != null)
        {
            GameManager.GameOver();
        }
    }
    // create a new snake body part and add a reference to the part before it
    public void addSnakeBodyPart()
    {
        SnakeBodyPart prevPart = transform.GetChild(transform.childCount - 1).GetComponent <SnakeBodyPart>();

        SnakeBodyPart bodyPart = Instantiate(bodyPartPrefab, prevPart.prevPos, prevPart.transform.rotation).GetComponent <SnakeBodyPart> ();

        bodyPart.transform.SetParent(transform);
        bodyPart.name     = "bodyPart" + transform.childCount;
        bodyPart.prevPart = prevPart.gameObject;
    }
Ejemplo n.º 6
0
    public override void OnOverlap(TileObject other)
    {
        SnakeBodyPart snakePart = other.GetComponent <SnakeBodyPart>();

        if (snakePart != null)
        {
            snakePart.snake.ReduceSnake(1);
            TiledGameMap.Instance.RemoveOccupantClean(positionX, positionY, this);
            Destroy(gameObject);
        }
    }
Ejemplo n.º 7
0
        public GameObject GetRandomSnakeBodyPart()
        {
            var           snakeBodyParts = GameObject.FindObjectsOfType <SnakeBodyPart>().ToList();
            SnakeBodyPart snakeHead      = GameObject.FindObjectOfType <SnakeHead>();

            snakeBodyParts.Add(snakeHead);

            int randomFollowIndex = Random.Range(0, snakeBodyParts.Count);

            return(snakeBodyParts[randomFollowIndex].gameObject);
        }
Ejemplo n.º 8
0
 public void Move(Vector2 previousPosition, Directions newDirection)
 {
     transform.GetChild(0).GetComponent <SnakeBodyPart>().Move(previousPosition, newDirection);
     if (_shouldGrow == true)
     {
         SnakeBodyPart tail        = transform.GetChild(transform.childCount - 1).GetComponent <SnakeBodyPart>();
         GameObject    newBodyPart = Instantiate(bodyPart, transform);
         tail.Child = newBodyPart;
         newBodyPart.GetComponent <SnakeBodyPart>().Init(tail.LastDirection, tail.PreviousPosition);
         _shouldGrow = false;
     }
 }
Ejemplo n.º 9
0
        public static ISnake GenerateSnake(int startingXpos, int startingYPos, int length)
        {
            ExceptionHelper.ThrowArgumentOutOfRangeIfZeroOrLower(nameof(length), length);
            ISnakeBodyPart[] snakeBodyParts = new ISnakeBodyPart[length];
            ISnakeBodyPart   nextBodyPart   = null;

            for (int i = length - 1; i >= 0; --i)
            {
                ISnakeBodyPart currentSnakeBodyPart = new SnakeBodyPart(startingXpos, startingYPos, i == 0, nextBodyPart);
                snakeBodyParts[i] = currentSnakeBodyPart;
                nextBodyPart      = currentSnakeBodyPart;
            }
            return(new Snake(snakeBodyParts));
        }
Ejemplo n.º 10
0
        public Snake(int areaWidth, int areaHeight)
        {
            _areaWidth  = areaWidth;
            _areaHeight = areaHeight;

            BodyParts = new List <SnakeBodyPart>();
            Head      = new SnakeBodyPart(_areaWidth, _areaHeight)
            {
                Position = new Position {
                    X = 5, Y = 5
                }
            };
            BodyParts.Add(Head);
            Direction = MovementDirection.Right;
        }
Ejemplo n.º 11
0
        public SnakeBodyPart Eat(Food food)
        {
            if (!Head.Position.Equals(food.Position))
            {
                return(null);
            }

            var bodyPart = new SnakeBodyPart(_areaWidth, _areaHeight)
            {
                Position = food.Position.Clone()
            };

            BodyParts.Add(bodyPart);

            return(bodyPart);
        }
Ejemplo n.º 12
0
    private void OnTailCollision(Collider collision, SnakeBodyPart myBodyPart)
    {
        if (CheckForSelfCollision(collision))
        {
            return;
        }

        SnakeScript otherSnake;

        if (CheckCollisionWithOtherSnake(collision, out otherSnake))
        {
            if (otherSnake.HasBatteringRamEnabled())
            {
                _snakeSegmentList.Remove(myBodyPart);
                Destroy(myBodyPart.gameObject);
            }
        }
    }
Ejemplo n.º 13
0
    private void Awake()
    {
        gridPosition      = new Vector2Int(5, 5);
        gridMoveTimerMax  = 0.3f;
        gridMoveTimer     = gridMoveTimerMax;
        gridMoveDirection = Direction.Right;

        snakeMovePositionList = new List <SnakeMovePosition>();
        SnakeMovePosition firstMovePosition = new SnakeMovePosition(null, gridPosition, gridMoveDirection);

        snakeMovePositionList.Add(firstMovePosition);

        snakeBodyPartList = new List <SnakeBodyPart>();
        SnakeBodyPart firstPart = new SnakeBodyPart(0);

        firstPart.SetSnakeMovePosition(firstMovePosition);
        snakeBodyPartList.Add(firstPart);
    }
Ejemplo n.º 14
0
 public void OnBodyPartCreated(SnakeBodyPart createdPart)
 {
     bodyPartCreatedEvent?.Invoke(createdPart);
 }
Ejemplo n.º 15
0
 public void OnBodyPartDestroyed(SnakeBodyPart destroyedPart)
 {
     bodyPartDestroyedEvent?.Invoke(destroyedPart);
 }
Ejemplo n.º 16
0
 private void Awake()
 {
     nextGridMoveDirection = new Vector2Int(0, 1);
     gridMoveTimeRemaining = totalGridMoveTime;
     headBodyPart          = new SnakeBodyPart(gameObject, new Vector2Int(10, 10), new Vector2Int(0, 1));
 }