Ejemplo n.º 1
0
        /// <summary>
        /// Přidá trojrozměrný simulovatelný objekt do trojrozměrného světa.
        /// </summary>
        /// <param name="body3D">Trojrozměrný simulovatelný objekt.</param>
        /// <returns>Vrací <code>true</code>, pokud se přidání podařilo, a <code>false</code>, pokud již stejný objekt
        /// byl přidán.</returns>
        public bool AddBody3D(Body3D body3D)
        {
            if (_body3Ds.Contains(body3D))
            {
                return(false);
            }

            _body3Ds.Add(body3D);
            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Odebere trojrozměrný simulovatelný objekt z trojrozměrného světa.
        /// </summary>
        /// <param name="body3D">Trojrozměrný simulovatelný objekt, který má být odebrán.</param>
        /// <returns>Vrací <code>true</code>, pokud se odebrání podařilo, a <code>false</code>, pokud odebíraný objekt
        /// neexistuje.</returns>
        public bool RemoveBody3D(Body3D body3D)
        {
            if (!_body3Ds.Contains(body3D))
            {
                return(false);
            }

            _body3Ds.Remove(body3D);
            World2D.Remove(body3D.Body2D);
            return(true);
        }
        private Body3D ConstructBody3D(
            Model model,
            World world2D,
            Vector2 position,
            BodyType bodyType,
            float positionZ,
            BasicEffectParams basicEffectParams)
        {
            Body body = BodyCreator.CreateBodyFromVertices(
                _modelVerticesPairs[model],
                world2D,
                position,
                bodyType,
                Density,
                Rotation);

            Body3D body3D = new Body3D(model, body, positionZ)
            {
                BasicEffectParams = basicEffectParams
            };

            return(body3D);
        }
        /// <summary>
        /// Sestaví horizontální řadu identických trojrozměrných simulovatelných objektů.
        /// </summary>
        /// <param name="model">Trojrozměrný model pro vytvoření tvaru.</param>
        /// <param name="world3D">Trojrozměrný svět, do kterého má být trojrozměrná řada zařazena.</param>
        /// <param name="count">Počet objektů tvořících řadu.</param>
        /// <param name="center">Souřadnice středu řady.</param>
        /// <param name="bodyType">Typ vytvořených objektů řady (statické, kinematické nebo dynamické).</param>
        /// <param name="category">Kategorie kolidujících těles.</param>
        /// <param name = "basicEffectParams"> Parametry pro třídu<see cref= "BasicEffect" />.</param>
        public void BuildRow(
            Model model,
            World3D world3D,
            int count,
            Vector2 center    = new Vector2(),
            BodyType bodyType = BodyType.Static,
            BasicEffectParams basicEffectParams = null,
            Category category = Category.Cat31)
        {
            if (count <= 0)
            {
                return;
            }

            Body3D body3D = CreateBody3D(model, center, bodyType, basicEffectParams);

            body3D.Body2D.SetCollisionCategories(category);
            world3D.AddBody3D(body3D);

            if (count == 1)
            {
                return;
            }

            float   xSize    = body3D.BoundingBox.Max.X * 2;
            int     eachSide = count / 2;
            Vector2 position = new Vector2(center.X - xSize, center.Y);

            body3D = CreateBody3D(model, position, bodyType, basicEffectParams);
            body3D.Body2D.SetCollisionCategories(category);
            world3D.AddBody3D(body3D);

            if (count == 2)
            {
                return;
            }

            for (int i = 2; i <= eachSide; i++)
            {
                position = new Vector2(center.X - i * xSize, center.Y);
                body3D   = CreateBody3D(model, position, bodyType, basicEffectParams);
                body3D.Body2D.SetCollisionCategories(category);
                world3D.AddBody3D(body3D);
            }

            for (int i = 1; i < eachSide; i++)
            {
                position = new Vector2(center.X + i * xSize, center.Y);
                body3D   = CreateBody3D(model, position, bodyType, basicEffectParams);
                body3D.Body2D.SetCollisionCategories(category);
                world3D.AddBody3D(body3D);
            }

            if (count % 2 != 0)
            {
                position = new Vector2(center.X + eachSide * xSize, center.Y);
                body3D   = CreateBody3D(model, position, bodyType, basicEffectParams);
                body3D.Body2D.SetCollisionCategories(category);
                world3D.AddBody3D(body3D);
            }
        }