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(); } } }
public SnakeBody() { SnakeBodyParts = new List <SnakeBodyPart> { SnakeBodyPart.GetDefaultBodyPart() }; }
private void Initialize() { ChangeDirectionCommand = new PlayerControlCommnad(ChangeDirection, CanChangeDirection); SnakeObj = new SnakeModel(SnakeBodyPart.GetDefaultBodyPart()); PointObj = new PointModel(); SnakeTimer = new DispatcherSnakeTime(UpdateBoard); }
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; }
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); } }
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); }
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; } }
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)); }
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; }
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); }
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); } } }
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); }
public void OnBodyPartCreated(SnakeBodyPart createdPart) { bodyPartCreatedEvent?.Invoke(createdPart); }
public void OnBodyPartDestroyed(SnakeBodyPart destroyedPart) { bodyPartDestroyedEvent?.Invoke(destroyedPart); }
private void Awake() { nextGridMoveDirection = new Vector2Int(0, 1); gridMoveTimeRemaining = totalGridMoveTime; headBodyPart = new SnakeBodyPart(gameObject, new Vector2Int(10, 10), new Vector2Int(0, 1)); }