/// <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); }
/// <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); } }