Exemplo n.º 1
0
        private void CheckCollisionWithWalls(CircleData circle, float deltaTime)
        {
            var   position = circle.GetPosition();
            var   radius   = circle.GetRadius();
            var   invertX  = false;
            var   invertY  = false;
            float deltaX   = 0;
            float deltaY   = 0;

            if (position.x + radius > halfWidth)
            {
                invertX = true;
                deltaX  = halfWidth - position.x - radius;
            }
            else if (position.x - radius < -halfWidth)
            {
                invertX = true;
                deltaX  = -halfWidth - position.x + radius;
            }

            if (position.y + radius > halfHeight)
            {
                invertY = true;
                deltaY  = halfHeight - position.y - radius;
            }
            else if (position.y - radius < -halfHeight)
            {
                invertY = true;
                deltaY  = -halfHeight - position.y + radius;
            }

            float updateTimeX = 0;
            float updateTimeY = 0;
            var   speed       = circle.GetSpeed();

            if (invertX)
            {
                updateTimeX = deltaX / speed.x;
            }
            if (invertY)
            {
                updateTimeY = deltaY / speed.y;
            }

            if (invertX || invertY)
            {
                var updateTime = Mathf.Min(updateTimeX, updateTimeY);
                circle.UpdatePosition(updateTime);
                circle.InvertSpeed(invertX, invertY);
                circle.UpdatePosition(-updateTime);
            }
        }
Exemplo n.º 2
0
        public bool SpawnCircle(CircleData circle)
        {
            var circlePosition = circle.GetPosition();
            var circleRadius   = circle.GetRadius();

            foreach (var circleOnField in circles)
            {
                var minDistance = circleRadius + circleOnField.GetRadius();
                var distance    = (circlePosition - circleOnField.GetPosition()).magnitude;
                if (minDistance > distance)
                {
                    return(false);
                }
            }
            circles.Add(circle);
            return(true);
        }
Exemplo n.º 3
0
        private void UpdatePosition()
        {
            var position = data.GetPosition();

            transform.localPosition = new Vector3(position.x, position.y, CIRCLE_Z);
        }