Пример #1
0
        /// <summary>
        /// Копирует игровой объект в world.
        /// </summary>
        /// <param name="world">World, в который требуется скопировать объект.</param>
        /// <param name="position">Позиция объекта (его точки Origin) в координатах World.</param>
        public GameObject CopyObjectToWorld(World world, Vector2 position)
        {
            //Создаём новый экземпляр GameObject
            GameObject result = new GameObject(world, _camera, _spriteBatch, position);

            //Копируем joint'ы между частями
            foreach (var joint in _joints)
            {
                Joint newJoint = joint.Copy();
                result.AddJoint(newJoint);
                world.AddJoint(newJoint);
            }

            //Копируем все части
            foreach (var part in _parts)
            {
                GameObjectPart newPart = part.DeepClone(world, position);

                //Меняем привязки joint'ов на новые копии body.
                for (int i = 0; i < _joints.Count; i++)
                {
                    if (_joints[i].BodyA == part.Body)
                    {
                        result._joints[i].BodyA = newPart.Body;
                    }
                    else if (_joints[i].BodyB == part.Body)
                    {
                        result._joints[i].BodyB = newPart.Body;
                    }
                }
                result.AddPart(newPart);
            }

            return(result);
        }