Example #1
0
        public bool EatAt(BaseSerpent other, out int eatenSegments)
        {
            eatenSegments = 0;
            if (SerpentStatus != SerpentStatus.Alive || other.SerpentStatus != SerpentStatus.Alive)
                return false;
            IsLonger = _serpentLength >= other._serpentLength;
            if (SerpentStatus != SerpentStatus.Alive)
                return false;

            if (Vector3.DistanceSquared(Position, other.Position) < 0.8f)
            {
                if (other._serpentLength > _serpentLength)
                    return false;
                grow(other._serpentLength + 1);
                eatenSegments = other._serpentLength;
                return true;
            }

            for (var tail = other._tail; tail != null; tail = tail.Next)
                if (this.DistanceSquared(tail) < 0.2f)
                {
                    if (tail == other._tail)
                    {
                        grow(other._serpentLength + 1);
                        eatenSegments = other._serpentLength;
                        return true;
                    }
                    eatenSegments++;
                    grow(other.removeTail(tail));
                    return false;
                }
            return false;
        }