//Contructor to load from an xml file. public StaticBody(Game game, XmlReader reader, GraphicsDevice graphics) : base(game) { this.id = PhysicsOverlord.GetInstance().GetID(); Color colour = new Color(); //node is now on colour colour.PackedValue = Convert.ToUInt32(reader.GetAttribute("Color")); reader.ReadToDescendant("VertexList"); //move node up one to VertexList int count = int.Parse(reader.GetAttribute("Count")); sourceVertices = new Vector2[count]; reader.ReadToDescendant("Vertex"); for (int i = 0; i < count; i++) { Vector2 newVertex = new Vector2(); newVertex.X = float.Parse(reader.GetAttribute("X")); newVertex.Y = float.Parse(reader.GetAttribute("Y")); sourceVertices[i] = newVertex; reader.ReadToNextSibling("Vertex"); //</Vertex> } reader.ReadEndElement(); //</VertexList> reader.ReadEndElement(); //</StaticBody> BoundingBox = new BoundingRectangle(sourceVertices); this.graphics = graphics; this.colour = colour; this.type = PhysicsObjectType.potStaticBody; Init(); TriangulatePoly(); centre = new Vector2(BoundingBox.l + ((BoundingBox.r - BoundingBox.l) / 2), BoundingBox.t + ((BoundingBox.b - BoundingBox.t) / 2)); }
public void addParticles(int num) { for (int i = 0; i < num; i++) { Random RandomGenerator = new Random(); float randomXVelocity = 5; Vector2 mousePos = camera.MouseToWorld(); float xPos = mousePos.X; float yPos = mousePos.Y; if (xPos < drawingOffset) { xPos = drawingOffset + 1; } else if (xPos > 800 - drawingOffset) { xPos = 800 - drawingOffset - 1; } if (yPos < 0) { yPos = 1; } else if (yPos > 500) { yPos = 499; } BlobParticle theParticle = new BlobParticle(Game, new Vector2(xPos, yPos), theSprite, PhysicsOverlord.GetInstance().GetID(), particleRadius); theParticle.colour = Color.Red; theParticle.velocity = new Vector2(5, 5); theParticles.Add(theParticle); SpatialGrid.GetInstance().AddObject(theParticle); particleCount++; currentNumParticles--; } }
public override void NewBody(Color colour, params Vector2[] vertices) { RigidBody rb = new RigidBody(Game, PhysicsOverlord.GetInstance().GetID(), GraphicsDevice, colour, vertices); NewBody(rb); }
/// <summary> /// Creates a new Static Body /// </summary> /// <param name="colour">The Colour of the Static Body</param> /// <param name="vertices">The vertices that make up the shape</param> public virtual void NewBody(Color colour, params Vector2[] vertices) { StaticBody sb = new StaticBody(Game, PhysicsOverlord.GetInstance().GetID(), GraphicsDevice, colour, vertices); NewBody(sb); }
public void CreateParasite(int numParts) { // Create the Tail tail = new ParasiteTail(Game, PhysicsOverlord.GetInstance().GetID(), theSprite, 1.0f); tail.Position = new Vector2(50 * numParts, 100); tail.relativeGravity = gravity; // Create Body Parts for (int i = 0; i < numParts; i++) { ParasiteBodyPart bodyPart = new ParasiteBodyPart(Game, PhysicsOverlord.GetInstance().GetID(), theSprite, 1f); bodyPart.Position = new Vector2(50 * i, 100); bodyparts.Add(bodyPart); bodyPart.relativeGravity = gravity; } // Create the Head head = new ParasiteHead(Game, PhysicsOverlord.GetInstance().GetID(), theSprite, 1); head.Position = new Vector2(100, 100); head.relativeGravity = gravity; // IKPoints theParasite.Add(head); IKMember headIK = new IKMember(head, 10); IKMember lastIK = headIK; head.AddIKPoint(headIK); for (int i = 0; i < bodyparts.Count; i++) { ParasiteBodyPart bodyPart = bodyparts[i]; theParasite.Add(bodyPart); IKMember ik = new IKMember(bodyPart, 10); if (i != 0) { ik.addNeighbour(lastIK); } lastIK.addNeighbour(ik); bodyPart.AddIKPoint(ik); lastIK = ik; } // Uncomment for Rad Wiggle Motion! // currentIK = new IKMember(tail, 1); //currentIK = new IKMember(tail, 10); theParasite.Add(tail); IKMember tailIK = new IKMember(tail, 10); tailIK.addNeighbour(lastIK); lastIK.addNeighbour(tailIK); tail.AddIKPoint(tailIK); tail.initTail(); }