private Rectangle boundingBoxToRectangle(I_WorldObject obj) { Rectangle AABB = new Rectangle((int)obj.getPosition().X, (int)obj.getPosition().Y, obj.getTexture().Width, obj.getTexture().Height); return(AABB); }
public void Draw(I_WorldObject obj) { if (trackMe.getPosition().X >= WorldData.GetInstance().ScreenWidth / 2) { //Vector2 objPosInCameraSpace = obj.getPosition() - new Vector2((trackMe.getPosition()).X, 0); Vector2 objPosInCameraSpace = obj.getPosition() - new Vector2((trackMe.getPosition()).X - (WorldData.GetInstance().ScreenWidth / 2), 0); objPosInScreenSpace = objPosInCameraSpace; tracking = true; } else { tracking = false; Vector2 objPosInCameraSpace = obj.getPosition(); objPosInScreenSpace = objPosInCameraSpace; } if (obj.getName() != "coin") { mSpriteBatch.Draw(obj.getTexture(), objPosInScreenSpace, null, obj.getColor(), obj.getRotation(), obj.getTextureOrigin(), 1.0f, SpriteEffects.None, 0); } else if (obj.getName() == "coin") { Rectangle srcRect = new Rectangle((int)obj.getFrame() * obj.getFrameWidth(), 0, obj.getFrameWidth(), obj.getTexture().Height); mSpriteBatch.Draw(obj.getTexture(), objPosInScreenSpace, srcRect, Color.White, obj.getRotation(), Vector2.Zero, obj.getScale(), SpriteEffects.None, 0); } }
public void checkForAliveness(I_WorldObject x, List <I_WorldObject> toDelete) { if (!x.isAlive()) { toDelete.Add(x); } }
public void alertCollision(I_WorldObject collidedObject) { if (collidedObject.getName() == "usf" || collidedObject.getName() == "Spikes") { //update boundingBox size } //this.blockColor = Color.Red; }
public void DrawText(I_WorldObject text) { Vector2 objPosInCameraSpace = text.getPosition(); objPosInScreenSpace = objPosInCameraSpace; string texttowrite = parseText(text.getName()); mSpriteBatch.DrawString(font, texttowrite, objPosInScreenSpace, Color.Black, text.getRotation(), text.getTextureOrigin(), 1.0f, SpriteEffects.None, 0); }
public void alertCollision(I_WorldObject collidedObject) { if (platformName == "ScareBlock") { suspenseMusicInstance.Stop(); scaryImage.scare(0, 1); this.setAlive(false); } }
public Camera(SpriteBatch sb, I_WorldObject trackMe) { mSpriteBatch = sb; Position = trackMe.getPosition(); Rotation = 0.0f; Zoom = 1.0f; this.trackMe = trackMe; tracking = false; }
public void alertCollision(I_WorldObject collidedObject) { if (collidedObject.getName() != "fire particle") { coinSound_instance.Play(); scoreDisplay.text = "coins: " + ++cointCount; this.setAlive(false); } }
public void checkCollisions(I_WorldObject x) { qt.FindIntersects(boundingBoxToRectangle(x), ref intersectingObjects); foreach (I_WorldObject y in intersectingObjects) { if (!object.ReferenceEquals(x, y)) { x.alertCollision(y); y.alertCollision(x); } } }
/// <summary> /// Helper method to insert a world element into a quadtree /// </summary> /// <param name="root">Root of the tree to insert the element into</param> /// <param name="elem">Element to insert</param> /// <param name="depth">Maximum depth to insert the element</param> /// <returns>A pointer to the quadtree node where the element is inserted (for moving /// or removing the element at a later time)</retfrns> private QuadTreeNode insert(QuadTreeNode root, I_WorldObject elem) { Rectangle elemAABB = boundingBoxToRectangle(elem); if (AddToThisNode(root, elemAABB)) { root.mElements.Add(elem); return(root); } int midWidth = root.Area.Width / 2; int midHeight = root.Area.Height / 2; int centerX = root.Area.Left + midWidth; int centerY = root.Area.Top + midHeight; if (elemAABB.Left < centerX && elemAABB.Top < centerY) { if (root.mUpperLeft == null) { root.mUpperLeft = new QuadTreeNode(new Rectangle(root.Area.X, root.Area.Y, midWidth, midHeight), root); } return(insert(root.mUpperLeft, elem)); } else if (elemAABB.Left > centerX && elemAABB.Top < centerY) { if (root.mUpperRight == null) { root.mUpperRight = new QuadTreeNode(new Rectangle(root.Area.X + midWidth, root.Area.Y, root.Area.Width - midWidth, midHeight), root); } return(insert(root.mUpperRight, elem)); } else if (elemAABB.Left < centerX) { if (root.mLowerLeft == null) { root.mLowerLeft = new QuadTreeNode(new Rectangle(root.Area.X, root.Area.Y + midHeight, midWidth, root.Area.Height - midHeight), root); } return(insert(root.mLowerLeft, elem)); } else { if (root.mLowerRight == null) { root.mLowerRight = new QuadTreeNode(new Rectangle(root.Area.X + midWidth, root.Area.Y + midHeight, root.Area.Width - midWidth, root.Area.Height - midHeight), root); } return(insert(root.mLowerRight, elem)); } }
private Rectangle boundingBoxToRectangle(I_WorldObject obj) { Rectangle AABB; if (obj.getName().CompareTo("coin") == 0) { AABB = new Rectangle((int)obj.getPosition().X, (int)obj.getPosition().Y, 20, obj.getTexture().Height); } else { AABB = new Rectangle((int)obj.getPosition().X, (int)obj.getPosition().Y, obj.getTexture().Width, obj.getTexture().Height); } return(AABB); }
public void alertCollision(I_WorldObject collidedObject) { Console.WriteLine(collidedObject.getName()); if (collidedObject.getName() == "fire particle") { nunCount++; gameWorld.nunCount.text = "nuns impaled: " + nunCount; this.setAlive(false); } if (collidedObject.isRigid()) { this.enemyVelocity *= -1; } //this.blockColor = Color.Red; }
/// <summary> /// Update the location of a world element within the quadtree /// </summary> /// <param name="worldObj">The object whose location we wish to update</param> /// <param name="tree">A pointer to the quadtree node where this object currently lives</param> /// <returns>Pointer to the node in the quadtree where the element lives after the update</returns> public QuadTreeNode UpdateLocation(I_WorldObject worldObj, QuadTreeNode tree) { if (tree != null) { Rectangle aabb = boundingBoxToRectangle(worldObj); if (tree.Area.Contains(aabb) && AddToThisNode(tree, aabb)) { return(tree); } tree.RemoveElement(worldObj); while (tree.Parent != null && !tree.Area.Contains(aabb)) { tree = tree.Parent; } return(insert(tree, worldObj)); } return(insert(worldObj)); }
public void alertCollision(I_WorldObject collidedObject) { if (collidedObject.getName() == "nun") { this.setVelocity(Vector2.Zero); this.setDirection(new Vector2(1, 0)); this.setSpeed(Vector2.Zero); this.setPhysics(false); playerPosition = WorldData.GetInstance().playerInitialPosition; } if (!collidedObject.isRigid()) { if (collidedObject.getName() == "Spikes" || collidedObject.getName() == "SpikeField") { setAlive(false); this.setVelocity(Vector2.Zero); this.setDirection(new Vector2(1, 0)); this.setSpeed(Vector2.Zero); this.setPhysics(false); playerPosition = WorldData.GetInstance().playerInitialPosition; setAlive(true); } if (collidedObject.getName() == "scroll") { collidedObject.setAlive(false); WorldData.level++; } } if (collidedObject.isRigid()) { //this.playerColor = Color.Red; BoundingBox myAABB = this.playerBoundingBox; BoundingBox other = collidedObject.getBoundingBox(); int leftBound = (int)Math.Max(myAABB.Min.X, other.Min.X); int rightBound = (int)Math.Min(myAABB.Max.X, other.Max.X); int upperBound = (int)Math.Max(myAABB.Min.Y, other.Min.Y); int lowerBound = (int)Math.Min(myAABB.Max.Y, other.Max.Y); int xMovement = rightBound - leftBound; int yMovement = lowerBound - upperBound; if (xMovement < yMovement) { if (myAABB.Min.X < other.Min.X) { this.playerPosition.X -= xMovement - 1; } else { this.playerPosition.X += xMovement + 1; } } else { if (myAABB.Min.Y < other.Min.Y) { this.playerState = State.GROUNDED; this.playerPosition.Y -= (yMovement); this.setVelocity(new Vector2(0, 0)); } else { //this.playerState = State.HIGH; this.playerPosition.Y += (yMovement); this.setVelocity(new Vector2(0, 0)); //this.gravityState = true; } } } }
internal void RemoveElement(I_WorldObject worldObj) { mElements.Remove(worldObj); }
// alert a world object that a collision has occured with the given object public void alertCollision(I_WorldObject collidedObject) { }
/// <summary> /// Insert a world element into the quadtree /// </summary> /// <param name="elem">World element to insert</param> /// <returns>The quadtree node where the element was placed (used for changing the /// location of the quadtree element</returns> public QuadTreeNode insert(I_WorldObject elem) { return(insert(mRoot, elem)); }