Danmaku_no_Kyojin.Collisions.CollisionConvexPolygon.GetCenter C# (CSharp) Method

GetCenter() public method

public GetCenter ( ) : Vector2
return Vector2
        public override Vector2 GetCenter()
        {
            if (_center == Vector2.Zero)
                ComputeCenter();

            return _center;
        }

Usage Example

コード例 #1
0
        public PolygonShape Split(CollisionConvexPolygon collisionBox)
        {
            var collisionBoxCenter = collisionBox.GetCenter();
            var destroyAll = false;

            /*
            // TODO: This structure is dead only if its area is less than a specific number, not because its center is destroyed
            // Structure is dead
            if (collisionBoxCenter.X > (_size.X / 2f - 2 * _step) + _parent.Position.X - _parent.Origin.X &&
                collisionBoxCenter.X < (_size.X / 2f + 2 * _step) + _parent.Position.X - _parent.Origin.X)
            {
                destroyAll = true;
            }
            */

            // When we retrieve vertices, we need to transform them from world to local
            var newPolygonShapeVertices = new List<Vector2>();
            var newVertices = _polygonShape.Vertices.ToList();

            if (!destroyAll)
            {
                // The part to remove is at left
                if (collisionBoxCenter.X < _size.X / 2f)
                {
                    var leftVertices = newVertices.FindAll(vertex => vertex.X <= collisionBoxCenter.X);

                    newPolygonShapeVertices.AddRange(leftVertices);

                    foreach (var vertex in leftVertices)
                    {
                        newVertices.Remove(vertex);
                    }

                    /*
                    foreach (var box in CollisionBoxes)
                    {
                        var center = box.GetCenter();

                        if (center.X <= minX + _parent.Position.X - _parent.Origin.X)
                        {
                            ParticleExplosion(center);
                            toDelete.Add(box);
                        }
                    }

                    foreach (var collisionElement in toDelete)
                    {
                        var box = (CollisionConvexPolygon) collisionElement;
                        CollisionBoxes.Remove(box);
                        _leftCollisionBoxes.Remove(box);
                    }
                    */
                }
                // The part to remove is at right
                else if (collisionBoxCenter.X > _size.X / 2f)
                {
                    var rightVertices = newVertices.FindAll(vertex => vertex.X >= collisionBoxCenter.X);

                    newPolygonShapeVertices.AddRange(rightVertices);

                    foreach (var vertex in rightVertices)
                        newVertices.Remove(vertex);

                    /*
                    foreach (CollisionElement box in CollisionBoxes)
                    {
                        var center = box.GetCenter();

                        if (center.X >= maxX + _parent.Position.X - _parent.Origin.X)
                        {
                            ParticleExplosion(center);
                            toDelete.Add(box);
                        }
                    }

                    foreach (var collisionElement in toDelete)
                    {
                        var box = (CollisionConvexPolygon) collisionElement;
                        CollisionBoxes.Remove(box);
                        _rightCollisionBoxes.Remove(box);
                    }
                    */
                }
            }
            /*
            else
            {

                foreach (var center in CollisionBoxes.Select(box => box.GetCenter()))
                {
                    ParticleExplosion(center);
                }

                _leftCollisionBoxes.Clear();
                _rightCollisionBoxes.Clear();
                CollisionBoxes.Clear();
            }
            */

            /*
            var vertices = new List<Vector2>();
            vertices.AddRange(_bottomLeftVertices);
            vertices.AddRange(_bottomRightVertices);
            vertices.AddRange(_topRightVertices);
            vertices.AddRange(_topLeftVertices);
            */
            _polygonShape.UpdateVertices(newVertices.ToArray());

            /*
            if (_leftCollisionBoxes.Contains(collisionBox))
                _leftCollisionBoxes.Remove(collisionBox);
            else if (_rightCollisionBoxes.Contains(collisionBox))
                _rightCollisionBoxes.Remove(collisionBox);

            CollisionBoxes.Remove(collisionBox);
            */

            var newPolygonShapeVerticesArray = newPolygonShapeVertices.ToArray();

            if (newPolygonShapeVertices.Count > 0)
            {
                var newVerticesOriginPosition = newPolygonShapeVertices[0];
                for (int i = 0; i < newPolygonShapeVerticesArray.Length; i++)
                {
                    newPolygonShapeVerticesArray[i].X -= newVerticesOriginPosition.X;
                }
            }
            else
                newPolygonShapeVerticesArray = null;

            return new PolygonShape(_gameRef, newPolygonShapeVerticesArray);
        }