Esempio n. 1
0
 /**
  * Attempts to center the camera on the sprite
  */
 public void centerCamera(ISprite s)
 {
     isCentered   = true;
     centerSprite = s;
     this.center_X_Displacement = output.Width / 2 - s.getImage().Width;
     this.center_Y_Displacement = output.Height / 2 - s.getImage().Height;
 }
Esempio n. 2
0
 private void calculateDisplacement()
 {
     if (isCentered)
     {
         displacementX += centerSprite.getImage().Width *isDisplacedX();
         displacementY += centerSprite.getImage().Height *isDisplacedY();
     }
     else
     {
         displacementX = 0;
         displacementY = 0;
     }
 }
Esempio n. 3
0
        /**
         * Combines all images in the queue onto the output image
         * Starts with a clean background each time
         * Images appear stacked on top of each other, with the last added to the
         *    queue on top
         * Sprites are rendered first, text is always rendered last
         *
         * (Note by Nathan, this method could be optimized (?*) to distribute
         *   the load of drawing each sprite in the queue to instead be done
         *   whenever a sprite is added. *Wouldn't change the total time needed.)
         * @author Nathan Swartz, Benjamin Lippincott
         */
        public void Render()
        {
            if (this.hasChanged)
            {
                Graphics g = Graphics.FromImage(output);
                g.DrawImage(background, 0, 0);
                calculateDisplacement();

                // render each renderable's sprite that is displaying
                foreach (KeyValuePair <int, LinkedList <Renderable> > kvp in layers)
                {
                    foreach (Renderable renderable in kvp.Value)
                    {
                        if (renderable.isDisplaying())
                        {
                            ISprite s = renderable.getSprite();
                            g.DrawImage(s.getImage(),
                                        s.getX() + displacementX,
                                        s.getY() + displacementY);
                        }
                    }
                }

                // render each text overlay, on top of every other layer
                foreach (TextOverlay t in texts)
                {
                    using (Font f = t.getFont())
                    {
                        g.DrawString(t.getMessage(), f, Brushes.Black, new PointF(t.getX(), t.getY()));
                    }
                }

                g.Dispose();
                this.hasChanged = false;
            }
        }