Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 public void checkForAliveness(I_WorldObject x, List <I_WorldObject> toDelete)
 {
     if (!x.isAlive())
     {
         toDelete.Add(x);
     }
 }
Esempio n. 4
0
        public void alertCollision(I_WorldObject collidedObject)
        {
            if (collidedObject.getName() == "usf" || collidedObject.getName() == "Spikes")
            {
                //update boundingBox size
            }

            //this.blockColor = Color.Red;
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public void alertCollision(I_WorldObject collidedObject)
 {
     if (platformName == "ScareBlock")
     {
         suspenseMusicInstance.Stop();
         scaryImage.scare(0, 1);
         this.setAlive(false);
     }
 }
Esempio n. 7
0
 public Camera(SpriteBatch sb, I_WorldObject trackMe)
 {
     mSpriteBatch = sb;
     Position     = trackMe.getPosition();
     Rotation     = 0.0f;
     Zoom         = 1.0f;
     this.trackMe = trackMe;
     tracking     = false;
 }
Esempio n. 8
0
        public void alertCollision(I_WorldObject collidedObject)
        {
            if (collidedObject.getName() != "fire particle")
            {
                coinSound_instance.Play();

                scoreDisplay.text = "coins: " + ++cointCount;
                this.setAlive(false);
            }
        }
Esempio n. 9
0
        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);
                }
            }
        }
Esempio n. 10
0
        /// <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));
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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;
        }
Esempio n. 13
0
        /// <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));
        }
Esempio n. 14
0
        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;
                    }
                }
            }
        }
Esempio n. 15
0
 internal void RemoveElement(I_WorldObject worldObj)
 {
     mElements.Remove(worldObj);
 }
Esempio n. 16
0
 // alert a world object that a collision has occured with the given object
 public void alertCollision(I_WorldObject collidedObject)
 {
 }
Esempio n. 17
0
 /// <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));
 }