/// <summary> /// Tries to eat the target, doesn't matter if it is not actually edible. /// </summary> private void TryEatTarget(Vector3Int checkPos) { if (hasFoodPrefereces) { var food = registerObj.Matrix.Get <ItemAttributesV2>(checkPos, true).FirstOrDefault(IsInFoodPreferences); if (food == null) { return; } // Send the sound to all nearby clients SoundManager.PlayNetworkedAtPos("EatFood", transform.position, null, false, false, gameObject); Despawn.ServerSingle(food.gameObject); FoodEatenEvent?.Invoke(); } else { var food = registerObj.Matrix.GetFirst <Edible>(checkPos, true); if (food != null) { food.TryConsume(gameObject); } } }
public void HandleEvent(FoodEatenEvent e) { Snake.Extend(); if (Board.IsEntityOutOfBounds(Snake.Parts[Snake.Parts.Count - 1])) { NotifyObservers(new SnakeDyingEvent()); } }